Imported Upstream version 0.60.6.1 upstream/0.60.6.1
authorAnas Nashif <anas.nashif@intel.com>
Thu, 21 Feb 2013 18:01:03 +0000 (10:01 -0800)
committerAnas Nashif <anas.nashif@intel.com>
Thu, 21 Feb 2013 18:01:03 +0000 (10:01 -0800)
564 files changed:
ABOUT-NLS [new file with mode: 0644]
COPYING [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
auto/Makefile.in [new file with mode: 0644]
auto/MkSrc/CcHelper.pm [new file with mode: 0644]
auto/MkSrc/Create.pm [new file with mode: 0644]
auto/MkSrc/Info.pm [new file with mode: 0644]
auto/MkSrc/Methods.pm [new file with mode: 0644]
auto/MkSrc/ProcCc.pm [new file with mode: 0644]
auto/MkSrc/ProcCxx.pm [new file with mode: 0644]
auto/MkSrc/ProcImpl.pm [new file with mode: 0644]
auto/MkSrc/ProcNative.pm [new file with mode: 0644]
auto/MkSrc/ProcNativeImpl.pm [new file with mode: 0644]
auto/MkSrc/Read.pm [new file with mode: 0644]
auto/MkSrc/Type.pm [new file with mode: 0644]
auto/MkSrc/Util.pm [new file with mode: 0644]
auto/auto [new file with mode: 0644]
auto/mk-doc.pl [new file with mode: 0644]
auto/mk-src.in [new file with mode: 0644]
auto/mk-src.pl [new file with mode: 0755]
auto/mk-src.txt [new file with mode: 0644]
common/Makefile.in [new file with mode: 0644]
common/asc_ctype.hpp [new file with mode: 0644]
common/basic_list.hpp [new file with mode: 0644]
common/block_slist-t.hpp [new file with mode: 0644]
common/block_slist.hpp [new file with mode: 0644]
common/cache-t.hpp [new file with mode: 0644]
common/cache.cpp [new file with mode: 0644]
common/cache.hpp [new file with mode: 0644]
common/can_have_error.cpp [new file with mode: 0644]
common/can_have_error.hpp [new file with mode: 0644]
common/char_vector.hpp [new file with mode: 0644]
common/clone_ptr-t.hpp [new file with mode: 0644]
common/clone_ptr.hpp [new file with mode: 0644]
common/config.cpp [new file with mode: 0644]
common/config.hpp [new file with mode: 0644]
common/convert.cpp [new file with mode: 0644]
common/convert.hpp [new file with mode: 0644]
common/copy_ptr.hpp [new file with mode: 0644]
common/document_checker.cpp [new file with mode: 0644]
common/document_checker.hpp [new file with mode: 0644]
common/enumeration.hpp [new file with mode: 0644]
common/error.cpp [new file with mode: 0644]
common/error.hpp [new file with mode: 0644]
common/errors.cpp [new file with mode: 0644]
common/errors.hpp [new file with mode: 0644]
common/file_data_util.cpp [new file with mode: 0644]
common/file_data_util.hpp [new file with mode: 0644]
common/file_util.cpp [new file with mode: 0644]
common/file_util.hpp [new file with mode: 0644]
common/filter.cpp [new file with mode: 0644]
common/filter.hpp [new file with mode: 0644]
common/filter_char.hpp [new file with mode: 0644]
common/filter_char_vector.hpp [new file with mode: 0644]
common/filter_debug.hpp [new file with mode: 0644]
common/fstream.cpp [new file with mode: 0644]
common/fstream.hpp [new file with mode: 0644]
common/generic_copy_ptr-t.hpp [new file with mode: 0644]
common/generic_copy_ptr.hpp [new file with mode: 0644]
common/getdata.cpp [new file with mode: 0644]
common/getdata.hpp [new file with mode: 0644]
common/gettext.h [new file with mode: 0644]
common/gettext_init.cpp [new file with mode: 0644]
common/hash-t.hpp [new file with mode: 0644]
common/hash.hpp [new file with mode: 0644]
common/hash_fun.hpp [new file with mode: 0644]
common/indiv_filter.hpp [new file with mode: 0644]
common/info.cpp [new file with mode: 0644]
common/info.hpp [new file with mode: 0644]
common/iostream.cpp [new file with mode: 0644]
common/iostream.hpp [new file with mode: 0644]
common/istream.hpp [new file with mode: 0644]
common/itemize.cpp [new file with mode: 0644]
common/itemize.hpp [new file with mode: 0644]
common/key_info.hpp [new file with mode: 0644]
common/lock.hpp [new file with mode: 0644]
common/lsort.hpp [new file with mode: 0644]
common/mutable_container.hpp [new file with mode: 0644]
common/mutable_string.hpp [new file with mode: 0644]
common/ndebug.hpp [new file with mode: 0644]
common/objstack.cpp [new file with mode: 0644]
common/objstack.hpp [new file with mode: 0644]
common/ostream.hpp [new file with mode: 0644]
common/parm_string.hpp [new file with mode: 0644]
common/posib_err.cpp [new file with mode: 0644]
common/posib_err.hpp [new file with mode: 0644]
common/simple_string.hpp [new file with mode: 0644]
common/speller.cpp [new file with mode: 0644]
common/speller.hpp [new file with mode: 0644]
common/stack_ptr.hpp [new file with mode: 0644]
common/string.cpp [new file with mode: 0644]
common/string.hpp [new file with mode: 0644]
common/string_enumeration.hpp [new file with mode: 0644]
common/string_list.cpp [new file with mode: 0644]
common/string_list.hpp [new file with mode: 0644]
common/string_map.cpp [new file with mode: 0644]
common/string_map.hpp [new file with mode: 0644]
common/string_pair.hpp [new file with mode: 0644]
common/string_pair_enumeration.hpp [new file with mode: 0644]
common/strtonum.cpp [new file with mode: 0644]
common/strtonum.hpp [new file with mode: 0644]
common/tokenizer.cpp [new file with mode: 0644]
common/tokenizer.hpp [new file with mode: 0644]
common/type_id.hpp [new file with mode: 0644]
common/vararray.hpp [new file with mode: 0644]
common/vector.hpp [new file with mode: 0644]
common/word_list.hpp [new file with mode: 0644]
compile [new file with mode: 0755]
config.guess [new file with mode: 0755]
config.rpath [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.ac [new file with mode: 0644]
data/Makefile.in [new file with mode: 0644]
data/cp1250.cmap [new file with mode: 0644]
data/cp1250.cset [new file with mode: 0644]
data/cp1251.cmap [new file with mode: 0644]
data/cp1251.cset [new file with mode: 0644]
data/cp1252.cmap [new file with mode: 0644]
data/cp1252.cset [new file with mode: 0644]
data/cp1253.cmap [new file with mode: 0644]
data/cp1253.cset [new file with mode: 0644]
data/cp1254.cmap [new file with mode: 0644]
data/cp1254.cset [new file with mode: 0644]
data/cp1255.cmap [new file with mode: 0644]
data/cp1255.cset [new file with mode: 0644]
data/cp1256.cmap [new file with mode: 0644]
data/cp1256.cset [new file with mode: 0644]
data/cp1257.cmap [new file with mode: 0644]
data/cp1257.cset [new file with mode: 0644]
data/cp1258.cmap [new file with mode: 0644]
data/cp1258.cset [new file with mode: 0644]
data/dvorak.kbd [new file with mode: 0644]
data/iso-8859-1.cmap [new file with mode: 0644]
data/iso-8859-1.cset [new file with mode: 0644]
data/iso-8859-10.cmap [new file with mode: 0644]
data/iso-8859-10.cset [new file with mode: 0644]
data/iso-8859-11.cmap [new file with mode: 0644]
data/iso-8859-11.cset [new file with mode: 0644]
data/iso-8859-13.cmap [new file with mode: 0644]
data/iso-8859-13.cset [new file with mode: 0644]
data/iso-8859-14.cmap [new file with mode: 0644]
data/iso-8859-14.cset [new file with mode: 0644]
data/iso-8859-15.cmap [new file with mode: 0644]
data/iso-8859-15.cset [new file with mode: 0644]
data/iso-8859-16.cmap [new file with mode: 0644]
data/iso-8859-16.cset [new file with mode: 0644]
data/iso-8859-2.cmap [new file with mode: 0644]
data/iso-8859-2.cset [new file with mode: 0644]
data/iso-8859-3.cmap [new file with mode: 0644]
data/iso-8859-3.cset [new file with mode: 0644]
data/iso-8859-4.cmap [new file with mode: 0644]
data/iso-8859-4.cset [new file with mode: 0644]
data/iso-8859-5.cmap [new file with mode: 0644]
data/iso-8859-5.cset [new file with mode: 0644]
data/iso-8859-6.cmap [new file with mode: 0644]
data/iso-8859-6.cset [new file with mode: 0644]
data/iso-8859-7.cmap [new file with mode: 0644]
data/iso-8859-7.cset [new file with mode: 0644]
data/iso-8859-8.cmap [new file with mode: 0644]
data/iso-8859-8.cset [new file with mode: 0644]
data/iso-8859-9.cmap [new file with mode: 0644]
data/iso-8859-9.cset [new file with mode: 0644]
data/koi8-r.cmap [new file with mode: 0644]
data/koi8-r.cset [new file with mode: 0644]
data/koi8-u.cmap [new file with mode: 0644]
data/koi8-u.cset [new file with mode: 0644]
data/split.kbd [new file with mode: 0644]
data/standard.kbd [new file with mode: 0644]
depcomp [new file with mode: 0755]
examples/Makefile.am [new file with mode: 0644]
examples/Makefile.in [new file with mode: 0644]
examples/example-c.c [new file with mode: 0644]
examples/list-dicts.c [new file with mode: 0644]
gen/Makefile.in [new file with mode: 0644]
gen/filter.pot [new file with mode: 0644]
gen/mk-dirs_h.pl [new file with mode: 0644]
gen/mk-filter-pot.pl [new file with mode: 0644]
gen/mk-static-filter.pl [new file with mode: 0644]
gen/settings.h.in [new file with mode: 0644]
install-sh [new file with mode: 0755]
interfaces/Makefile.in [new file with mode: 0644]
interfaces/cc/Makefile.in [new file with mode: 0644]
interfaces/cc/aspell.h [new file with mode: 0644]
interfaces/cc/pspell.h [new file with mode: 0644]
lib/Makefile.in [new file with mode: 0644]
lib/can_have_error-c.cpp [new file with mode: 0644]
lib/config-c.cpp [new file with mode: 0644]
lib/document_checker-c.cpp [new file with mode: 0644]
lib/dummy.cpp [new file with mode: 0644]
lib/error-c.cpp [new file with mode: 0644]
lib/filter-c.cpp [new file with mode: 0644]
lib/filter_entry.hpp [new file with mode: 0644]
lib/find_speller.cpp [new file with mode: 0644]
lib/info-c.cpp [new file with mode: 0644]
lib/mutable_container-c.cpp [new file with mode: 0644]
lib/new_checker.cpp [new file with mode: 0644]
lib/new_config.cpp [new file with mode: 0644]
lib/new_filter.cpp [new file with mode: 0644]
lib/new_fmode.cpp [new file with mode: 0644]
lib/speller-c.cpp [new file with mode: 0644]
lib/string_enumeration-c.cpp [new file with mode: 0644]
lib/string_list-c.cpp [new file with mode: 0644]
lib/string_map-c.cpp [new file with mode: 0644]
lib/string_pair_enumeration-c.cpp [new file with mode: 0644]
lib/word_list-c.cpp [new file with mode: 0644]
lib5/Makefile.am [new file with mode: 0644]
lib5/Makefile.in [new file with mode: 0644]
lib5/aspell-dummy.cpp [new file with mode: 0644]
lib5/pspell-dummy.cpp [new file with mode: 0644]
ltmain.sh [new file with mode: 0755]
m4/Makefile.in [new file with mode: 0644]
m4/codeset.m4 [new file with mode: 0644]
m4/gettext.m4 [new file with mode: 0644]
m4/glibc2.m4 [new file with mode: 0644]
m4/glibc21.m4 [new file with mode: 0644]
m4/iconv.m4 [new file with mode: 0644]
m4/intdiv0.m4 [new file with mode: 0644]
m4/intl.m4 [new file with mode: 0644]
m4/intldir.m4 [new file with mode: 0644]
m4/intmax.m4 [new file with mode: 0644]
m4/inttypes-pri.m4 [new file with mode: 0644]
m4/inttypes_h.m4 [new file with mode: 0644]
m4/lcmessage.m4 [new file with mode: 0644]
m4/lib-ld.m4 [new file with mode: 0644]
m4/lib-link.m4 [new file with mode: 0644]
m4/lib-prefix.m4 [new file with mode: 0644]
m4/libtool.m4 [new file with mode: 0644]
m4/lock.m4 [new file with mode: 0644]
m4/longdouble.m4 [new file with mode: 0644]
m4/longlong.m4 [new file with mode: 0644]
m4/ltoptions.m4 [new file with mode: 0644]
m4/ltsugar.m4 [new file with mode: 0644]
m4/ltversion.m4 [new file with mode: 0644]
m4/lt~obsolete.m4 [new file with mode: 0644]
m4/nls.m4 [new file with mode: 0644]
m4/po.m4 [new file with mode: 0644]
m4/printf-posix.m4 [new file with mode: 0644]
m4/progtest.m4 [new file with mode: 0644]
m4/size_max.m4 [new file with mode: 0644]
m4/stdint_h.m4 [new file with mode: 0644]
m4/uintmax_t.m4 [new file with mode: 0644]
m4/ulonglong.m4 [new file with mode: 0644]
m4/visibility.m4 [new file with mode: 0644]
m4/wchar_t.m4 [new file with mode: 0644]
m4/wint_t.m4 [new file with mode: 0644]
m4/xsize.m4 [new file with mode: 0644]
maintainer/FIXMEs [new file with mode: 0644]
maintainer/README-CVS [new file with mode: 0644]
maintainer/TODO [new file with mode: 0644]
maintainer/autogen [new file with mode: 0755]
maintainer/config-debug [new file with mode: 0755]
maintainer/config-opt [new file with mode: 0755]
manual/Makefile.am [new file with mode: 0644]
manual/Makefile.in [new file with mode: 0644]
manual/aspell-dev.html/Build-Sources.html [new file with mode: 0644]
manual/aspell-dev.html/C_002b_002b-Standard-Library.html [new file with mode: 0644]
manual/aspell-dev.html/Config-Class.html [new file with mode: 0644]
manual/aspell-dev.html/Constructor-Function.html [new file with mode: 0644]
manual/aspell-dev.html/Copying.html [new file with mode: 0644]
manual/aspell-dev.html/Data-Structures.html [new file with mode: 0644]
manual/aspell-dev.html/Error-Handling.html [new file with mode: 0644]
manual/aspell-dev.html/Filter-Default-Values.html [new file with mode: 0644]
manual/aspell-dev.html/Filter-Description-File.html [new file with mode: 0644]
manual/aspell-dev.html/Filter-Interface.html [new file with mode: 0644]
manual/aspell-dev.html/Filter-Modes.html [new file with mode: 0644]
manual/aspell-dev.html/Filter-Overview.html [new file with mode: 0644]
manual/aspell-dev.html/GNU-Free-Documentation-License.html [new file with mode: 0644]
manual/aspell-dev.html/How-It-All-Works.html [new file with mode: 0644]
manual/aspell-dev.html/How-to-Submit-a-Patch.html [new file with mode: 0644]
manual/aspell-dev.html/I_002fO.html [new file with mode: 0644]
manual/aspell-dev.html/Interface-Macros.html [new file with mode: 0644]
manual/aspell-dev.html/Link-Filters-Static.html [new file with mode: 0644]
manual/aspell-dev.html/Mk_002dSrc-Script.html [new file with mode: 0644]
manual/aspell-dev.html/Part-1-_002d-Compiled-Dictionary-Format.html [new file with mode: 0644]
manual/aspell-dev.html/Part-2-_002d-Quickly-Finding-Similar-Soundslike.html [new file with mode: 0644]
manual/aspell-dev.html/Part-3.html [new file with mode: 0644]
manual/aspell-dev.html/Place-Sources.html [new file with mode: 0644]
manual/aspell-dev.html/Programmer_0027s-Interface.html [new file with mode: 0644]
manual/aspell-dev.html/Recommended-Standard-Aspell.html [new file with mode: 0644]
manual/aspell-dev.html/Reinstall-Aspell.html [new file with mode: 0644]
manual/aspell-dev.html/Smart-Pointers.html [new file with mode: 0644]
manual/aspell-dev.html/Source-Code-Layout.html [new file with mode: 0644]
manual/aspell-dev.html/Strings.html [new file with mode: 0644]
manual/aspell-dev.html/Style-Guidelines.html [new file with mode: 0644]
manual/aspell-dev.html/Templates.html [new file with mode: 0644]
manual/aspell-dev.html/Test-Filter-Installed.html [new file with mode: 0644]
manual/aspell-dev.html/index.html [new file with mode: 0644]
manual/aspell-dev.info [new file with mode: 0644]
manual/aspell-dev.texi [new file with mode: 0644]
manual/aspell-import.1 [new file with mode: 0644]
manual/aspell.1 [new file with mode: 0644]
manual/aspell.html/AWLI-files.html [new file with mode: 0644]
manual/aspell.html/Adding-Support-For-Other-Languages.html [new file with mode: 0644]
manual/aspell.html/Affix-Compression.html [new file with mode: 0644]
manual/aspell.html/Aspell-Suggestion-Strategy.html [new file with mode: 0644]
manual/aspell.html/Authors.html [new file with mode: 0644]
manual/aspell.html/Basic-Usage.html [new file with mode: 0644]
manual/aspell.html/Binary-Compatibility.html [new file with mode: 0644]
manual/aspell.html/ChangeLog.html [new file with mode: 0644]
manual/aspell.html/Compiling-the-Word-List.html [new file with mode: 0644]
manual/aspell.html/Compound-Words.html [new file with mode: 0644]
manual/aspell.html/Context-Sensitive-Spelling.html [new file with mode: 0644]
manual/aspell.html/Controlling-the-Behavior-of-Run_002dtogether-Words.html [new file with mode: 0644]
manual/aspell.html/Copying.html [new file with mode: 0644]
manual/aspell.html/Creating-A-New-Character-Set.html [new file with mode: 0644]
manual/aspell.html/Creating-An-Official-Dictionary-Package.html [new file with mode: 0644]
manual/aspell.html/Creating-an-Individual-Word-List.html [new file with mode: 0644]
manual/aspell.html/Curses-Notes.html [new file with mode: 0644]
manual/aspell.html/Customizing-Aspell.html [new file with mode: 0644]
manual/aspell.html/Dictionary-Naming.html [new file with mode: 0644]
manual/aspell.html/Differences-From-Ispell.html [new file with mode: 0644]
manual/aspell.html/Dumping-Configuration-Values.html [new file with mode: 0644]
manual/aspell.html/Dumping-the-Contents-of-the-Word-List.html [new file with mode: 0644]
manual/aspell.html/Email-the-Personal-Dictionary.html [new file with mode: 0644]
manual/aspell.html/Format-of-the-Personal-Dictionary.html [new file with mode: 0644]
manual/aspell.html/Format-of-the-Personal-and-Replacement-Dictionaries.html [new file with mode: 0644]
manual/aspell.html/GNU-Free-Documentation-License.html [new file with mode: 0644]
manual/aspell.html/GNU-Lesser-General-Public-License.html [new file with mode: 0644]
manual/aspell.html/Generic-Install-Instructions.html [new file with mode: 0644]
manual/aspell.html/German-Sharp-S.html [new file with mode: 0644]
manual/aspell.html/HTML-Manuals-and-_0022make-clean_0022.html [new file with mode: 0644]
manual/aspell.html/Hidden-Markov-Model.html [new file with mode: 0644]
manual/aspell.html/How-Aspell-Selects-an-Appropriate-Dictionary.html [new file with mode: 0644]
manual/aspell.html/Implementation-Notes.html [new file with mode: 0644]
manual/aspell.html/Important-Items.html [new file with mode: 0644]
manual/aspell.html/Installing.html [new file with mode: 0644]
manual/aspell.html/Introduction.html [new file with mode: 0644]
manual/aspell.html/Language-Related-Issues.html [new file with mode: 0644]
manual/aspell.html/Languages-Which-Aspell-can-Support.html [new file with mode: 0644]
manual/aspell.html/Listing-Available-Dictionaries.html [new file with mode: 0644]
manual/aspell.html/Loadable-Filter-Notes.html [new file with mode: 0644]
manual/aspell.html/Multiple-Scripts.html [new file with mode: 0644]
manual/aspell.html/Notes-on-8_002dbit-Characters.html [new file with mode: 0644]
manual/aspell.html/Notes-on-Storing-Replacement-Pairs.html [new file with mode: 0644]
manual/aspell.html/Notes-on-Typo_002dAnalysis.html [new file with mode: 0644]
manual/aspell.html/Notes-on-Various-Filters-and-Filter-Modes.html [new file with mode: 0644]
manual/aspell.html/Notes-on-Various-Items.html [new file with mode: 0644]
manual/aspell.html/Notes-on-Various-Options.html [new file with mode: 0644]
manual/aspell.html/Notes-on-the-Different-Suggestion-Modes.html [new file with mode: 0644]
manual/aspell.html/Notes-on-the-Prefix-Option.html [new file with mode: 0644]
manual/aspell.html/Other-Items.html [new file with mode: 0644]
manual/aspell.html/Phonetic-Code.html [new file with mode: 0644]
manual/aspell.html/Planned-Dictionaries.html [new file with mode: 0644]
manual/aspell.html/References.html [new file with mode: 0644]
manual/aspell.html/Replacement-Tables.html [new file with mode: 0644]
manual/aspell.html/Specifying-Options.html [new file with mode: 0644]
manual/aspell.html/Spellchecking-Individual-Files.html [new file with mode: 0644]
manual/aspell.html/Support.html [new file with mode: 0644]
manual/aspell.html/Supported.html [new file with mode: 0644]
manual/aspell.html/The-Language-Data-File.html [new file with mode: 0644]
manual/aspell.html/The-Options.html [new file with mode: 0644]
manual/aspell.html/The-Simple-Soundslike.html [new file with mode: 0644]
manual/aspell.html/Through-A-Pipe.html [new file with mode: 0644]
manual/aspell.html/Through-the-C-API.html [new file with mode: 0644]
manual/aspell.html/To-Do.html [new file with mode: 0644]
manual/aspell.html/Unicode-Normalization.html [new file with mode: 0644]
manual/aspell.html/Unsupported.html [new file with mode: 0644]
manual/aspell.html/Upgrading-from-Aspell-0_002e50.html [new file with mode: 0644]
manual/aspell.html/Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html [new file with mode: 0644]
manual/aspell.html/Upgrading-from-a-Pre_002d0_002e50-snapshot.html [new file with mode: 0644]
manual/aspell.html/Using-Aspell-as-a-Replacement-for-Ispell.html [new file with mode: 0644]
manual/aspell.html/Using-Aspell-with-other-Applications.html [new file with mode: 0644]
manual/aspell.html/Using-Multi-Dictionaries.html [new file with mode: 0644]
manual/aspell.html/Using-aspell_002dimport.html [new file with mode: 0644]
manual/aspell.html/WIN32-Notes.html [new file with mode: 0644]
manual/aspell.html/Win32_002dDirectories.html [new file with mode: 0644]
manual/aspell.html/Word-skipping-by-context.html [new file with mode: 0644]
manual/aspell.html/Words-With-Symbols-in-Them.html [new file with mode: 0644]
manual/aspell.html/Working-With-Affix-Info-in-Word-Lists.html [new file with mode: 0644]
manual/aspell.html/Working-With-Dictionaries.html [new file with mode: 0644]
manual/aspell.html/Writing-programs-to-use-Aspell.html [new file with mode: 0644]
manual/aspell.html/data_002dencoding.html [new file with mode: 0644]
manual/aspell.html/index.html [new file with mode: 0644]
manual/aspell.info [new file with mode: 0644]
manual/aspell.texi [new file with mode: 0644]
manual/crubadan.texi [new file with mode: 0644]
manual/fdl.texi [new file with mode: 0644]
manual/lang-supported.texi [new file with mode: 0644]
manual/lang-unsupported.texi [new file with mode: 0644]
manual/lgpl.texi [new file with mode: 0644]
manual/mksrc.texi [new file with mode: 0644]
manual/oo-only.texi [new file with mode: 0644]
manual/prezip-bin.1 [new file with mode: 0644]
manual/pspell-config.1 [new file with mode: 0644]
manual/readme.texi [new file with mode: 0644]
manual/run-with-aspell.1 [new file with mode: 0644]
manual/texinfo.tex [new file with mode: 0644]
manual/word-list-compress.1 [new file with mode: 0644]
misc/po-filter.c [new file with mode: 0644]
missing [new file with mode: 0755]
modules/Makefile.in [new file with mode: 0644]
modules/filter/Makefile.in [new file with mode: 0644]
modules/filter/context-filter.info [new file with mode: 0644]
modules/filter/context.cpp [new file with mode: 0644]
modules/filter/email-filter.info [new file with mode: 0644]
modules/filter/email.cpp [new file with mode: 0644]
modules/filter/html-filter.info [new file with mode: 0644]
modules/filter/modes/ccpp.amf [new file with mode: 0644]
modules/filter/modes/comment.amf [new file with mode: 0644]
modules/filter/modes/email.amf [new file with mode: 0644]
modules/filter/modes/html.amf [new file with mode: 0644]
modules/filter/modes/none.amf [new file with mode: 0644]
modules/filter/modes/nroff.amf [new file with mode: 0644]
modules/filter/modes/perl.amf [new file with mode: 0644]
modules/filter/modes/sgml.amf [new file with mode: 0644]
modules/filter/modes/tex.amf [new file with mode: 0644]
modules/filter/modes/texinfo.amf [new file with mode: 0644]
modules/filter/modes/url.amf [new file with mode: 0644]
modules/filter/nroff-filter.info [new file with mode: 0644]
modules/filter/nroff.cpp [new file with mode: 0644]
modules/filter/sgml-filter.info [new file with mode: 0644]
modules/filter/sgml.cpp [new file with mode: 0644]
modules/filter/tex-filter.info [new file with mode: 0644]
modules/filter/tex.cpp [new file with mode: 0644]
modules/filter/texinfo-filter.info [new file with mode: 0644]
modules/filter/texinfo.cpp [new file with mode: 0644]
modules/filter/url-filter.info [new file with mode: 0644]
modules/filter/url.cpp [new file with mode: 0644]
modules/speller/Makefile.in [new file with mode: 0644]
modules/speller/default/Makefile.in [new file with mode: 0644]
modules/speller/default/affix.cpp [new file with mode: 0644]
modules/speller/default/affix.hpp [new file with mode: 0644]
modules/speller/default/asuggest.hpp [new file with mode: 0644]
modules/speller/default/block_vector.hpp [new file with mode: 0644]
modules/speller/default/check_list.hpp [new file with mode: 0644]
modules/speller/default/data.cpp [new file with mode: 0644]
modules/speller/default/data.hpp [new file with mode: 0644]
modules/speller/default/data_id.hpp [new file with mode: 0644]
modules/speller/default/data_util.hpp [new file with mode: 0644]
modules/speller/default/editdist.cpp [new file with mode: 0644]
modules/speller/default/editdist.hpp [new file with mode: 0644]
modules/speller/default/editdist2.hpp [new file with mode: 0644]
modules/speller/default/language.cpp [new file with mode: 0644]
modules/speller/default/language.hpp [new file with mode: 0644]
modules/speller/default/leditdist.cpp [new file with mode: 0644]
modules/speller/default/leditdist.hpp [new file with mode: 0644]
modules/speller/default/matrix.hpp [new file with mode: 0644]
modules/speller/default/multi_ws.cpp [new file with mode: 0644]
modules/speller/default/phonet.cpp [new file with mode: 0644]
modules/speller/default/phonet.hpp [new file with mode: 0644]
modules/speller/default/phonetic.cpp [new file with mode: 0644]
modules/speller/default/phonetic.hpp [new file with mode: 0644]
modules/speller/default/primes.cpp [new file with mode: 0644]
modules/speller/default/primes.hpp [new file with mode: 0644]
modules/speller/default/readonly_ws.cpp [new file with mode: 0644]
modules/speller/default/speller_impl.cpp [new file with mode: 0644]
modules/speller/default/speller_impl.hpp [new file with mode: 0644]
modules/speller/default/suggest.cpp [new file with mode: 0644]
modules/speller/default/suggest.hpp [new file with mode: 0644]
modules/speller/default/typo_editdist.cpp [new file with mode: 0644]
modules/speller/default/typo_editdist.hpp [new file with mode: 0644]
modules/speller/default/vector_hash-t.hpp [new file with mode: 0644]
modules/speller/default/vector_hash.hpp [new file with mode: 0644]
modules/speller/default/weights.hpp [new file with mode: 0644]
modules/speller/default/wordinfo.hpp [new file with mode: 0644]
modules/speller/default/writable.cpp [new file with mode: 0644]
modules/tokenizer/Makefile.in [new file with mode: 0644]
modules/tokenizer/basic.cpp [new file with mode: 0644]
myspell/Makefile.am [new file with mode: 0644]
myspell/Makefile.in [new file with mode: 0644]
myspell/README [new file with mode: 0644]
myspell/README.munch [new file with mode: 0644]
myspell/README.replacetable [new file with mode: 0644]
myspell/README_en_US.txt [new file with mode: 0644]
myspell/en_US.aff [new file with mode: 0644]
myspell/munch.c [new file with mode: 0644]
myspell/munch.h [new file with mode: 0644]
po/LINGUAS [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/Makevars [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/Rules-quot [new file with mode: 0644]
po/aspell.pot [new file with mode: 0644]
po/ast.gmo [new file with mode: 0644]
po/ast.po [new file with mode: 0644]
po/be.gmo [new file with mode: 0644]
po/be.po [new file with mode: 0644]
po/boldquot.sed [new file with mode: 0644]
po/ca.gmo [new file with mode: 0644]
po/ca.po [new file with mode: 0644]
po/cs.gmo [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/da.gmo [new file with mode: 0644]
po/da.po [new file with mode: 0644]
po/de.gmo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/en@boldquot.header [new file with mode: 0644]
po/en@quot.header [new file with mode: 0644]
po/en_GB.gmo [new file with mode: 0644]
po/en_GB.po [new file with mode: 0644]
po/es.gmo [new file with mode: 0644]
po/es.po [new file with mode: 0644]
po/fi.gmo [new file with mode: 0644]
po/fi.po [new file with mode: 0644]
po/fr.gmo [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/ga.gmo [new file with mode: 0644]
po/ga.po [new file with mode: 0644]
po/id.gmo [new file with mode: 0644]
po/id.po [new file with mode: 0644]
po/insert-header.sin [new file with mode: 0644]
po/it.gmo [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/ja.gmo [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/mn.gmo [new file with mode: 0644]
po/mn.po [new file with mode: 0644]
po/ms.gmo [new file with mode: 0644]
po/ms.po [new file with mode: 0644]
po/nl.gmo [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/pt_BR.gmo [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/quot.sed [new file with mode: 0644]
po/remove-potcdate.sin [new file with mode: 0644]
po/ro.gmo [new file with mode: 0644]
po/ro.po [new file with mode: 0644]
po/ru.gmo [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
po/rw.gmo [new file with mode: 0644]
po/rw.po [new file with mode: 0644]
po/sk.gmo [new file with mode: 0644]
po/sk.po [new file with mode: 0644]
po/sl.gmo [new file with mode: 0644]
po/sl.po [new file with mode: 0644]
po/sr.gmo [new file with mode: 0644]
po/sr.po [new file with mode: 0644]
po/stamp-po [new file with mode: 0644]
po/sv.gmo [new file with mode: 0644]
po/sv.po [new file with mode: 0644]
po/tg.gmo [new file with mode: 0644]
po/tg.po [new file with mode: 0644]
po/uk.gmo [new file with mode: 0644]
po/uk.po [new file with mode: 0644]
po/vi.gmo [new file with mode: 0644]
po/vi.po [new file with mode: 0644]
po/wa.gmo [new file with mode: 0644]
po/wa.po [new file with mode: 0644]
po/zh_CN.gmo [new file with mode: 0644]
po/zh_CN.po [new file with mode: 0644]
prog/Makefile.in [new file with mode: 0644]
prog/aspell.cpp [new file with mode: 0644]
prog/check_funs.cpp [new file with mode: 0644]
prog/check_funs.hpp [new file with mode: 0644]
prog/checker_string.cpp [new file with mode: 0644]
prog/checker_string.hpp [new file with mode: 0644]
prog/compress.c [new file with mode: 0644]
prog/prezip.c [new file with mode: 0644]
scripts/Makefile.in [new file with mode: 0644]
scripts/aspell-import [new file with mode: 0755]
scripts/ispell [new file with mode: 0755]
scripts/mkconfig [new file with mode: 0755]
scripts/precat [new file with mode: 0755]
scripts/preunzip [new file with mode: 0755]
scripts/prezip [new file with mode: 0755]
scripts/run-with-aspell.create [new file with mode: 0644]
scripts/spell [new file with mode: 0755]
win32/Makefile [new file with mode: 0644]
win32/settings.h [new file with mode: 0644]

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644 (file)
index 0000000..ec20977
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1101 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the included GNU
+`gettext' library will be used.  This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might not be desirable.  You should use
+the more recent version of the GNU `gettext' library.  I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of October
+2006.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files       af am ar az be bg bs ca cs cy da de el en en_GB eo
+                        +----------------------------------------------------+
+     GNUnet             |                                  []                |
+     a2ps               |             []                [] [] []     []      |
+     aegis              |                                  ()                |
+     ant-phone          |                                  ()                |
+     anubis             |                                  []                |
+     ap-utils           |                                                    |
+     aspell             |                      [] []    [] []        []      |
+     bash               |                      []          []             [] |
+     batchelor          |                                  []                |
+     bfd                |                                                    |
+     bibshelf           |                                  []                |
+     binutils           |                               []                   |
+     bison              |                               [] []                |
+     bison-runtime      |                                                    |
+     bluez-pin          | []                      []       [] []          [] |
+     cflow              |                               []                   |
+     clisp              |                                  []    []          |
+     console-tools      |                         []       []                |
+     coreutils          |                []    []          []                |
+     cpio               |                                                    |
+     cpplib             |                      []       [] []                |
+     cryptonit          |                                  []                |
+     darkstat           |                []             () []                |
+     dialog             |                      [] [] [] [] [] []             |
+     diffutils          |                      [] []    [] [] []          [] |
+     doodle             |                                  []                |
+     e2fsprogs          |                         []       []                |
+     enscript           |                      []       [] []        []      |
+     error              |                      []       [] []        []      |
+     fetchmail          |                      []       [] () []             |
+     fileutils          |                               [] []                |
+     findutils          |                []    []       []                   |
+     flex               |                      []       [] []                |
+     fslint             |                                  []                |
+     gas                |                                                    |
+     gawk               |                      []       [] []                |
+     gbiff              |                                  []                |
+     gcal               |                      []                            |
+     gcc                |                                  []                |
+     gettext-examples   | []                   []          [] []          [] |
+     gettext-runtime    |             []       []       [] []             [] |
+     gettext-tools      |                      []          []                |
+     gimp-print         |                         []    [] []        []      |
+     gip                |                []                                  |
+     gliv               |                                  []                |
+     glunarclock        |                []                                  |
+     gmult              | []                               []                |
+     gnubiff            |                                  ()                |
+     gnucash            |                                  () ()     []      |
+     gnucash-glossary   |                               [] ()                |
+     gnuedu             |                                                    |
+     gnulib             | []          [] []    []       [] []                |
+     gnunet-gtk         |                                                    |
+     gnutls             |                                                    |
+     gpe-aerial         |                         []       []                |
+     gpe-beam           |                         []       []                |
+     gpe-calendar       |                                                    |
+     gpe-clock          |                         []       []                |
+     gpe-conf           |                         []       []                |
+     gpe-contacts       |                                                    |
+     gpe-edit           |                         []                         |
+     gpe-filemanager    |                                                    |
+     gpe-go             |                         []                         |
+     gpe-login          |                         []       []                |
+     gpe-ownerinfo      |                         []       []                |
+     gpe-package        |                                                    |
+     gpe-sketchbook     |                         []       []                |
+     gpe-su             |                         []       []                |
+     gpe-taskmanager    |                         []       []                |
+     gpe-timesheet      |                         []                         |
+     gpe-today          |                         []       []                |
+     gpe-todo           |                                                    |
+     gphoto2            |                         []    [] []        []      |
+     gprof              |                               [] []                |
+     gpsdrive           |                                  ()    ()          |
+     gramadoir          | []                               []                |
+     grep               | []          [] []    []          [] []             |
+     gretl              |                                                    |
+     gsasl              |                                                    |
+     gss                |                                                    |
+     gst-plugins        | []                   [] []    []                   |
+     gst-plugins-base   |                []    []       []                   |
+     gst-plugins-good   | []       []    []    [] []    []           []      |
+     gstreamer          | []             []    [] []    [] []        []      |
+     gtick              |                                  ()                |
+     gtkam              |                         []    [] []                |
+     gtkorphan          |                []                []                |
+     gtkspell           |             []                   [] []          [] |
+     gutenprint         |                               []                   |
+     hello              |                []    []       [] []             [] |
+     id-utils           |                               [] []                |
+     impost             |                                                    |
+     indent             |                      []          []             [] |
+     iso_3166           |                                  []             [] |
+     iso_3166_2         |                                                    |
+     iso_4217           |                                  []                |
+     iso_639            |                                  []             [] |
+     jpilot             |                         []                         |
+     jtag               |                                                    |
+     jwhois             |                                                    |
+     kbd                |                         []    [] [] []             |
+     keytouch           |                                                    |
+     keytouch-editor    |                                                    |
+     keytouch-keyboa... |                                                    |
+     latrine            |                                  ()                |
+     ld                 |                               []                   |
+     leafpad            |                []    [] []       [] []             |
+     libc               |                      [] []    [] [] []             |
+     libexif            |                                  []                |
+     libextractor       |                                  []                |
+     libgpewidget       |                         []    [] []                |
+     libgpg-error       |                                  []                |
+     libgphoto2         |                               [] []                |
+     libgphoto2_port    |                               [] []                |
+     libgsasl           |                                                    |
+     libiconv           |                                  []             [] |
+     libidn             |                               []                [] |
+     lifelines          |                               [] ()                |
+     lilypond           |                                  []                |
+     lingoteach         |                                                    |
+     lynx               |                      [] []    [] []                |
+     m4                 |                         []    [] [] []             |
+     mailutils          |                      []                            |
+     make               |                               [] []                |
+     man-db             |                      [] ()    [] []                |
+     minicom            |                         []    [] []                |
+     mysecretdiary      |                               [] []                |
+     nano               |                []    []          []                |
+     nano_1_0           |                      [] ()    [] []                |
+     opcodes            |                                  []                |
+     parted             |                                                    |
+     pilot-qof          |                                            []      |
+     psmisc             |                []                                  |
+     pwdutils           |                                                    |
+     python             |                                                    |
+     qof                |                                                    |
+     radius             |                      []                            |
+     recode             |             []       []       [] [] []          [] |
+     rpm                |                         []    []                   |
+     screem             |                                                    |
+     scrollkeeper       |          [] []       [] [] [] [] []        []      |
+     sed                |                      []          []             [] |
+     sh-utils           |                               [] []                |
+     shared-mime-info   |                []       []                 []   [] |
+     sharutils          |                []    [] []    [] [] []             |
+     shishi             |                                                    |
+     silky              |                                                    |
+     skencil            |                               [] ()                |
+     sketch             |                               [] ()                |
+     solfege            |                                                    |
+     soundtracker       |                               [] []                |
+     sp                 |                                  []                |
+     stardict           |                         []                         |
+     system-tools-ba... |       []       [] [] [] []    [] [] []     []      |
+     tar                |                []                                  |
+     texinfo            |                               [] []             [] |
+     textutils          |                      []       [] []                |
+     tin                |                                  ()        ()      |
+     tp-robot           |                                  []                |
+     tuxpaint           | []             []             [] []        []      |
+     unicode-han-tra... |                                                    |
+     unicode-transla... |                                                    |
+     util-linux         |                      [] []    [] []                |
+     vorbis-tools       |             []          []    []           []      |
+     wastesedge         |                                  ()                |
+     wdiff              |                      []       [] []        []      |
+     wget               |                      []          []                |
+     xchat              |             [] []    []          [] []     []      |
+     xkeyboard-config   |                                                    |
+     xpad               |                []             []                   |
+                        +----------------------------------------------------+
+                          af am ar az be bg bs ca cs cy da de el en en_GB eo
+                          10  0  1  2  9 22  1 42 41  2 60 95 16  1  17   16
+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                        +--------------------------------------------------+
+     GNUnet             |                                                  |
+     a2ps               |    []       [] []                             () |
+     aegis              |                                                  |
+     ant-phone          |                []                                |
+     anubis             |                []                                |
+     ap-utils           |             [] []                                |
+     aspell             |                []  []                         [] |
+     bash               | []             []                    []          |
+     batchelor          |                []  []                            |
+     bfd                | []                                               |
+     bibshelf           | []                 []                         [] |
+     binutils           | []          [] []                                |
+     bison              | [] []          []  []                   []    [] |
+     bison-runtime      |    []          []  []                   []    [] |
+     bluez-pin          |             [] []  []                [] []       |
+     cflow              |                    []                            |
+     clisp              | []             []                                |
+     console-tools      |                                                  |
+     coreutils          | [] []       [] []  []                []          |
+     cpio               | []             []  []                            |
+     cpplib             | []             []                                |
+     cryptonit          |                []                                |
+     darkstat           | []             ()  []                [] []       |
+     dialog             | [] [] []    [] []  []                []       [] |
+     diffutils          | []          [] []  [] []    []       [] []    [] |
+     doodle             |                    []                         [] |
+     e2fsprogs          | []             []                             [] |
+     enscript           |                []  []             []             |
+     error              | []          [] []  []                []          |
+     fetchmail          | []                                               |
+     fileutils          | [] []          []  []                []       [] |
+     findutils          |    []          []  []                []          |
+     flex               | []             []  []                            |
+     fslint             |                []                                |
+     gas                | []             []                                |
+     gawk               | []             []  []       []                   |
+     gbiff              |                []                                |
+     gcal               | []             []                                |
+     gcc                | []                                               |
+     gettext-examples   | []             []  []                [] []    [] |
+     gettext-runtime    | []          [] []  []                   []    [] |
+     gettext-tools      | []             []                             [] |
+     gimp-print         | []             []                                |
+     gip                | []    []       []                                |
+     gliv               |                ()                                |
+     glunarclock        |             []     []                []          |
+     gmult              |       []       []                             [] |
+     gnubiff            |                ()                             () |
+     gnucash            | ()             ()                    ()          |
+     gnucash-glossary   | []                                            [] |
+     gnuedu             | []                                               |
+     gnulib             | [] [] []    [] []  [] []             []          |
+     gnunet-gtk         |                                                  |
+     gnutls             |                                                  |
+     gpe-aerial         | []             []                                |
+     gpe-beam           | []             []                                |
+     gpe-calendar       |                                                  |
+     gpe-clock          | []          [] []                    []          |
+     gpe-conf           |                []                                |
+     gpe-contacts       | []             []                                |
+     gpe-edit           | []             []                    [] []       |
+     gpe-filemanager    | []                                               |
+     gpe-go             | []             []                    []          |
+     gpe-login          | []             []                    []          |
+     gpe-ownerinfo      | []          [] []                    [] []       |
+     gpe-package        | []                                               |
+     gpe-sketchbook     | []             []                                |
+     gpe-su             | []          [] []                    []          |
+     gpe-taskmanager    | []          [] []                                |
+     gpe-timesheet      | []             []  []                   []       |
+     gpe-today          | []          [] []  []                            |
+     gpe-todo           | []                                               |
+     gphoto2            | []          [] []                    []       [] |
+     gprof              | []             []  []                   []       |
+     gpsdrive           | ()             ()                    []       () |
+     gramadoir          |                []  []                            |
+     grep               | [] [] []    [] []  [] []    []    [] [] []    [] |
+     gretl              | []             []                             [] |
+     gsasl              |                    []                   []       |
+     gss                |                []                                |
+     gst-plugins        |                []                    []       [] |
+     gst-plugins-base   |                                      []       [] |
+     gst-plugins-good   |       []                             []       [] |
+     gstreamer          |             []                       []       [] |
+     gtick              |                    []                            |
+     gtkam              | []             []                    []       [] |
+     gtkorphan          |                []                             [] |
+     gtkspell           | []    []    [] []  []                         [] |
+     gutenprint         |                                      []          |
+     hello              | [] [] [] [] [] []  [] []    []    [] [] []    [] |
+     id-utils           |                []  []                [] []    [] |
+     impost             |                []  []                            |
+     indent             | [] [] []    [] []  [] []             [] []    [] |
+     iso_3166           |             [] []                    []          |
+     iso_3166_2         |                []                                |
+     iso_4217           |    []       []        []             []          |
+     iso_639            |          [] [] []  []                []          |
+     jpilot             | []             []                                |
+     jtag               |                []                                |
+     jwhois             | []             []                    [] []    [] |
+     kbd                | []             []                                |
+     keytouch           |                    []                            |
+     keytouch-editor    |                    []                            |
+     keytouch-keyboa... |                    []                            |
+     latrine            |                []  []                         [] |
+     ld                 | []             []                                |
+     leafpad            | []             []  []       []       []       [] |
+     libc               | []          [] []     []             []          |
+     libexif            | []                                               |
+     libextractor       |                    []                            |
+     libgpewidget       | []             []  []                [] []       |
+     libgpg-error       |                                                  |
+     libgphoto2         | []             []                             [] |
+     libgphoto2_port    |                []                             [] |
+     libgsasl           |                []  []                            |
+     libiconv           |    []              []                            |
+     libidn             |                []                             [] |
+     lifelines          |                ()                                |
+     lilypond           |                []                                |
+     lingoteach         |                []                       []    [] |
+     lynx               |    []                                []       [] |
+     m4                 |                []  [] []                []       |
+     mailutils          | []             []                                |
+     make               | []          [] []  [] []    []    []    []       |
+     man-db             | ()                                               |
+     minicom            | []          [] []                    []          |
+     mysecretdiary      | []             []                       []       |
+     nano               | []    []       []  []                []       [] |
+     nano_1_0           | []             []     []                []    [] |
+     opcodes            | []          [] []  []                            |
+     parted             | []             []                       []    [] |
+     pilot-qof          |                                                  |
+     psmisc             |       []                             []       [] |
+     pwdutils           |                                                  |
+     python             |                                                  |
+     qof                |                                         []       |
+     radius             | []             []                                |
+     recode             | []             []  [] []    []       [] []    [] |
+     rpm                |                []                       []       |
+     screem             |                                                  |
+     scrollkeeper       | []          []                       []          |
+     sed                | [] []          []  []                []          |
+     sh-utils           | [] []       [] []  []                []       [] |
+     shared-mime-info   | []    []    [] []                    []       [] |
+     sharutils          | [] []       [] []  [] []             []       [] |
+     shishi             |                                                  |
+     silky              |                []                                |
+     skencil            | []             []                                |
+     sketch             | []             []                                |
+     solfege            |                                               [] |
+     soundtracker       | []             []                             [] |
+     sp                 |                []                                |
+     stardict           |                                      []          |
+     system-tools-ba... | []    []    [] []                 [] [] []    [] |
+     tar                | [] []       [] []  []                []       [] |
+     texinfo            |                []           []                   |
+     textutils          | []             []  [] []             []          |
+     tin                |    []          ()                                |
+     tp-robot           |             [] []  []                []          |
+     tuxpaint           |                    []                []          |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                []  []                            |
+     util-linux         | [] []       [] []                    [] []    [] |
+     vorbis-tools       | []             []                                |
+     wastesedge         |                ()                                |
+     wdiff              | [] []          []  [] []             [] []    [] |
+     wget               |    []       [] []  []             [] [] []    [] |
+     xchat              | []    []    [] []        []    []    []       [] |
+     xkeyboard-config   |             [] []                    []       [] |
+     xpad               | []                 []                []          |
+                        +--------------------------------------------------+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                          88 22 14  2 40 115 61 14  1  8  1  6 59 31  0 52
+
+                          ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+                        +-------------------------------------------------+
+     GNUnet             |                                                 |
+     a2ps               |    ()                      []          []    () |
+     aegis              |                                        ()       |
+     ant-phone          |                                        []       |
+     anubis             |                            []    []    []       |
+     ap-utils           |                            []                   |
+     aspell             |                         []             []       |
+     bash               |                                        []       |
+     batchelor          |                            []          []       |
+     bfd                |                                                 |
+     bibshelf           |                            []                   |
+     binutils           |                                                 |
+     bison              |                            []    []    []       |
+     bison-runtime      |                            []    []    []       |
+     bluez-pin          |       []                   []          []       |
+     cflow              |                                                 |
+     clisp              |                                        []       |
+     console-tools      |                                                 |
+     coreutils          |                                        []       |
+     cpio               |                                                 |
+     cpplib             |                                        []       |
+     cryptonit          |                                        []       |
+     darkstat           |                            []          []       |
+     dialog             |                            []          []       |
+     diffutils          | []                         []          []       |
+     doodle             |                                                 |
+     e2fsprogs          |                                        []       |
+     enscript           |                                        []       |
+     error              |                                        []       |
+     fetchmail          | []                                     []       |
+     fileutils          | []          []                                  |
+     findutils          |                                        []       |
+     flex               |    []                                  []       |
+     fslint             |                            []          []       |
+     gas                |                                                 |
+     gawk               | []                                     []       |
+     gbiff              |                                        []       |
+     gcal               |                                                 |
+     gcc                |                                                 |
+     gettext-examples   | []                                     []       |
+     gettext-runtime    | [] []                                  []       |
+     gettext-tools      | [] []                                           |
+     gimp-print         | []                                     []       |
+     gip                |                            []          []       |
+     gliv               |                                        []       |
+     glunarclock        |                            []          []       |
+     gmult              | []                         []                   |
+     gnubiff            |                                                 |
+     gnucash            | ()                               ()             |
+     gnucash-glossary   |                                        []       |
+     gnuedu             |                                                 |
+     gnulib             | [] []                      []          []       |
+     gnunet-gtk         |                                                 |
+     gnutls             |                                                 |
+     gpe-aerial         |                                        []       |
+     gpe-beam           |                                        []       |
+     gpe-calendar       | []                                              |
+     gpe-clock          | [] []                                  []       |
+     gpe-conf           |    []                                  []       |
+     gpe-contacts       |    []                                           |
+     gpe-edit           | [] []                                  []       |
+     gpe-filemanager    | [] []                                           |
+     gpe-go             | [] []                                  []       |
+     gpe-login          | [] []                                  []       |
+     gpe-ownerinfo      | []                                     []       |
+     gpe-package        | [] []                                           |
+     gpe-sketchbook     |    []                                  []       |
+     gpe-su             | [] []                                  []       |
+     gpe-taskmanager    | [] [] []                               []       |
+     gpe-timesheet      |                                        []       |
+     gpe-today          | []                                     []       |
+     gpe-todo           | []                                              |
+     gphoto2            | []                                     []       |
+     gprof              |                                                 |
+     gpsdrive           | ()                                     ()    () |
+     gramadoir          |                                        ()       |
+     grep               | []       []                      []    []       |
+     gretl              |                                                 |
+     gsasl              |                                        []       |
+     gss                |                                                 |
+     gst-plugins        |                                        []       |
+     gst-plugins-base   |                                                 |
+     gst-plugins-good   |                                        []       |
+     gstreamer          |                                        []       |
+     gtick              |                                                 |
+     gtkam              | []                                              |
+     gtkorphan          |                                        []       |
+     gtkspell           |                         []             []       |
+     gutenprint         |                                                 |
+     hello              | [] []                      []    []    [] []    |
+     id-utils           |                                        []       |
+     impost             |                                                 |
+     indent             | []                                     []       |
+     iso_3166           |                                        []       |
+     iso_3166_2         |                                        []       |
+     iso_4217           | []                      []             []       |
+     iso_639            | []                                     []       |
+     jpilot             | ()                                     ()    () |
+     jtag               |                                                 |
+     jwhois             |                                        []       |
+     kbd                |                                        []       |
+     keytouch           |                                        []       |
+     keytouch-editor    |                                                 |
+     keytouch-keyboa... |                                                 |
+     latrine            |                                        []       |
+     ld                 |                                                 |
+     leafpad            | []             []                               |
+     libc               | [] []                            []    []    [] |
+     libexif            |                                                 |
+     libextractor       |                                                 |
+     libgpewidget       |                                        []       |
+     libgpg-error       |                                                 |
+     libgphoto2         | []                                              |
+     libgphoto2_port    | []                                              |
+     libgsasl           |                                        []       |
+     libiconv           |                                                 |
+     libidn             | []                                     []       |
+     lifelines          |                                        []       |
+     lilypond           |                                                 |
+     lingoteach         |                                        []       |
+     lynx               | []                                     []       |
+     m4                 | []                                     []       |
+     mailutils          |                                                 |
+     make               | [] []                                  []       |
+     man-db             | ()                                              |
+     minicom            | []                                              |
+     mysecretdiary      |                                        []       |
+     nano               |                            []    []    []       |
+     nano_1_0           |                            []    []       []    |
+     opcodes            |                                        []       |
+     parted             | []                                     []       |
+     pilot-qof          |                                                 |
+     psmisc             | []                               []    []       |
+     pwdutils           |                                                 |
+     python             |                                                 |
+     qof                |                                                 |
+     radius             |                                                 |
+     recode             |                                        []       |
+     rpm                | [] []                                           |
+     screem             | []                                              |
+     scrollkeeper       |                                  [] [] [] []    |
+     sed                | []                                     []       |
+     sh-utils           | []                               []             |
+     shared-mime-info   |    []          []                []    [] []    |
+     sharutils          | []                                     []       |
+     shishi             |                                                 |
+     silky              |                                        []       |
+     skencil            |                                                 |
+     sketch             |                                                 |
+     solfege            |                                                 |
+     soundtracker       |                                                 |
+     sp                 | ()                                              |
+     stardict           |                      []                []       |
+     system-tools-ba... | [] []          []                      []       |
+     tar                | []       []                            []       |
+     texinfo            | []                               []    []       |
+     textutils          | [] []                            []             |
+     tin                |                                                 |
+     tp-robot           |                                        []       |
+     tuxpaint           |                                           []    |
+     unicode-han-tra... |                                                 |
+     unicode-transla... |                                                 |
+     util-linux         | []                                     []       |
+     vorbis-tools       |                                        []       |
+     wastesedge         |                                        []       |
+     wdiff              |                            []    []             |
+     wget               | []                                     []       |
+     xchat              | [] []                []                []       |
+     xkeyboard-config   |                                        []       |
+     xpad               |    []                      []          []       |
+                        +-------------------------------------------------+
+                          ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+                          52 24  2  2  1  3  0  2  3 21  0 15  1 97  5  1
+
+                          nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                        +------------------------------------------------------+
+     GNUnet             |                                                      |
+     a2ps               |           ()     []      [] []       []    [] []     |
+     aegis              |                          () ()                       |
+     ant-phone          |                          []                   []     |
+     anubis             |           []             [] []                       |
+     ap-utils           |           ()                                         |
+     aspell             |                          [] []                       |
+     bash               |                  []      [] []                       |
+     batchelor          |                          []                   []     |
+     bfd                |                                                      |
+     bibshelf           |                                               []     |
+     binutils           |                             []                []     |
+     bison              |           []     []      [] []                []     |
+     bison-runtime      |           []             []          []       []     |
+     bluez-pin          |           []     []   [] [] []    [] []    [] []     |
+     cflow              |           []                                         |
+     clisp              |                             []                       |
+     console-tools      |                             []                       |
+     coreutils          |           []                []       []       []     |
+     cpio               |           []                []                []     |
+     cpplib             |                                               []     |
+     cryptonit          |                  []                           []     |
+     darkstat           |           []     []      []       []       [] []     |
+     dialog             |           [] []  []   [] [] [] []          [] []     |
+     diffutils          |           []     []      [] []             [] []     |
+     doodle             |                                         []    []     |
+     e2fsprogs          |           []                                  []     |
+     enscript           |                  []      [] []       []       []     |
+     error              |                  []      []       []          []     |
+     fetchmail          |           []                []          []           |
+     fileutils          |           []             [] []       []       []     |
+     findutils          |           [] []          []       [] []       []     |
+     flex               |           []     []      [] []                []     |
+     fslint             |                  []      []                [] []     |
+     gas                |                                                      |
+     gawk               |           []     []      []                   []     |
+     gbiff              |                          []                          |
+     gcal               |                                               []     |
+     gcc                |                                               []     |
+     gettext-examples   |           [] []          [] []    [] []    [] []     |
+     gettext-runtime    |           [] []          [] []    [] []    [] []     |
+     gettext-tools      |           []             [] []    [] []    [] []     |
+     gimp-print         |                                   []          []     |
+     gip                |                       []          []       [] []     |
+     gliv               |                  []      []       []          []     |
+     glunarclock        |                  []      [] []    []       [] []     |
+     gmult              |                       [] []                [] []     |
+     gnubiff            |                          ()                          |
+     gnucash            |           ()                                  []     |
+     gnucash-glossary   |              []                   []          []     |
+     gnuedu             |                                                      |
+     gnulib             |           []             [] []       []       []     |
+     gnunet-gtk         |                                               []     |
+     gnutls             |           []                                  []     |
+     gpe-aerial         |              []  []      [] []       []    [] []     |
+     gpe-beam           |              []  []      [] []       []    [] []     |
+     gpe-calendar       |                             []                       |
+     gpe-clock          |              []  []      [] []    [] []    [] []     |
+     gpe-conf           |              []  []      [] []    [] []       []     |
+     gpe-contacts       |                          [] []       []    [] []     |
+     gpe-edit           |              []  []      [] []    [] []    [] []     |
+     gpe-filemanager    |                                      []       []     |
+     gpe-go             |                  []      [] []       []    [] []     |
+     gpe-login          |              []  []      [] []    [] []    [] []     |
+     gpe-ownerinfo      |              []  []      [] []    [] []    [] []     |
+     gpe-package        |                                      []       []     |
+     gpe-sketchbook     |              []  []      [] []    [] []    [] []     |
+     gpe-su             |              []  []      [] []    [] []    [] []     |
+     gpe-taskmanager    |              []  []      [] []    [] []    [] []     |
+     gpe-timesheet      |              []  []      [] []    [] []    [] []     |
+     gpe-today          |              []  []      [] []    [] []    [] []     |
+     gpe-todo           |                             []       []    [] []     |
+     gphoto2            |           []             []       []       [] []     |
+     gprof              |                  []      []                   []     |
+     gpsdrive           |        []                []                   []     |
+     gramadoir          |                                   []          []     |
+     grep               |           [] []  []      [] []       []    [] []     |
+     gretl              |           []                                         |
+     gsasl              |           []                               [] []     |
+     gss                |           []             []                   []     |
+     gst-plugins        |     []                                  [] [] []     |
+     gst-plugins-base   |                                               []     |
+     gst-plugins-good   |     []                                  [] [] []     |
+     gstreamer          |                                         [] [] []     |
+     gtick              |                             []                       |
+     gtkam              |           []     []         []                []     |
+     gtkorphan          |                                               []     |
+     gtkspell           |                  []   [] [] []    [] []    [] []     |
+     gutenprint         |                                               []     |
+     hello              |           []     []      [] []    [] []    [] []     |
+     id-utils           |                  []      [] []                []     |
+     impost             |                                               []     |
+     indent             |                  []      [] []    []       [] []     |
+     iso_3166           |              []                []    [] [] [] []     |
+     iso_3166_2         |                                                      |
+     iso_4217           |                                []    []    [] []     |
+     iso_639            |                                []    []    [] []     |
+     jpilot             |                                                      |
+     jtag               |                                   []                 |
+     jwhois             |           []     []      []                   []     |
+     kbd                |           []             []                   []     |
+     keytouch           |                                               []     |
+     keytouch-editor    |                                               []     |
+     keytouch-keyboa... |                                               []     |
+     latrine            |                          []                   []     |
+     ld                 |                                               []     |
+     leafpad            |           [] []             []    []          []  [] |
+     libc               |           []     []         []    []          []     |
+     libexif            |           []                                         |
+     libextractor       |                          []                   []     |
+     libgpewidget       |              []  []      []       [] []    [] []     |
+     libgpg-error       |           []             []                          |
+     libgphoto2         |           []                                         |
+     libgphoto2_port    |           []                []                []     |
+     libgsasl           |           []             []                [] []     |
+     libiconv           |                                      []    []        |
+     libidn             |           []                               [] ()     |
+     lifelines          |           []                                  []     |
+     lilypond           |                                                      |
+     lingoteach         |                  []                                  |
+     lynx               |                  []         []                []     |
+     m4                 |           []     []      [] []                []     |
+     mailutils          |           []             [] []                []     |
+     make               |           []     []         []                []     |
+     man-db             |                          []                   []     |
+     minicom            |           []     []      [] []                []     |
+     mysecretdiary      |                  []      [] []                []     |
+     nano               |                  []      []                   []     |
+     nano_1_0           |           []             [] []                []     |
+     opcodes            |                          []                   []     |
+     parted             |           []                                         |
+     pilot-qof          |                                               []     |
+     psmisc             |           []                                  []     |
+     pwdutils           |           []                                  []     |
+     python             |                                                      |
+     qof                |                  []                           []     |
+     radius             |           []                []                       |
+     recode             |           [] []  []      [] []       []       []     |
+     rpm                |           [] []             []                []     |
+     screem             |                                                      |
+     scrollkeeper       |           []             [] []    []    [] [] []     |
+     sed                |           [] []  []      [] []    [] []    [] []     |
+     sh-utils           |                             []       []    []        |
+     shared-mime-info   |              []  []                     [] [] []     |
+     sharutils          |           []                []             [] []     |
+     shishi             |           []                                         |
+     silky              |                                   []                 |
+     skencil            |              []  []                           []     |
+     sketch             |              []  []                           []     |
+     solfege            |                                               []     |
+     soundtracker       |                                   []          []     |
+     sp                 |                                                      |
+     stardict           |                             []    []          []     |
+     system-tools-ba... |        [] [] []  []      []             [] [] []  [] |
+     tar                |           []             [] []       []       []     |
+     texinfo            |           []             [] []                []     |
+     textutils          |                             []       []       []     |
+     tin                |                             ()                       |
+     tp-robot           |                             []                       |
+     tuxpaint           |              []                      [] [] [] []     |
+     unicode-han-tra... |                                                      |
+     unicode-transla... |                                                      |
+     util-linux         |                  []         []       []       []     |
+     vorbis-tools       |                          [] []                       |
+     wastesedge         |                                                      |
+     wdiff              |           []     []      [] []    []          []     |
+     wget               |              []             []    []          []     |
+     xchat              |        []                   []    [] [] [] [] []     |
+     xkeyboard-config   |                                      []       []     |
+     xpad               |                                   [] []       []     |
+                        +------------------------------------------------------+
+                          nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                           0   2  3 58 30  54    5 73 72  4 40 46 11 50 128  2
+
+                          tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+                        +---------------------------------------------------+
+     GNUnet             |                    []                             |  2
+     a2ps               |          [] []     []                             | 19
+     aegis              |                                                   |  0
+     ant-phone          |          []        []                             |  6
+     anubis             |          [] []     []                             | 11
+     ap-utils           |             ()     []                             |  4
+     aspell             |             []     []  []                         | 15
+     bash               |                    []                             | 11
+     batchelor          |          []        []                             |  9
+     bfd                |                                                   |  1
+     bibshelf           |                    []                             |  7
+     binutils           |          []        []                     []      |  9
+     bison              |          []        []                     []      | 19
+     bison-runtime      |                    []         []          []      | 15
+     bluez-pin          |          [] []     []  []     []          []      | 28
+     cflow              |             []     []                             |  5
+     clisp              |                                                   |  6
+     console-tools      |          []        []                             |  5
+     coreutils          |          []        []                             | 16
+     cpio               |          [] []     []                             |  9
+     cpplib             |          []        []         []          []      | 11
+     cryptonit          |                                                   |  5
+     darkstat           |                    []         ()          ()      | 15
+     dialog             |          [] []     []         []          []      | 30
+     diffutils          |          []        []         []          []      | 28
+     doodle             |                    []                             |  6
+     e2fsprogs          |          []        []                             | 10
+     enscript           |          [] []     []                             | 16
+     error              |          []        []         []          []      | 18
+     fetchmail          |          []        []                             | 12
+     fileutils          |          []                   []          []      | 18
+     findutils          |          []        []                     []      | 17
+     flex               |          []        []                             | 15
+     fslint             |                    []                             |  9
+     gas                |          []                                       |  3
+     gawk               |          []        []                             | 15
+     gbiff              |                    []                             |  5
+     gcal               |          []                                       |  5
+     gcc                |          []                   []          []      |  6
+     gettext-examples   |          [] []     []         []    []    []      | 27
+     gettext-runtime    |          [] []     []         []    []    []      | 28
+     gettext-tools      |          [] []     []         []          []      | 19
+     gimp-print         |             []     []                             | 12
+     gip                |                    []                     []      | 12
+     gliv               |          []        []                             |  8
+     glunarclock        |                    []  []                 []      | 15
+     gmult              |          []        []         []          []      | 15
+     gnubiff            |                    []                             |  1
+     gnucash            |          ()                                       |  2
+     gnucash-glossary   |                    []                     []      |  9
+     gnuedu             |                    []                             |  2
+     gnulib             |          [] []     []         []          []      | 28
+     gnunet-gtk         |                                                   |  1
+     gnutls             |                                                   |  2
+     gpe-aerial         |                    []         []                  | 14
+     gpe-beam           |                    []         []                  | 14
+     gpe-calendar       |                    []                             |  3
+     gpe-clock          |          []        []  []     []                  | 21
+     gpe-conf           |                    []         []                  | 14
+     gpe-contacts       |                    []         []                  | 10
+     gpe-edit           |          []        []  []                 []      | 20
+     gpe-filemanager    |                    []                             |  6
+     gpe-go             |          []        []                             | 15
+     gpe-login          |          []        []  []     []          []      | 21
+     gpe-ownerinfo      |          []        []         []          []      | 21
+     gpe-package        |                    []                             |  6
+     gpe-sketchbook     |          []        []                             | 16
+     gpe-su             |          []        []         []                  | 20
+     gpe-taskmanager    |          []        []         []                  | 20
+     gpe-timesheet      |          []        []         []          []      | 18
+     gpe-today          |          []        []  []     []          []      | 21
+     gpe-todo           |                    []                             |  7
+     gphoto2            |             []     []         []          []      | 20
+     gprof              |          []        []                             | 11
+     gpsdrive           |                                                   |  4
+     gramadoir          |                    []                             |  7
+     grep               |          [] []     []                     []      | 34
+     gretl              |                                                   |  4
+     gsasl              |                    []         []                  |  8
+     gss                |                    []                             |  5
+     gst-plugins        |             []     []                     []      | 15
+     gst-plugins-base   |             []     []         []                  |  9
+     gst-plugins-good   |             []     []         []    []    []      | 20
+     gstreamer          |          [] []     []                             | 17
+     gtick              |                    []                             |  3
+     gtkam              |                    []                             | 13
+     gtkorphan          |                    []                             |  7
+     gtkspell           |             []     []  []     []    []    []      | 26
+     gutenprint         |                                                   |  3
+     hello              |          [] []     []         []          []      | 37
+     id-utils           |          []        []                             | 14
+     impost             |                    []                             |  4
+     indent             |          []        []         []          []      | 25
+     iso_3166           |       [] []        []               []            | 16
+     iso_3166_2         |                                                   |  2
+     iso_4217           |          []        []                             | 14
+     iso_639            |                    []                             | 14
+     jpilot             |          [] []     []         []                  |  7
+     jtag               |                    []                             |  3
+     jwhois             |          []        []                     []      | 13
+     kbd                |          []        []                             | 12
+     keytouch           |                    []                             |  4
+     keytouch-editor    |                                                   |  2
+     keytouch-keyboa... |                    []                             |  3
+     latrine            |          []        []                             |  8
+     ld                 |          []        []         []          []      |  8
+     leafpad            |          []        []         []          []      | 23
+     libc               |          []                   []          []      | 23
+     libexif            |                    []                             |  4
+     libextractor       |                    []                             |  5
+     libgpewidget       |                    []  []     []                  | 19
+     libgpg-error       |                    []                             |  4
+     libgphoto2         |             []                                    |  8
+     libgphoto2_port    |             []     []                     []      | 11
+     libgsasl           |                    []                             |  8
+     libiconv           |                    []                             |  7
+     libidn             |                    []         []                  | 10
+     lifelines          |                                                   |  4
+     lilypond           |                                                   |  2
+     lingoteach         |                    []                             |  6
+     lynx               |          [] []     []                             | 15
+     m4                 |                    []         []          []      | 18
+     mailutils          |             []                                    |  8
+     make               |          []        []         []                  | 20
+     man-db             |                    []                             |  6
+     minicom            |                    []                             | 14
+     mysecretdiary      |          []        []                             | 12
+     nano               |                    []                     []      | 17
+     nano_1_0           |          [] []     []                             | 18
+     opcodes            |          []        []                             | 10
+     parted             |          [] []                            []      | 10
+     pilot-qof          |                    []                             |  3
+     psmisc             |                    []                             | 10
+     pwdutils           |                    []                             |  3
+     python             |                                                   |  0
+     qof                |                    []                             |  4
+     radius             |             []                                    |  6
+     recode             |          []        []         []                  | 25
+     rpm                |          [] []     []                     []      | 14
+     screem             |                    []                             |  2
+     scrollkeeper       |          [] []     []                     []      | 26
+     sed                |          []        []                     []      | 22
+     sh-utils           |          []                                       | 15
+     shared-mime-info   |             []     []         []          []      | 24
+     sharutils          |          []        []                     []      | 23
+     shishi             |                                                   |  1
+     silky              |                    []                             |  4
+     skencil            |                    []                             |  7
+     sketch             |                                                   |  6
+     solfege            |                                                   |  2
+     soundtracker       |          []        []                             |  9
+     sp                 |          []                                       |  3
+     stardict           |             []     []         []          []      | 11
+     system-tools-ba... |    []    [] []     []     []  []          []      | 37
+     tar                |          [] []     []                     []      | 20
+     texinfo            |          []        []         []                  | 15
+     textutils          |          []                   []          []      | 17
+     tin                |                                                   |  1
+     tp-robot           |                    []         []          []      | 10
+     tuxpaint           |                    []  []                 []      | 16
+     unicode-han-tra... |                                                   |  0
+     unicode-transla... |                                                   |  2
+     util-linux         |          [] []     []                             | 20
+     vorbis-tools       |             []     []                             | 11
+     wastesedge         |                                                   |  1
+     wdiff              |          []        []                             | 22
+     wget               |          []        []                     []      | 19
+     xchat              |             []     []         []          []      | 29
+     xkeyboard-config   |          [] []     []                     []      | 11
+     xpad               |                    []         []          []      | 14
+                        +---------------------------------------------------+
+       77 teams           tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+      170 domains          0  1  1 77 39  0  136 10  1  48     5    54    0  2028
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If October 2006 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..b1e3f5a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..950319d
--- /dev/null
@@ -0,0 +1,400 @@
+AUTOMAKE_OPTIONS = foreign subdir-objects
+SUBDIRS = . po manual
+DIST_SUBDIRS = ${SUBDIRS} examples myspell lib5
+
+# These are needed due to a bug in Automake
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+
+filterdir = ${pkglibdir}
+optdir = ${pkgdatadir}
+localedir = ${datadir}/locale
+
+PERLPROG = @PERLPROG@
+
+AM_CPPFLAGS = -I${srcdir}/gen -I${srcdir}/common \
+              -I${srcdir}/interfaces/cc/ -I${srcdir}/modules/speller/default/
+
+SUFFIXES = .info
+
+noinst_DATA = 
+EXTRA_DIST = config.rpath  win32/Makefile win32/settings.h
+
+########################################################################
+#
+# libaspell and friends
+#
+
+lib_LTLIBRARIES = libaspell.la
+
+if PSPELL_COMPATIBILITY
+lib_LTLIBRARIES += libpspell.la
+endif
+
+libaspell_la_SOURCES =\
+  common/cache.cpp\
+  common/string.cpp\
+  common/getdata.cpp\
+  common/itemize.cpp\
+  common/file_util.cpp\
+  common/string_map.cpp\
+  common/string_list.cpp\
+  common/config.cpp\
+  common/posib_err.cpp\
+  common/errors.cpp\
+  common/error.cpp\
+  common/fstream.cpp\
+  common/iostream.cpp\
+  common/info.cpp\
+  common/can_have_error.cpp\
+  common/convert.cpp\
+  common/tokenizer.cpp\
+  common/speller.cpp\
+  common/document_checker.cpp\
+  common/filter.cpp\
+  common/objstack.cpp \
+  common/strtonum.cpp\
+  common/gettext_init.cpp\
+  common/file_data_util.cpp\
+  modules/speller/default/readonly_ws.cpp\
+  modules/speller/default/suggest.cpp\
+  modules/speller/default/data.cpp\
+  modules/speller/default/multi_ws.cpp\
+  modules/speller/default/phonetic.cpp\
+  modules/speller/default/writable.cpp\
+  modules/speller/default/speller_impl.cpp\
+  modules/speller/default/phonet.cpp\
+  modules/speller/default/typo_editdist.cpp\
+  modules/speller/default/editdist.cpp\
+  modules/speller/default/primes.cpp\
+  modules/speller/default/language.cpp\
+  modules/speller/default/leditdist.cpp\
+  modules/speller/default/affix.cpp\
+  modules/tokenizer/basic.cpp\
+  lib/filter-c.cpp\
+  lib/word_list-c.cpp\
+  lib/info-c.cpp\
+  lib/mutable_container-c.cpp\
+  lib/error-c.cpp\
+  lib/document_checker-c.cpp\
+  lib/string_map-c.cpp\
+  lib/new_config.cpp\
+  lib/config-c.cpp\
+  lib/string_enumeration-c.cpp\
+  lib/can_have_error-c.cpp\
+  lib/dummy.cpp\
+  lib/new_filter.cpp\
+  lib/new_fmode.cpp\
+  lib/string_list-c.cpp\
+  lib/find_speller.cpp\
+  lib/speller-c.cpp\
+  lib/string_pair_enumeration-c.cpp\
+  lib/new_checker.cpp
+
+libaspell_la_LIBADD =  $(LTLIBINTL) $(PTHREAD_LIB)
+
+if INCREMENTED_SONAME
+libaspell_la_LDFLAGS = -version-info 16:5:0 -no-undefined
+else
+libaspell_la_LDFLAGS = -version-info 16:5:1 -no-undefined
+endif
+
+if PSPELL_COMPATIBILITY
+libpspell_la_SOURCES = lib/dummy.cpp
+
+libpspell_la_LIBADD = libaspell.la
+
+if INCREMENTED_SONAME
+libpspell_la_LDFLAGS = -version-info 16:5:0 -no-undefined
+else
+libpspell_la_LDFLAGS = -version-info 16:5:1 -no-undefined
+endif
+
+endif
+
+EXTRA_DIST += common/*.hpp common/*.h\
+              modules/speller/default/*.hpp\
+              lib/*.hpp
+
+########################################################################
+#
+# Aspell Program
+#
+
+AM_CPPFLAGS += -DLOCALEDIR="$(localedir)"
+
+bin_PROGRAMS = word-list-compress aspell prezip-bin
+
+word_list_compress_SOURCES = prog/compress.c
+
+aspell_SOURCES = prog/aspell.cpp prog/check_funs.cpp prog/checker_string.cpp
+
+aspell_LDADD = libaspell.la $(CURSES_LIB)
+
+prezip_bin_SOURCES = prog/prezip.c
+
+EXTRA_DIST += prog/*.hpp
+
+########################################################################
+#
+# Filter Modules
+#
+
+# This is for filters which are ALWAYS static.  Currently only the
+# URL filter
+
+libaspell_la_SOURCES += modules/filter/url.cpp
+static_optfiles = modules/filter/url-filter.info
+
+dynamic_optfiles = 
+
+###
+### To add a new filter follow the instruction that begin with '###'
+###
+
+### Add the .info file your filter comes with
+optfiles = \
+  modules/filter/email-filter.info\
+  modules/filter/tex-filter.info\
+  modules/filter/sgml-filter.info\
+  modules/filter/html-filter.info\
+  modules/filter/context-filter.info\
+  modules/filter/nroff-filter.info\
+  modules/filter/texinfo-filter.info
+
+### Add all your aspell mode files ###
+fltfiles = \
+  modules/filter/modes/html.amf \
+  modules/filter/modes/sgml.amf \
+  modules/filter/modes/tex.amf \
+  modules/filter/modes/email.amf \
+  modules/filter/modes/ccpp.amf \
+  modules/filter/modes/none.amf \
+  modules/filter/modes/perl.amf \
+  modules/filter/modes/url.amf \
+  modules/filter/modes/comment.amf \
+  modules/filter/modes/nroff.amf\
+  modules/filter/modes/texinfo.amf
+
+if COMPILE_IN_FILTERS
+
+static_optfiles += ${optfiles}
+
+### Add your filter sources here,
+### starting with file containing filter class definition followed by
+### file containing filter member implementation.
+libaspell_la_SOURCES +=\
+  modules/filter/email.cpp\
+  modules/filter/tex.cpp\
+  modules/filter/sgml.cpp\
+  modules/filter/context.cpp\
+  modules/filter/nroff.cpp\
+  modules/filter/texinfo.cpp
+
+else # not COMPILE_IN_FILTERS
+
+dynamic_optfiles += ${optfiles}
+filter_ldflags = -module -avoid-version
+
+### Add name of filter library containing your filter. Name always
+### must look like lib<filtername>-filter.la see development manual
+filter_LTLIBRARIES = email-filter.la tex-filter.la\
+                    sgml-filter.la context-filter.la\
+                     nroff-filter.la texinfo-filter.la
+
+email_filter_la_SOURCES = modules/filter/email.cpp
+email_filter_la_LIBADD = libaspell.la 
+email_filter_la_LDFLAGS  = ${filter_ldflags}
+
+tex_filter_la_SOURCES = modules/filter/tex.cpp
+tex_filter_la_LIBADD = libaspell.la
+tex_filter_la_LDFLAGS  = ${filter_ldflags}
+
+sgml_filter_la_SOURCES  = modules/filter/sgml.cpp
+sgml_filter_la_LIBADD = libaspell.la
+sgml_filter_la_LDFLAGS  = ${filter_ldflags}
+
+context_filter_la_SOURCES  = modules/filter/context.cpp
+context_filter_la_LIBADD = libaspell.la
+context_filter_la_LDFLAGS  = ${filter_ldflags}
+
+nroff_filter_la_SOURCES  = modules/filter/nroff.cpp
+nroff_filter_la_LIBADD = libaspell.la
+nroff_filter_la_LDFLAGS  = ${filter_ldflags}
+
+texinfo_filter_la_SOURCES  = modules/filter/texinfo.cpp
+texinfo_filter_la_LIBADD = libaspell.la
+texinfo_filter_la_LDFLAGS  = ${filter_ldflags}
+
+### Before this line add the corresponding <yourfilterlibrary>_SOURCES and
+### <yourfilterlibrary>_LIBADD lines.  The later at least has to look
+### like <yourfilterlibrary>_LIBADD = ${top_builddir}/lib/libaspell.la
+### in order to make your filter build properly
+
+endif # COMPILE_IN_FILTERS
+
+noinst_DATA += $(static_optfiles) gen/filter.pot
+opt_DATA = $(dynamic_optfiles)
+filter_DATA = $(fltfiles)
+
+# settings.h added as a dependency so it will get recreated if
+#   the COMPILE_IN_FILTERS option changes
+gen/static_filters.src.cpp: ${static_optfiles} gen/mk-static-filter.pl gen/settings.h
+       ${PERLPROG} gen/mk-static-filter.pl ${static_optfiles}
+
+lib/new_filter.cpp: gen/static_filters.src.cpp
+
+gen/filter.pot: gen/mk-filter-pot.pl ${static_optfiles} ${dynamic_optfiles}
+       ${PERLPROG} gen/mk-filter-pot.pl
+
+EXTRA_DIST += ${static_optfiles} ${dynamic_optfiles} ${fltfiles} \
+              gen/mk-static-filter.pl gen/mk-filter-pot.pl\
+              gen/filter.pot
+
+CLEANFILES = gen/static_filters.src.cpp
+
+########################################################################
+#
+# Mk Dirs Target 
+#
+
+common/config.cpp: gen/dirs.h
+
+gen/dirs.h: gen/mk-dirs_h.pl
+       cd gen; perl mk-dirs_h.pl ${prefix} ${pkgdatadir} ${pkglibdir}  ${sysconfdir} >  dirs.h
+
+EXTRA_DIST += gen/mk-dirs_h.pl
+CLEANFILES += gen/dirs.h
+
+########################################################################
+#
+# Scripts
+#
+
+bin_SCRIPTS = scripts/run-with-aspell scripts/aspell-import \
+              scripts/prezip scripts/preunzip scripts/precat 
+
+pkgdata_SCRIPTS = scripts/spell scripts/ispell
+
+scripts/run-with-aspell: scripts/run-with-aspell.create
+       sh ${srcdir}/scripts/run-with-aspell.create ${pkgdatadir} > scripts/run-with-aspell
+       chmod 755 scripts/run-with-aspell
+
+
+if PSPELL_COMPATIBILITY
+
+bin_SCRIPTS += scripts/pspell-config 
+scripts/pspell-config: scripts/mkconfig
+       sh ${srcdir}/scripts/mkconfig ${VERSION} ${datadir} ${pkgdatadir}
+CLEANFILES += scripts/pspell-config
+
+endif
+
+CLEANFILES += scripts/run-with-aspell
+
+EXTRA_DIST += scripts/mkconfig scripts/spell scripts/ispell \
+              scripts/run-with-aspell.create scripts/aspell-import\
+              scripts/prezip scripts/preunzip scripts/precat
+
+########################################################################
+#
+# auto
+#
+
+# FIXME: add dependences
+
+noinst_DATA += auto
+
+mksrc = \
+ auto/mk-src.in auto/mk-src.pl auto/mk-doc.pl\
+ auto/MkSrc/CcHelper.pm  auto/MkSrc/Methods.pm\
+ auto/MkSrc/ProcImpl.pm  auto/MkSrc/Read.pm\
+ auto/MkSrc/Create.pm    auto/MkSrc/ProcCc.pm\
+ auto/MkSrc/ProcNativeImpl.pm  auto/MkSrc/Type.pm\
+ auto/MkSrc/Info.pm            auto/MkSrc/ProcCxx.pm\
+ auto/MkSrc/ProcNative.pm      auto/MkSrc/Util.pm
+
+#auto: @MAINTAINER_MODE_TRUE@ ${mksrc}
+#      cd auto; perl mk-src.pl
+#      cd auto; perl auto/mk-doc.pl
+#      touch auto/auto
+
+EXTRA_DIST += auto/auto auto/mk-src.txt ${mksrc}
+
+
+########################################################################
+#
+# interfaces
+#
+
+include_HEADERS = interfaces/cc/aspell.h
+
+if PSPELL_COMPATIBILITY
+
+pspell_includedir = ${includedir}/pspell
+
+pspell_include_HEADERS = interfaces/cc/pspell.h
+
+endif
+
+########################################################################
+#
+# Misc Top level
+#
+
+pkgdata_DATA = \
+  data/cp1250.cmap data/cp1250.cset \
+  data/cp1251.cmap data/cp1251.cset \
+  data/cp1252.cmap data/cp1252.cset \
+  data/cp1253.cmap data/cp1253.cset \
+  data/cp1254.cmap data/cp1254.cset \
+  data/cp1255.cmap data/cp1255.cset \
+  data/cp1256.cmap data/cp1256.cset \
+  data/cp1257.cmap data/cp1257.cset \
+  data/cp1258.cmap data/cp1258.cset \
+  data/iso-8859-1.cmap data/iso-8859-1.cset   \
+  data/iso-8859-2.cmap data/iso-8859-2.cset   \
+  data/iso-8859-3.cmap data/iso-8859-3.cset   \
+  data/iso-8859-4.cmap data/iso-8859-4.cset   \
+  data/iso-8859-5.cmap data/iso-8859-5.cset   \
+  data/iso-8859-6.cmap data/iso-8859-6.cset   \
+  data/iso-8859-7.cmap data/iso-8859-7.cset   \
+  data/iso-8859-8.cmap data/iso-8859-8.cset   \
+  data/iso-8859-9.cmap data/iso-8859-9.cset   \
+  data/iso-8859-10.cmap data/iso-8859-10.cset \
+  data/iso-8859-11.cmap data/iso-8859-11.cset \
+  data/iso-8859-13.cmap data/iso-8859-13.cset \
+  data/iso-8859-14.cmap data/iso-8859-14.cset \
+  data/iso-8859-15.cmap data/iso-8859-15.cset \
+  data/iso-8859-16.cmap data/iso-8859-16.cset \
+  data/koi8-r.cmap data/koi8-r.cset \
+  data/koi8-u.cmap data/koi8-u.cset \
+  data/dvorak.kbd data/split.kbd data/standard.kbd
+
+EXTRA_DIST += config.rpath  README ${pkgdata_DATA} m4/*.m4 \
+              misc/po-filter.c
+
+README: manual/readme.texi
+       makeinfo --no-validate --no-headers $< > README
+
+maintainer-clean-local:
+       @find . \( -name '*.?pp' -o -name '*.h' -o -name '*.info' \) -print |\
+           xargs grep -l "Automatically generated file." |\
+           xargs rm
+
+dist-hook:
+       mkdir $(distdir)/maintainer
+       cp autogen config-opt config-debug TODO FIXMEs README-CVS \
+           $(distdir)/maintainer
+
+ACLOCAL_AMFLAGS = -I m4
+
+.PHONY: .manual fake-manual
+
+.manual:
+       $(MAKE) -C manual manual
+manual: .manual
+       $(MAKE) -C manual manual
+
+fake-manual: 
+       $(MAKE) -C manual fake-manual
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..57eda40
--- /dev/null
@@ -0,0 +1,1964 @@
+# Makefile.in generated by automake 1.10.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+
+
+VPATH = @srcdir@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@PSPELL_COMPATIBILITY_TRUE@am__append_1 = libpspell.la
+bin_PROGRAMS = word-list-compress$(EXEEXT) aspell$(EXEEXT) \
+       prezip-bin$(EXEEXT)
+@COMPILE_IN_FILTERS_TRUE@am__append_2 = ${optfiles}
+
+### Add your filter sources here,
+### starting with file containing filter class definition followed by
+### file containing filter member implementation.
+@COMPILE_IN_FILTERS_TRUE@am__append_3 = \
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/email.cpp\
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/tex.cpp\
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/sgml.cpp\
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/context.cpp\
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/nroff.cpp\
+@COMPILE_IN_FILTERS_TRUE@  modules/filter/texinfo.cpp
+
+@COMPILE_IN_FILTERS_FALSE@am__append_4 = ${optfiles}
+@PSPELL_COMPATIBILITY_TRUE@am__append_5 = scripts/pspell-config 
+@PSPELL_COMPATIBILITY_TRUE@am__append_6 = scripts/pspell-config
+subdir = .
+DIST_COMMON = README $(am__configure_deps) \
+       $(am__pspell_include_HEADERS_DIST) $(include_HEADERS) \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/auto/Makefile.in \
+       $(top_srcdir)/common/Makefile.in $(top_srcdir)/configure \
+       $(top_srcdir)/data/Makefile.in $(top_srcdir)/gen/Makefile.in \
+       $(top_srcdir)/gen/settings.h.in \
+       $(top_srcdir)/interfaces/Makefile.in \
+       $(top_srcdir)/interfaces/cc/Makefile.in \
+       $(top_srcdir)/lib/Makefile.in $(top_srcdir)/m4/Makefile.in \
+       $(top_srcdir)/modules/Makefile.in \
+       $(top_srcdir)/modules/filter/Makefile.in \
+       $(top_srcdir)/modules/speller/Makefile.in \
+       $(top_srcdir)/modules/speller/default/Makefile.in \
+       $(top_srcdir)/modules/tokenizer/Makefile.in \
+       $(top_srcdir)/prog/Makefile.in \
+       $(top_srcdir)/scripts/Makefile.in ABOUT-NLS COPYING TODO \
+       compile config.guess config.rpath config.sub depcomp \
+       install-sh ltmain.sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/gen/settings.h
+CONFIG_CLEAN_FILES = gen/Makefile common/Makefile lib/Makefile \
+       data/Makefile auto/Makefile modules/Makefile \
+       modules/tokenizer/Makefile modules/speller/Makefile \
+       modules/speller/default/Makefile interfaces/Makefile \
+       interfaces/cc/Makefile scripts/Makefile prog/Makefile \
+       m4/Makefile modules/filter/Makefile
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(filterdir)" "$(DESTDIR)$(libdir)" \
+       "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
+       "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(filterdir)" \
+       "$(DESTDIR)$(optdir)" "$(DESTDIR)$(pkgdatadir)" \
+       "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pspell_includedir)"
+filterLTLIBRARIES_INSTALL = $(INSTALL)
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(filter_LTLIBRARIES) $(lib_LTLIBRARIES)
+@COMPILE_IN_FILTERS_FALSE@context_filter_la_DEPENDENCIES =  \
+@COMPILE_IN_FILTERS_FALSE@     libaspell.la
+am__context_filter_la_SOURCES_DIST = modules/filter/context.cpp
+am__dirstamp = $(am__leading_dot)dirstamp
+@COMPILE_IN_FILTERS_FALSE@am_context_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/context.lo
+context_filter_la_OBJECTS = $(am_context_filter_la_OBJECTS)
+context_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(context_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_context_filter_la_rpath = -rpath \
+@COMPILE_IN_FILTERS_FALSE@     $(filterdir)
+@COMPILE_IN_FILTERS_FALSE@email_filter_la_DEPENDENCIES = libaspell.la
+am__email_filter_la_SOURCES_DIST = modules/filter/email.cpp
+@COMPILE_IN_FILTERS_FALSE@am_email_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/email.lo
+email_filter_la_OBJECTS = $(am_email_filter_la_OBJECTS)
+email_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(email_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_email_filter_la_rpath = -rpath \
+@COMPILE_IN_FILTERS_FALSE@     $(filterdir)
+am__DEPENDENCIES_1 =
+libaspell_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+am__libaspell_la_SOURCES_DIST = common/cache.cpp common/string.cpp \
+       common/getdata.cpp common/itemize.cpp common/file_util.cpp \
+       common/string_map.cpp common/string_list.cpp common/config.cpp \
+       common/posib_err.cpp common/errors.cpp common/error.cpp \
+       common/fstream.cpp common/iostream.cpp common/info.cpp \
+       common/can_have_error.cpp common/convert.cpp \
+       common/tokenizer.cpp common/speller.cpp \
+       common/document_checker.cpp common/filter.cpp \
+       common/objstack.cpp common/strtonum.cpp \
+       common/gettext_init.cpp common/file_data_util.cpp \
+       modules/speller/default/readonly_ws.cpp \
+       modules/speller/default/suggest.cpp \
+       modules/speller/default/data.cpp \
+       modules/speller/default/multi_ws.cpp \
+       modules/speller/default/phonetic.cpp \
+       modules/speller/default/writable.cpp \
+       modules/speller/default/speller_impl.cpp \
+       modules/speller/default/phonet.cpp \
+       modules/speller/default/typo_editdist.cpp \
+       modules/speller/default/editdist.cpp \
+       modules/speller/default/primes.cpp \
+       modules/speller/default/language.cpp \
+       modules/speller/default/leditdist.cpp \
+       modules/speller/default/affix.cpp modules/tokenizer/basic.cpp \
+       lib/filter-c.cpp lib/word_list-c.cpp lib/info-c.cpp \
+       lib/mutable_container-c.cpp lib/error-c.cpp \
+       lib/document_checker-c.cpp lib/string_map-c.cpp \
+       lib/new_config.cpp lib/config-c.cpp \
+       lib/string_enumeration-c.cpp lib/can_have_error-c.cpp \
+       lib/dummy.cpp lib/new_filter.cpp lib/new_fmode.cpp \
+       lib/string_list-c.cpp lib/find_speller.cpp lib/speller-c.cpp \
+       lib/string_pair_enumeration-c.cpp lib/new_checker.cpp \
+       modules/filter/url.cpp modules/filter/email.cpp \
+       modules/filter/tex.cpp modules/filter/sgml.cpp \
+       modules/filter/context.cpp modules/filter/nroff.cpp \
+       modules/filter/texinfo.cpp
+@COMPILE_IN_FILTERS_TRUE@am__objects_1 = modules/filter/email.lo \
+@COMPILE_IN_FILTERS_TRUE@      modules/filter/tex.lo \
+@COMPILE_IN_FILTERS_TRUE@      modules/filter/sgml.lo \
+@COMPILE_IN_FILTERS_TRUE@      modules/filter/context.lo \
+@COMPILE_IN_FILTERS_TRUE@      modules/filter/nroff.lo \
+@COMPILE_IN_FILTERS_TRUE@      modules/filter/texinfo.lo
+am_libaspell_la_OBJECTS = common/cache.lo common/string.lo \
+       common/getdata.lo common/itemize.lo common/file_util.lo \
+       common/string_map.lo common/string_list.lo common/config.lo \
+       common/posib_err.lo common/errors.lo common/error.lo \
+       common/fstream.lo common/iostream.lo common/info.lo \
+       common/can_have_error.lo common/convert.lo common/tokenizer.lo \
+       common/speller.lo common/document_checker.lo common/filter.lo \
+       common/objstack.lo common/strtonum.lo common/gettext_init.lo \
+       common/file_data_util.lo \
+       modules/speller/default/readonly_ws.lo \
+       modules/speller/default/suggest.lo \
+       modules/speller/default/data.lo \
+       modules/speller/default/multi_ws.lo \
+       modules/speller/default/phonetic.lo \
+       modules/speller/default/writable.lo \
+       modules/speller/default/speller_impl.lo \
+       modules/speller/default/phonet.lo \
+       modules/speller/default/typo_editdist.lo \
+       modules/speller/default/editdist.lo \
+       modules/speller/default/primes.lo \
+       modules/speller/default/language.lo \
+       modules/speller/default/leditdist.lo \
+       modules/speller/default/affix.lo modules/tokenizer/basic.lo \
+       lib/filter-c.lo lib/word_list-c.lo lib/info-c.lo \
+       lib/mutable_container-c.lo lib/error-c.lo \
+       lib/document_checker-c.lo lib/string_map-c.lo \
+       lib/new_config.lo lib/config-c.lo lib/string_enumeration-c.lo \
+       lib/can_have_error-c.lo lib/dummy.lo lib/new_filter.lo \
+       lib/new_fmode.lo lib/string_list-c.lo lib/find_speller.lo \
+       lib/speller-c.lo lib/string_pair_enumeration-c.lo \
+       lib/new_checker.lo modules/filter/url.lo $(am__objects_1)
+libaspell_la_OBJECTS = $(am_libaspell_la_OBJECTS)
+libaspell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(libaspell_la_LDFLAGS) $(LDFLAGS) -o $@
+@PSPELL_COMPATIBILITY_TRUE@libpspell_la_DEPENDENCIES = libaspell.la
+am__libpspell_la_SOURCES_DIST = lib/dummy.cpp
+@PSPELL_COMPATIBILITY_TRUE@am_libpspell_la_OBJECTS = lib/dummy.lo
+libpspell_la_OBJECTS = $(am_libpspell_la_OBJECTS)
+libpspell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(libpspell_la_LDFLAGS) $(LDFLAGS) -o $@
+@PSPELL_COMPATIBILITY_TRUE@am_libpspell_la_rpath = -rpath $(libdir)
+@COMPILE_IN_FILTERS_FALSE@nroff_filter_la_DEPENDENCIES = libaspell.la
+am__nroff_filter_la_SOURCES_DIST = modules/filter/nroff.cpp
+@COMPILE_IN_FILTERS_FALSE@am_nroff_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/nroff.lo
+nroff_filter_la_OBJECTS = $(am_nroff_filter_la_OBJECTS)
+nroff_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(nroff_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_nroff_filter_la_rpath = -rpath \
+@COMPILE_IN_FILTERS_FALSE@     $(filterdir)
+@COMPILE_IN_FILTERS_FALSE@sgml_filter_la_DEPENDENCIES = libaspell.la
+am__sgml_filter_la_SOURCES_DIST = modules/filter/sgml.cpp
+@COMPILE_IN_FILTERS_FALSE@am_sgml_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/sgml.lo
+sgml_filter_la_OBJECTS = $(am_sgml_filter_la_OBJECTS)
+sgml_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(sgml_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_sgml_filter_la_rpath = -rpath \
+@COMPILE_IN_FILTERS_FALSE@     $(filterdir)
+@COMPILE_IN_FILTERS_FALSE@tex_filter_la_DEPENDENCIES = libaspell.la
+am__tex_filter_la_SOURCES_DIST = modules/filter/tex.cpp
+@COMPILE_IN_FILTERS_FALSE@am_tex_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/tex.lo
+tex_filter_la_OBJECTS = $(am_tex_filter_la_OBJECTS)
+tex_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(tex_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_tex_filter_la_rpath = -rpath $(filterdir)
+@COMPILE_IN_FILTERS_FALSE@texinfo_filter_la_DEPENDENCIES =  \
+@COMPILE_IN_FILTERS_FALSE@     libaspell.la
+am__texinfo_filter_la_SOURCES_DIST = modules/filter/texinfo.cpp
+@COMPILE_IN_FILTERS_FALSE@am_texinfo_filter_la_OBJECTS =  \
+@COMPILE_IN_FILTERS_FALSE@     modules/filter/texinfo.lo
+texinfo_filter_la_OBJECTS = $(am_texinfo_filter_la_OBJECTS)
+texinfo_filter_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(texinfo_filter_la_LDFLAGS) $(LDFLAGS) -o $@
+@COMPILE_IN_FILTERS_FALSE@am_texinfo_filter_la_rpath = -rpath \
+@COMPILE_IN_FILTERS_FALSE@     $(filterdir)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_aspell_OBJECTS = prog/aspell.$(OBJEXT) prog/check_funs.$(OBJEXT) \
+       prog/checker_string.$(OBJEXT)
+aspell_OBJECTS = $(am_aspell_OBJECTS)
+aspell_DEPENDENCIES = libaspell.la $(am__DEPENDENCIES_1)
+am_prezip_bin_OBJECTS = prog/prezip.$(OBJEXT)
+prezip_bin_OBJECTS = $(am_prezip_bin_OBJECTS)
+prezip_bin_LDADD = $(LDADD)
+am_word_list_compress_OBJECTS = prog/compress.$(OBJEXT)
+word_list_compress_OBJECTS = $(am_word_list_compress_OBJECTS)
+word_list_compress_LDADD = $(LDADD)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+pkgdataSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS) $(pkgdata_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/gen
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(context_filter_la_SOURCES) $(email_filter_la_SOURCES) \
+       $(libaspell_la_SOURCES) $(libpspell_la_SOURCES) \
+       $(nroff_filter_la_SOURCES) $(sgml_filter_la_SOURCES) \
+       $(tex_filter_la_SOURCES) $(texinfo_filter_la_SOURCES) \
+       $(aspell_SOURCES) $(prezip_bin_SOURCES) \
+       $(word_list_compress_SOURCES)
+DIST_SOURCES = $(am__context_filter_la_SOURCES_DIST) \
+       $(am__email_filter_la_SOURCES_DIST) \
+       $(am__libaspell_la_SOURCES_DIST) \
+       $(am__libpspell_la_SOURCES_DIST) \
+       $(am__nroff_filter_la_SOURCES_DIST) \
+       $(am__sgml_filter_la_SOURCES_DIST) \
+       $(am__tex_filter_la_SOURCES_DIST) \
+       $(am__texinfo_filter_la_SOURCES_DIST) $(aspell_SOURCES) \
+       $(prezip_bin_SOURCES) $(word_list_compress_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+filterDATA_INSTALL = $(INSTALL_DATA)
+optDATA_INSTALL = $(INSTALL_DATA)
+pkgdataDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(filter_DATA) $(noinst_DATA) $(opt_DATA) $(pkgdata_DATA)
+includeHEADERS_INSTALL = $(INSTALL_HEADER)
+am__pspell_include_HEADERS_DIST = interfaces/cc/pspell.h
+pspell_includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(include_HEADERS) $(pspell_include_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+
+# These are needed due to a bug in Automake
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDE = @CURSES_INCLUDE@
+CURSES_LIB = @CURSES_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERLPROG = @PERLPROG@
+POSUB = @POSUB@
+PTHREAD_LIB = @PTHREAD_LIB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = ${datadir}/locale
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgdocdir = @pkgdocdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign subdir-objects
+SUBDIRS = . po manual
+DIST_SUBDIRS = ${SUBDIRS} examples myspell lib5
+filterdir = ${pkglibdir}
+optdir = ${pkgdatadir}
+
+########################################################################
+#
+# Aspell Program
+#
+AM_CPPFLAGS = -I${srcdir}/gen -I${srcdir}/common \
+       -I${srcdir}/interfaces/cc/ \
+       -I${srcdir}/modules/speller/default/ \
+       -DLOCALEDIR="$(localedir)"
+SUFFIXES = .info
+
+### Before this line add the corresponding <yourfilterlibrary>_SOURCES and
+### <yourfilterlibrary>_LIBADD lines.  The later at least has to look
+### like <yourfilterlibrary>_LIBADD = ${top_builddir}/lib/libaspell.la
+### in order to make your filter build properly
+
+########################################################################
+#
+# auto
+#
+
+# FIXME: add dependences
+noinst_DATA = $(static_optfiles) gen/filter.pot auto
+
+#auto: @MAINTAINER_MODE_TRUE@ ${mksrc}
+#      cd auto; perl mk-src.pl
+#      cd auto; perl auto/mk-doc.pl
+#      touch auto/auto
+EXTRA_DIST = config.rpath win32/Makefile win32/settings.h common/*.hpp \
+       common/*.h modules/speller/default/*.hpp lib/*.hpp prog/*.hpp \
+       ${static_optfiles} ${dynamic_optfiles} ${fltfiles} \
+       gen/mk-static-filter.pl gen/mk-filter-pot.pl gen/filter.pot \
+       gen/mk-dirs_h.pl scripts/mkconfig scripts/spell scripts/ispell \
+       scripts/run-with-aspell.create scripts/aspell-import \
+       scripts/prezip scripts/preunzip scripts/precat auto/auto \
+       auto/mk-src.txt ${mksrc} config.rpath README ${pkgdata_DATA} \
+       m4/*.m4 misc/po-filter.c
+
+########################################################################
+#
+# libaspell and friends
+#
+lib_LTLIBRARIES = libaspell.la $(am__append_1)
+
+########################################################################
+#
+# Filter Modules
+#
+
+# This is for filters which are ALWAYS static.  Currently only the
+# URL filter
+libaspell_la_SOURCES = common/cache.cpp common/string.cpp \
+       common/getdata.cpp common/itemize.cpp common/file_util.cpp \
+       common/string_map.cpp common/string_list.cpp common/config.cpp \
+       common/posib_err.cpp common/errors.cpp common/error.cpp \
+       common/fstream.cpp common/iostream.cpp common/info.cpp \
+       common/can_have_error.cpp common/convert.cpp \
+       common/tokenizer.cpp common/speller.cpp \
+       common/document_checker.cpp common/filter.cpp \
+       common/objstack.cpp common/strtonum.cpp \
+       common/gettext_init.cpp common/file_data_util.cpp \
+       modules/speller/default/readonly_ws.cpp \
+       modules/speller/default/suggest.cpp \
+       modules/speller/default/data.cpp \
+       modules/speller/default/multi_ws.cpp \
+       modules/speller/default/phonetic.cpp \
+       modules/speller/default/writable.cpp \
+       modules/speller/default/speller_impl.cpp \
+       modules/speller/default/phonet.cpp \
+       modules/speller/default/typo_editdist.cpp \
+       modules/speller/default/editdist.cpp \
+       modules/speller/default/primes.cpp \
+       modules/speller/default/language.cpp \
+       modules/speller/default/leditdist.cpp \
+       modules/speller/default/affix.cpp modules/tokenizer/basic.cpp \
+       lib/filter-c.cpp lib/word_list-c.cpp lib/info-c.cpp \
+       lib/mutable_container-c.cpp lib/error-c.cpp \
+       lib/document_checker-c.cpp lib/string_map-c.cpp \
+       lib/new_config.cpp lib/config-c.cpp \
+       lib/string_enumeration-c.cpp lib/can_have_error-c.cpp \
+       lib/dummy.cpp lib/new_filter.cpp lib/new_fmode.cpp \
+       lib/string_list-c.cpp lib/find_speller.cpp lib/speller-c.cpp \
+       lib/string_pair_enumeration-c.cpp lib/new_checker.cpp \
+       modules/filter/url.cpp $(am__append_3)
+libaspell_la_LIBADD = $(LTLIBINTL) $(PTHREAD_LIB)
+@INCREMENTED_SONAME_FALSE@libaspell_la_LDFLAGS = -version-info 16:5:1 -no-undefined
+@INCREMENTED_SONAME_TRUE@libaspell_la_LDFLAGS = -version-info 16:5:0 -no-undefined
+@PSPELL_COMPATIBILITY_TRUE@libpspell_la_SOURCES = lib/dummy.cpp
+@PSPELL_COMPATIBILITY_TRUE@libpspell_la_LIBADD = libaspell.la
+@INCREMENTED_SONAME_FALSE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_LDFLAGS = -version-info 16:5:1 -no-undefined
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_LDFLAGS = -version-info 16:5:0 -no-undefined
+word_list_compress_SOURCES = prog/compress.c
+aspell_SOURCES = prog/aspell.cpp prog/check_funs.cpp prog/checker_string.cpp
+aspell_LDADD = libaspell.la $(CURSES_LIB)
+prezip_bin_SOURCES = prog/prezip.c
+static_optfiles = modules/filter/url-filter.info $(am__append_2)
+dynamic_optfiles = $(am__append_4)
+
+###
+### To add a new filter follow the instruction that begin with '###'
+###
+
+### Add the .info file your filter comes with
+optfiles = \
+  modules/filter/email-filter.info\
+  modules/filter/tex-filter.info\
+  modules/filter/sgml-filter.info\
+  modules/filter/html-filter.info\
+  modules/filter/context-filter.info\
+  modules/filter/nroff-filter.info\
+  modules/filter/texinfo-filter.info
+
+
+### Add all your aspell mode files ###
+fltfiles = \
+  modules/filter/modes/html.amf \
+  modules/filter/modes/sgml.amf \
+  modules/filter/modes/tex.amf \
+  modules/filter/modes/email.amf \
+  modules/filter/modes/ccpp.amf \
+  modules/filter/modes/none.amf \
+  modules/filter/modes/perl.amf \
+  modules/filter/modes/url.amf \
+  modules/filter/modes/comment.amf \
+  modules/filter/modes/nroff.amf\
+  modules/filter/modes/texinfo.amf
+
+@COMPILE_IN_FILTERS_FALSE@filter_ldflags = -module -avoid-version
+
+### Add name of filter library containing your filter. Name always
+### must look like lib<filtername>-filter.la see development manual
+@COMPILE_IN_FILTERS_FALSE@filter_LTLIBRARIES = email-filter.la tex-filter.la\
+@COMPILE_IN_FILTERS_FALSE@                  sgml-filter.la context-filter.la\
+@COMPILE_IN_FILTERS_FALSE@                     nroff-filter.la texinfo-filter.la
+
+@COMPILE_IN_FILTERS_FALSE@email_filter_la_SOURCES = modules/filter/email.cpp
+@COMPILE_IN_FILTERS_FALSE@email_filter_la_LIBADD = libaspell.la 
+@COMPILE_IN_FILTERS_FALSE@email_filter_la_LDFLAGS = ${filter_ldflags}
+@COMPILE_IN_FILTERS_FALSE@tex_filter_la_SOURCES = modules/filter/tex.cpp
+@COMPILE_IN_FILTERS_FALSE@tex_filter_la_LIBADD = libaspell.la
+@COMPILE_IN_FILTERS_FALSE@tex_filter_la_LDFLAGS = ${filter_ldflags}
+@COMPILE_IN_FILTERS_FALSE@sgml_filter_la_SOURCES = modules/filter/sgml.cpp
+@COMPILE_IN_FILTERS_FALSE@sgml_filter_la_LIBADD = libaspell.la
+@COMPILE_IN_FILTERS_FALSE@sgml_filter_la_LDFLAGS = ${filter_ldflags}
+@COMPILE_IN_FILTERS_FALSE@context_filter_la_SOURCES = modules/filter/context.cpp
+@COMPILE_IN_FILTERS_FALSE@context_filter_la_LIBADD = libaspell.la
+@COMPILE_IN_FILTERS_FALSE@context_filter_la_LDFLAGS = ${filter_ldflags}
+@COMPILE_IN_FILTERS_FALSE@nroff_filter_la_SOURCES = modules/filter/nroff.cpp
+@COMPILE_IN_FILTERS_FALSE@nroff_filter_la_LIBADD = libaspell.la
+@COMPILE_IN_FILTERS_FALSE@nroff_filter_la_LDFLAGS = ${filter_ldflags}
+@COMPILE_IN_FILTERS_FALSE@texinfo_filter_la_SOURCES = modules/filter/texinfo.cpp
+@COMPILE_IN_FILTERS_FALSE@texinfo_filter_la_LIBADD = libaspell.la
+@COMPILE_IN_FILTERS_FALSE@texinfo_filter_la_LDFLAGS = ${filter_ldflags}
+opt_DATA = $(dynamic_optfiles)
+filter_DATA = $(fltfiles)
+CLEANFILES = gen/static_filters.src.cpp gen/dirs.h $(am__append_6) \
+       scripts/run-with-aspell
+
+########################################################################
+#
+# Scripts
+#
+bin_SCRIPTS = scripts/run-with-aspell scripts/aspell-import \
+       scripts/prezip scripts/preunzip scripts/precat $(am__append_5)
+pkgdata_SCRIPTS = scripts/spell scripts/ispell
+mksrc = \
+ auto/mk-src.in auto/mk-src.pl auto/mk-doc.pl\
+ auto/MkSrc/CcHelper.pm  auto/MkSrc/Methods.pm\
+ auto/MkSrc/ProcImpl.pm  auto/MkSrc/Read.pm\
+ auto/MkSrc/Create.pm    auto/MkSrc/ProcCc.pm\
+ auto/MkSrc/ProcNativeImpl.pm  auto/MkSrc/Type.pm\
+ auto/MkSrc/Info.pm            auto/MkSrc/ProcCxx.pm\
+ auto/MkSrc/ProcNative.pm      auto/MkSrc/Util.pm
+
+
+########################################################################
+#
+# interfaces
+#
+include_HEADERS = interfaces/cc/aspell.h
+@PSPELL_COMPATIBILITY_TRUE@pspell_includedir = ${includedir}/pspell
+@PSPELL_COMPATIBILITY_TRUE@pspell_include_HEADERS = interfaces/cc/pspell.h
+
+########################################################################
+#
+# Misc Top level
+#
+pkgdata_DATA = \
+  data/cp1250.cmap data/cp1250.cset \
+  data/cp1251.cmap data/cp1251.cset \
+  data/cp1252.cmap data/cp1252.cset \
+  data/cp1253.cmap data/cp1253.cset \
+  data/cp1254.cmap data/cp1254.cset \
+  data/cp1255.cmap data/cp1255.cset \
+  data/cp1256.cmap data/cp1256.cset \
+  data/cp1257.cmap data/cp1257.cset \
+  data/cp1258.cmap data/cp1258.cset \
+  data/iso-8859-1.cmap data/iso-8859-1.cset   \
+  data/iso-8859-2.cmap data/iso-8859-2.cset   \
+  data/iso-8859-3.cmap data/iso-8859-3.cset   \
+  data/iso-8859-4.cmap data/iso-8859-4.cset   \
+  data/iso-8859-5.cmap data/iso-8859-5.cset   \
+  data/iso-8859-6.cmap data/iso-8859-6.cset   \
+  data/iso-8859-7.cmap data/iso-8859-7.cset   \
+  data/iso-8859-8.cmap data/iso-8859-8.cset   \
+  data/iso-8859-9.cmap data/iso-8859-9.cset   \
+  data/iso-8859-10.cmap data/iso-8859-10.cset \
+  data/iso-8859-11.cmap data/iso-8859-11.cset \
+  data/iso-8859-13.cmap data/iso-8859-13.cset \
+  data/iso-8859-14.cmap data/iso-8859-14.cset \
+  data/iso-8859-15.cmap data/iso-8859-15.cset \
+  data/iso-8859-16.cmap data/iso-8859-16.cset \
+  data/koi8-r.cmap data/koi8-r.cset \
+  data/koi8-u.cmap data/koi8-u.cset \
+  data/dvorak.kbd data/split.kbd data/standard.kbd
+
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .info .c .cpp .lo .o .obj
+am--refresh:
+       @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+             cd $(srcdir) && $(AUTOMAKE) --foreign  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+gen/settings.h: gen/stamp-h1
+       @if test ! -f $@; then \
+         rm -f gen/stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) gen/stamp-h1; \
+       else :; fi
+
+gen/stamp-h1: $(top_srcdir)/gen/settings.h.in $(top_builddir)/config.status
+       @rm -f gen/stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status gen/settings.h
+$(top_srcdir)/gen/settings.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f gen/stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f gen/settings.h gen/stamp-h1
+gen/Makefile: $(top_builddir)/config.status $(top_srcdir)/gen/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+common/Makefile: $(top_builddir)/config.status $(top_srcdir)/common/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+lib/Makefile: $(top_builddir)/config.status $(top_srcdir)/lib/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+data/Makefile: $(top_builddir)/config.status $(top_srcdir)/data/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+auto/Makefile: $(top_builddir)/config.status $(top_srcdir)/auto/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+modules/Makefile: $(top_builddir)/config.status $(top_srcdir)/modules/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+modules/tokenizer/Makefile: $(top_builddir)/config.status $(top_srcdir)/modules/tokenizer/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+modules/speller/Makefile: $(top_builddir)/config.status $(top_srcdir)/modules/speller/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+modules/speller/default/Makefile: $(top_builddir)/config.status $(top_srcdir)/modules/speller/default/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+interfaces/Makefile: $(top_builddir)/config.status $(top_srcdir)/interfaces/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+interfaces/cc/Makefile: $(top_builddir)/config.status $(top_srcdir)/interfaces/cc/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+scripts/Makefile: $(top_builddir)/config.status $(top_srcdir)/scripts/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+prog/Makefile: $(top_builddir)/config.status $(top_srcdir)/prog/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+m4/Makefile: $(top_builddir)/config.status $(top_srcdir)/m4/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+modules/filter/Makefile: $(top_builddir)/config.status $(top_srcdir)/modules/filter/Makefile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+install-filterLTLIBRARIES: $(filter_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(filterdir)" || $(MKDIR_P) "$(DESTDIR)$(filterdir)"
+       @list='$(filter_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(filterLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(filterdir)/$$f'"; \
+           $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(filterLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(filterdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-filterLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(filter_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(filterdir)/$$p'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(filterdir)/$$p"; \
+       done
+
+clean-filterLTLIBRARIES:
+       -test -z "$(filter_LTLIBRARIES)" || rm -f $(filter_LTLIBRARIES)
+       @list='$(filter_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+           $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+modules/filter/$(am__dirstamp):
+       @$(MKDIR_P) modules/filter
+       @: > modules/filter/$(am__dirstamp)
+modules/filter/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) modules/filter/$(DEPDIR)
+       @: > modules/filter/$(DEPDIR)/$(am__dirstamp)
+modules/filter/context.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+context-filter.la: $(context_filter_la_OBJECTS) $(context_filter_la_DEPENDENCIES) 
+       $(context_filter_la_LINK) $(am_context_filter_la_rpath) $(context_filter_la_OBJECTS) $(context_filter_la_LIBADD) $(LIBS)
+modules/filter/email.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+email-filter.la: $(email_filter_la_OBJECTS) $(email_filter_la_DEPENDENCIES) 
+       $(email_filter_la_LINK) $(am_email_filter_la_rpath) $(email_filter_la_OBJECTS) $(email_filter_la_LIBADD) $(LIBS)
+common/$(am__dirstamp):
+       @$(MKDIR_P) common
+       @: > common/$(am__dirstamp)
+common/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) common/$(DEPDIR)
+       @: > common/$(DEPDIR)/$(am__dirstamp)
+common/cache.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/string.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/getdata.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/itemize.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/file_util.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/string_map.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/string_list.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/config.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/posib_err.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/errors.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/error.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/fstream.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/iostream.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/info.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/can_have_error.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/convert.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/tokenizer.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/speller.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/document_checker.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/filter.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/objstack.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/strtonum.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/gettext_init.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+common/file_data_util.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/$(am__dirstamp):
+       @$(MKDIR_P) modules/speller/default
+       @: > modules/speller/default/$(am__dirstamp)
+modules/speller/default/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) modules/speller/default/$(DEPDIR)
+       @: > modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/readonly_ws.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/suggest.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/data.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/multi_ws.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/phonetic.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/writable.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/speller_impl.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/phonet.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/typo_editdist.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/editdist.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/primes.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/language.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/leditdist.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/speller/default/affix.lo:  \
+       modules/speller/default/$(am__dirstamp) \
+       modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+modules/tokenizer/$(am__dirstamp):
+       @$(MKDIR_P) modules/tokenizer
+       @: > modules/tokenizer/$(am__dirstamp)
+modules/tokenizer/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) modules/tokenizer/$(DEPDIR)
+       @: > modules/tokenizer/$(DEPDIR)/$(am__dirstamp)
+modules/tokenizer/basic.lo: modules/tokenizer/$(am__dirstamp) \
+       modules/tokenizer/$(DEPDIR)/$(am__dirstamp)
+lib/$(am__dirstamp):
+       @$(MKDIR_P) lib
+       @: > lib/$(am__dirstamp)
+lib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) lib/$(DEPDIR)
+       @: > lib/$(DEPDIR)/$(am__dirstamp)
+lib/filter-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/word_list-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/info-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/mutable_container-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/error-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/document_checker-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/string_map-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/new_config.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/config-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/string_enumeration-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/can_have_error-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/dummy.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/new_filter.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/new_fmode.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/string_list-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/find_speller.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/speller-c.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/string_pair_enumeration-c.lo: lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/new_checker.lo: lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+modules/filter/url.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+modules/filter/tex.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+modules/filter/sgml.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+modules/filter/nroff.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+modules/filter/texinfo.lo: modules/filter/$(am__dirstamp) \
+       modules/filter/$(DEPDIR)/$(am__dirstamp)
+libaspell.la: $(libaspell_la_OBJECTS) $(libaspell_la_DEPENDENCIES) 
+       $(libaspell_la_LINK) -rpath $(libdir) $(libaspell_la_OBJECTS) $(libaspell_la_LIBADD) $(LIBS)
+libpspell.la: $(libpspell_la_OBJECTS) $(libpspell_la_DEPENDENCIES) 
+       $(libpspell_la_LINK) $(am_libpspell_la_rpath) $(libpspell_la_OBJECTS) $(libpspell_la_LIBADD) $(LIBS)
+nroff-filter.la: $(nroff_filter_la_OBJECTS) $(nroff_filter_la_DEPENDENCIES) 
+       $(nroff_filter_la_LINK) $(am_nroff_filter_la_rpath) $(nroff_filter_la_OBJECTS) $(nroff_filter_la_LIBADD) $(LIBS)
+sgml-filter.la: $(sgml_filter_la_OBJECTS) $(sgml_filter_la_DEPENDENCIES) 
+       $(sgml_filter_la_LINK) $(am_sgml_filter_la_rpath) $(sgml_filter_la_OBJECTS) $(sgml_filter_la_LIBADD) $(LIBS)
+tex-filter.la: $(tex_filter_la_OBJECTS) $(tex_filter_la_DEPENDENCIES) 
+       $(tex_filter_la_LINK) $(am_tex_filter_la_rpath) $(tex_filter_la_OBJECTS) $(tex_filter_la_LIBADD) $(LIBS)
+texinfo-filter.la: $(texinfo_filter_la_OBJECTS) $(texinfo_filter_la_DEPENDENCIES) 
+       $(texinfo_filter_la_LINK) $(am_texinfo_filter_la_rpath) $(texinfo_filter_la_OBJECTS) $(texinfo_filter_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+prog/$(am__dirstamp):
+       @$(MKDIR_P) prog
+       @: > prog/$(am__dirstamp)
+prog/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) prog/$(DEPDIR)
+       @: > prog/$(DEPDIR)/$(am__dirstamp)
+prog/aspell.$(OBJEXT): prog/$(am__dirstamp) \
+       prog/$(DEPDIR)/$(am__dirstamp)
+prog/check_funs.$(OBJEXT): prog/$(am__dirstamp) \
+       prog/$(DEPDIR)/$(am__dirstamp)
+prog/checker_string.$(OBJEXT): prog/$(am__dirstamp) \
+       prog/$(DEPDIR)/$(am__dirstamp)
+aspell$(EXEEXT): $(aspell_OBJECTS) $(aspell_DEPENDENCIES) 
+       @rm -f aspell$(EXEEXT)
+       $(CXXLINK) $(aspell_OBJECTS) $(aspell_LDADD) $(LIBS)
+prog/prezip.$(OBJEXT): prog/$(am__dirstamp) \
+       prog/$(DEPDIR)/$(am__dirstamp)
+prezip-bin$(EXEEXT): $(prezip_bin_OBJECTS) $(prezip_bin_DEPENDENCIES) 
+       @rm -f prezip-bin$(EXEEXT)
+       $(LINK) $(prezip_bin_OBJECTS) $(prezip_bin_LDADD) $(LIBS)
+prog/compress.$(OBJEXT): prog/$(am__dirstamp) \
+       prog/$(DEPDIR)/$(am__dirstamp)
+word-list-compress$(EXEEXT): $(word_list_compress_OBJECTS) $(word_list_compress_DEPENDENCIES) 
+       @rm -f word-list-compress$(EXEEXT)
+       $(LINK) $(word_list_compress_OBJECTS) $(word_list_compress_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+           $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+install-pkgdataSCRIPTS: $(pkgdata_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+       @list='$(pkgdata_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(pkgdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+           $(pkgdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-pkgdataSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgdata_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+       done
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+       -rm -f common/cache.$(OBJEXT)
+       -rm -f common/cache.lo
+       -rm -f common/can_have_error.$(OBJEXT)
+       -rm -f common/can_have_error.lo
+       -rm -f common/config.$(OBJEXT)
+       -rm -f common/config.lo
+       -rm -f common/convert.$(OBJEXT)
+       -rm -f common/convert.lo
+       -rm -f common/document_checker.$(OBJEXT)
+       -rm -f common/document_checker.lo
+       -rm -f common/error.$(OBJEXT)
+       -rm -f common/error.lo
+       -rm -f common/errors.$(OBJEXT)
+       -rm -f common/errors.lo
+       -rm -f common/file_data_util.$(OBJEXT)
+       -rm -f common/file_data_util.lo
+       -rm -f common/file_util.$(OBJEXT)
+       -rm -f common/file_util.lo
+       -rm -f common/filter.$(OBJEXT)
+       -rm -f common/filter.lo
+       -rm -f common/fstream.$(OBJEXT)
+       -rm -f common/fstream.lo
+       -rm -f common/getdata.$(OBJEXT)
+       -rm -f common/getdata.lo
+       -rm -f common/gettext_init.$(OBJEXT)
+       -rm -f common/gettext_init.lo
+       -rm -f common/info.$(OBJEXT)
+       -rm -f common/info.lo
+       -rm -f common/iostream.$(OBJEXT)
+       -rm -f common/iostream.lo
+       -rm -f common/itemize.$(OBJEXT)
+       -rm -f common/itemize.lo
+       -rm -f common/objstack.$(OBJEXT)
+       -rm -f common/objstack.lo
+       -rm -f common/posib_err.$(OBJEXT)
+       -rm -f common/posib_err.lo
+       -rm -f common/speller.$(OBJEXT)
+       -rm -f common/speller.lo
+       -rm -f common/string.$(OBJEXT)
+       -rm -f common/string.lo
+       -rm -f common/string_list.$(OBJEXT)
+       -rm -f common/string_list.lo
+       -rm -f common/string_map.$(OBJEXT)
+       -rm -f common/string_map.lo
+       -rm -f common/strtonum.$(OBJEXT)
+       -rm -f common/strtonum.lo
+       -rm -f common/tokenizer.$(OBJEXT)
+       -rm -f common/tokenizer.lo
+       -rm -f lib/can_have_error-c.$(OBJEXT)
+       -rm -f lib/can_have_error-c.lo
+       -rm -f lib/config-c.$(OBJEXT)
+       -rm -f lib/config-c.lo
+       -rm -f lib/document_checker-c.$(OBJEXT)
+       -rm -f lib/document_checker-c.lo
+       -rm -f lib/dummy.$(OBJEXT)
+       -rm -f lib/dummy.lo
+       -rm -f lib/error-c.$(OBJEXT)
+       -rm -f lib/error-c.lo
+       -rm -f lib/filter-c.$(OBJEXT)
+       -rm -f lib/filter-c.lo
+       -rm -f lib/find_speller.$(OBJEXT)
+       -rm -f lib/find_speller.lo
+       -rm -f lib/info-c.$(OBJEXT)
+       -rm -f lib/info-c.lo
+       -rm -f lib/mutable_container-c.$(OBJEXT)
+       -rm -f lib/mutable_container-c.lo
+       -rm -f lib/new_checker.$(OBJEXT)
+       -rm -f lib/new_checker.lo
+       -rm -f lib/new_config.$(OBJEXT)
+       -rm -f lib/new_config.lo
+       -rm -f lib/new_filter.$(OBJEXT)
+       -rm -f lib/new_filter.lo
+       -rm -f lib/new_fmode.$(OBJEXT)
+       -rm -f lib/new_fmode.lo
+       -rm -f lib/speller-c.$(OBJEXT)
+       -rm -f lib/speller-c.lo
+       -rm -f lib/string_enumeration-c.$(OBJEXT)
+       -rm -f lib/string_enumeration-c.lo
+       -rm -f lib/string_list-c.$(OBJEXT)
+       -rm -f lib/string_list-c.lo
+       -rm -f lib/string_map-c.$(OBJEXT)
+       -rm -f lib/string_map-c.lo
+       -rm -f lib/string_pair_enumeration-c.$(OBJEXT)
+       -rm -f lib/string_pair_enumeration-c.lo
+       -rm -f lib/word_list-c.$(OBJEXT)
+       -rm -f lib/word_list-c.lo
+       -rm -f modules/filter/context.$(OBJEXT)
+       -rm -f modules/filter/context.lo
+       -rm -f modules/filter/email.$(OBJEXT)
+       -rm -f modules/filter/email.lo
+       -rm -f modules/filter/nroff.$(OBJEXT)
+       -rm -f modules/filter/nroff.lo
+       -rm -f modules/filter/sgml.$(OBJEXT)
+       -rm -f modules/filter/sgml.lo
+       -rm -f modules/filter/tex.$(OBJEXT)
+       -rm -f modules/filter/tex.lo
+       -rm -f modules/filter/texinfo.$(OBJEXT)
+       -rm -f modules/filter/texinfo.lo
+       -rm -f modules/filter/url.$(OBJEXT)
+       -rm -f modules/filter/url.lo
+       -rm -f modules/speller/default/affix.$(OBJEXT)
+       -rm -f modules/speller/default/affix.lo
+       -rm -f modules/speller/default/data.$(OBJEXT)
+       -rm -f modules/speller/default/data.lo
+       -rm -f modules/speller/default/editdist.$(OBJEXT)
+       -rm -f modules/speller/default/editdist.lo
+       -rm -f modules/speller/default/language.$(OBJEXT)
+       -rm -f modules/speller/default/language.lo
+       -rm -f modules/speller/default/leditdist.$(OBJEXT)
+       -rm -f modules/speller/default/leditdist.lo
+       -rm -f modules/speller/default/multi_ws.$(OBJEXT)
+       -rm -f modules/speller/default/multi_ws.lo
+       -rm -f modules/speller/default/phonet.$(OBJEXT)
+       -rm -f modules/speller/default/phonet.lo
+       -rm -f modules/speller/default/phonetic.$(OBJEXT)
+       -rm -f modules/speller/default/phonetic.lo
+       -rm -f modules/speller/default/primes.$(OBJEXT)
+       -rm -f modules/speller/default/primes.lo
+       -rm -f modules/speller/default/readonly_ws.$(OBJEXT)
+       -rm -f modules/speller/default/readonly_ws.lo
+       -rm -f modules/speller/default/speller_impl.$(OBJEXT)
+       -rm -f modules/speller/default/speller_impl.lo
+       -rm -f modules/speller/default/suggest.$(OBJEXT)
+       -rm -f modules/speller/default/suggest.lo
+       -rm -f modules/speller/default/typo_editdist.$(OBJEXT)
+       -rm -f modules/speller/default/typo_editdist.lo
+       -rm -f modules/speller/default/writable.$(OBJEXT)
+       -rm -f modules/speller/default/writable.lo
+       -rm -f modules/tokenizer/basic.$(OBJEXT)
+       -rm -f modules/tokenizer/basic.lo
+       -rm -f prog/aspell.$(OBJEXT)
+       -rm -f prog/check_funs.$(OBJEXT)
+       -rm -f prog/checker_string.$(OBJEXT)
+       -rm -f prog/compress.$(OBJEXT)
+       -rm -f prog/prezip.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/cache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/can_have_error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/convert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/document_checker.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/errors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/file_data_util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/file_util.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/filter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/fstream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/getdata.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/gettext_init.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/iostream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/itemize.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/objstack.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/posib_err.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/speller.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/string.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/string_list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/string_map.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/strtonum.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/tokenizer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/can_have_error-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/config-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/document_checker-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/dummy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/error-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/filter-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/find_speller.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/info-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/mutable_container-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/new_checker.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/new_config.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/new_filter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/new_fmode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/speller-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/string_enumeration-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/string_list-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/string_map-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/string_pair_enumeration-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/word_list-c.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/context.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/email.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/nroff.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/sgml.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/tex.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/texinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/filter/$(DEPDIR)/url.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/affix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/editdist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/language.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/leditdist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/multi_ws.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/phonet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/phonetic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/primes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/readonly_ws.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/speller_impl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/suggest.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/typo_editdist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/speller/default/$(DEPDIR)/writable.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@modules/tokenizer/$(DEPDIR)/basic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@prog/$(DEPDIR)/aspell.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@prog/$(DEPDIR)/check_funs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@prog/$(DEPDIR)/checker_string.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@prog/$(DEPDIR)/compress.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@prog/$(DEPDIR)/prezip.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   mv -f $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+.cpp.o:
+@am__fastdepCXX_TRUE@  depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@  mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@  depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@  mv -f $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@  depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCXX_TRUE@  $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@  mv -f $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+       -rm -rf common/.libs common/_libs
+       -rm -rf lib/.libs lib/_libs
+       -rm -rf modules/filter/.libs modules/filter/_libs
+       -rm -rf modules/speller/default/.libs modules/speller/default/_libs
+       -rm -rf modules/tokenizer/.libs modules/tokenizer/_libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+install-filterDATA: $(filter_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(filterdir)" || $(MKDIR_P) "$(DESTDIR)$(filterdir)"
+       @list='$(filter_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(filterDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(filterdir)/$$f'"; \
+         $(filterDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(filterdir)/$$f"; \
+       done
+
+uninstall-filterDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(filter_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(filterdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(filterdir)/$$f"; \
+       done
+install-optDATA: $(opt_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(optdir)" || $(MKDIR_P) "$(DESTDIR)$(optdir)"
+       @list='$(opt_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(optDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(optdir)/$$f'"; \
+         $(optDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(optdir)/$$f"; \
+       done
+
+uninstall-optDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(opt_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(optdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(optdir)/$$f"; \
+       done
+install-pkgdataDATA: $(pkgdata_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+       @list='$(pkgdata_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+         $(pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+       done
+
+uninstall-pkgdataDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgdata_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+       done
+install-includeHEADERS: $(include_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
+       @list='$(include_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
+         $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
+       done
+
+uninstall-includeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(include_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(includedir)/$$f"; \
+       done
+install-pspell_includeHEADERS: $(pspell_include_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pspell_includedir)" || $(MKDIR_P) "$(DESTDIR)$(pspell_includedir)"
+       @list='$(pspell_include_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pspell_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pspell_includedir)/$$f'"; \
+         $(pspell_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pspell_includedir)/$$f"; \
+       done
+
+uninstall-pspell_includeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pspell_include_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pspell_includedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pspell_includedir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d $(distdir) || mkdir $(distdir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \
+               $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(filterdir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(filterdir)" "$(DESTDIR)$(optdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(pspell_includedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -rm -f common/$(DEPDIR)/$(am__dirstamp)
+       -rm -f common/$(am__dirstamp)
+       -rm -f lib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f lib/$(am__dirstamp)
+       -rm -f modules/filter/$(DEPDIR)/$(am__dirstamp)
+       -rm -f modules/filter/$(am__dirstamp)
+       -rm -f modules/speller/default/$(DEPDIR)/$(am__dirstamp)
+       -rm -f modules/speller/default/$(am__dirstamp)
+       -rm -f modules/tokenizer/$(DEPDIR)/$(am__dirstamp)
+       -rm -f modules/tokenizer/$(am__dirstamp)
+       -rm -f prog/$(DEPDIR)/$(am__dirstamp)
+       -rm -f prog/$(am__dirstamp)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-filterLTLIBRARIES clean-generic \
+       clean-libLTLIBRARIES clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf common/$(DEPDIR) lib/$(DEPDIR) modules/filter/$(DEPDIR) modules/speller/default/$(DEPDIR) modules/tokenizer/$(DEPDIR) prog/$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-filterDATA install-filterLTLIBRARIES \
+       install-includeHEADERS install-optDATA install-pkgdataDATA \
+       install-pkgdataSCRIPTS install-pspell_includeHEADERS
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+       install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -rf common/$(DEPDIR) lib/$(DEPDIR) modules/filter/$(DEPDIR) modules/speller/default/$(DEPDIR) modules/tokenizer/$(DEPDIR) prog/$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+       uninstall-filterDATA uninstall-filterLTLIBRARIES \
+       uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+       uninstall-optDATA uninstall-pkgdataDATA \
+       uninstall-pkgdataSCRIPTS uninstall-pspell_includeHEADERS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-binPROGRAMS \
+       clean-filterLTLIBRARIES clean-generic clean-libLTLIBRARIES \
+       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+       dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-zip \
+       distcheck distclean distclean-compile distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-binPROGRAMS \
+       install-binSCRIPTS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-filterDATA \
+       install-filterLTLIBRARIES install-html install-html-am \
+       install-includeHEADERS install-info install-info-am \
+       install-libLTLIBRARIES install-man install-optDATA install-pdf \
+       install-pdf-am install-pkgdataDATA install-pkgdataSCRIPTS \
+       install-ps install-ps-am install-pspell_includeHEADERS \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       maintainer-clean-local mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am \
+       uninstall-binPROGRAMS uninstall-binSCRIPTS \
+       uninstall-filterDATA uninstall-filterLTLIBRARIES \
+       uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+       uninstall-optDATA uninstall-pkgdataDATA \
+       uninstall-pkgdataSCRIPTS uninstall-pspell_includeHEADERS
+
+
+# settings.h added as a dependency so it will get recreated if
+#   the COMPILE_IN_FILTERS option changes
+gen/static_filters.src.cpp: ${static_optfiles} gen/mk-static-filter.pl gen/settings.h
+       ${PERLPROG} gen/mk-static-filter.pl ${static_optfiles}
+
+lib/new_filter.cpp: gen/static_filters.src.cpp
+
+gen/filter.pot: gen/mk-filter-pot.pl ${static_optfiles} ${dynamic_optfiles}
+       ${PERLPROG} gen/mk-filter-pot.pl
+
+########################################################################
+#
+# Mk Dirs Target 
+#
+
+common/config.cpp: gen/dirs.h
+
+gen/dirs.h: gen/mk-dirs_h.pl
+       cd gen; perl mk-dirs_h.pl ${prefix} ${pkgdatadir} ${pkglibdir}  ${sysconfdir} >  dirs.h
+
+scripts/run-with-aspell: scripts/run-with-aspell.create
+       sh ${srcdir}/scripts/run-with-aspell.create ${pkgdatadir} > scripts/run-with-aspell
+       chmod 755 scripts/run-with-aspell
+@PSPELL_COMPATIBILITY_TRUE@scripts/pspell-config: scripts/mkconfig
+@PSPELL_COMPATIBILITY_TRUE@    sh ${srcdir}/scripts/mkconfig ${VERSION} ${datadir} ${pkgdatadir}
+
+README: manual/readme.texi
+       makeinfo --no-validate --no-headers $< > README
+
+maintainer-clean-local:
+       @find . \( -name '*.?pp' -o -name '*.h' -o -name '*.info' \) -print |\
+           xargs grep -l "Automatically generated file." |\
+           xargs rm
+
+dist-hook:
+       mkdir $(distdir)/maintainer
+       cp autogen config-opt config-debug TODO FIXMEs README-CVS \
+           $(distdir)/maintainer
+
+.PHONY: .manual fake-manual
+
+.manual:
+       $(MAKE) -C manual manual
+manual: .manual
+       $(MAKE) -C manual manual
+
+fake-manual: 
+       $(MAKE) -C manual fake-manual
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..0a3d277
--- /dev/null
+++ b/README
@@ -0,0 +1,378 @@
+Appendix A Installing
+*********************
+
+Aspell requires gcc 2.95 (or better) as the C++ compiler.  Other C++
+compilers should work with some effort.  Other C++ compilers for mostly
+POSIX compliant (Unix, Linux, BeOS, Cygwin) systems should work without
+any major problems provided that the compile can handle all of the
+advanced C++ features Aspell uses.  C++ compilers for non-Unix systems
+might work but it will take some work.  Aspell at very least requires a
+Unix-like environment (`sh', `grep', `sed', `tr', ...), and Perl in
+order to build.  Aspell also uses a few POSIX functions when necessary.
+
+   The latest version can always be found at GNU Aspell's home page at
+`http://aspell.net'.
+
+A.1 Generic Install Instructions
+================================
+
+     ./configure && make
+
+   For additional `configure' options type `./configure --help'.  You
+can control what C++ compiler is used by setting the environment
+variable `CXX' before running configure and you can control what flags
+are passed to the C++ compile via the environment variable `CXXFLAGS'.
+Static libraries are disabled by default since static libraries will
+not work right due to the mixing of C and C++.  When a C program links
+with the static libraries in Aspell it is likely to crash because
+Aspell's C++ objects are not getting initialized correctly.  However,
+if for some reason you want them, you can enable them via
+`--enable-static'.
+
+   Aspell should then compile without any additional user intervention.
+If you run into problems please first check the sections below as that
+might solve your problem.
+
+   To install the program simply type
+
+     make install
+
+   After Aspell is installed at least one dictionary needs to be
+installed.  You can find them at `http://aspell.net/'.  The `aspell'
+program must be in your path in order for the dictionaries to install
+correctly.
+
+   If you do not have Ispell or the traditional Unix `spell' utility
+installed on your system then you should also copy the compatibility
+scripts `ispell' and `spell' located in the `scripts/' directory into
+your binary directory which is usually `/usr/local/bin' so that
+programs that expect the `ispell' or `spell' command will work
+correctly.
+
+A.2 HTML Manuals and `make clean'
+=================================
+
+The Aspell distribution includes HTML versions of the User and
+Developer's manual.  Unfortunately, doing a `make clean' will erase
+them.  This is due to a limitation of automake which is not easily
+fixed.  If makeinfo is installed they can easily be rebuild with `make
+aspell.html aspell-dev.html', or you can unpack them from the tarbar.
+
+A.3 Curses Notes
+================
+
+If you are having problems compiling `check_funs.cpp' then the most
+likely reason is due to incompatibilities with the curses
+implementation on your system.  You should first try disabling the
+"wide" curses library by with the `--disable-wide-curses' configure
+option..  By doing so you will lose support for properly displaying
+UTF-8 characters but you may still be able to get the full screen
+interface.  If this fails than you can disable curses support
+altogether with the `--disable-curses' configure option.  By doing this
+you will lose the nice full screen interface but hopefully you will be
+able to at least get Aspell to compile correctly.
+
+   If the curses library is installed in a non-standard location than
+you can specify the library and include directory with
+`--enable-curses=LIB' and `--enable-curses-include=DIR'.
+
+   `LIB' can either be the complete path of the library--for example
+     /usr/local/curses/libcurses.a
+   or the name of the library (for example `ncurses') or a combined
+location and library in the form `-LLIBDIR -lLIB' (for example
+`-L/usr/local/ncurses/lib -lncurses').
+
+   DIR is the location of the curses header files (for example
+`/usr/local/ncurses/include').
+
+A.3.1 Unicode Support
+---------------------
+
+In order for Aspell to correctly spell check UTF-8 documents in full
+screen mode the "wide" version of the curses library must be installed.
+This is different from the normal version of curses library, and is
+normally named `libcursesw' (with a `w' at the end) or `libncursesw'.
+UTF-8 documents will not display correctly without the right curses
+version installed.
+
+   In addition your system must also support the `mblen' function.
+Although this function was defined in the ISO C89 standard (ANSI
+X3.159-1989), not all systems have it.
+
+A.4 Loadable Filter Notes
+=========================
+
+Support for being able to load additional filter modules at run-time
+has only been verified to work on Linux platforms.  If you get linker
+errors when trying to use a filter, then it is likely that loadable
+filter support is not working yet on your platform.  Thus, in order to
+get Aspell to work correctly you will need to avoid compiling the
+filters as individual modules by using the
+`--enable-compile-in-filters' when configuring Aspell with
+`./configure'.
+
+A.5 Upgrading from Aspell 0.50
+==============================
+
+The dictionary format has changed so dictionaries will need to be
+recompiled.
+
+   All data, by default, is now included in `LIBDIR/aspell-0.60' so
+that multiple versions of Aspell can more peacefully coexist.  This
+included both the dictionaries and the language data files which were
+stored in `SHAREDIR/aspell' before Aspell 0.60.
+
+   The format of the character data files has changed.  The new
+character data files are installed with Aspell so you should not have
+to worry about it unless you made a custom one.
+
+   The dictionary option `strip-accents' has been removed.  For this
+reason the old English dictionary (up to 0.51) will no longer work.  A
+new English dictionary is now available which avoids using this option.
+In addition the `ignore-accents' option is currently unimplemented.
+
+   The flag `-l' is now a shortcut for `--lang', instead of `--list' as
+it was with Aspell 0.50.
+
+A.5.1 Binary Compatibility
+--------------------------
+
+The Aspell 0.60 library is binary compatible with the Aspell 0.50
+library.  For this reason I chose _not_ to increment the major version
+number (so-name) of the shared library by default which means programs
+that were compiled for Aspell 0.50 will also work for Aspell 0.60.
+However, this means that having both Aspell 0.50 and Aspell 0.60
+installed at the same time can be pragmatic.  If you wish to allow both
+Aspell 0.50 and 0.60 to be installed at the same time then you can use
+the configure option `--incremented-soname' which will increment
+so-name.  You should only use this option if you know what you are
+doing.  It is up to you to somehow ensure that both the Aspell 0.50 and
+0.60 executables can coexist.
+
+   If after incrementing the so-name you wish to allow programs compiled
+for Aspell 0.50 to use Aspell 0.60 instead (thus implying that Aspell
+0.50 is not installed) then you can use a special compatibility library
+which can be found in the `lib5' directory.  This directory will not be
+entered when building or installing Aspell so you must manually build
+and install this library.  You should build it after the rest of Aspell
+is built.  The order in which this library is installed, with relation
+to the rest of Aspell, is also important.  If it is installed _after_
+the rest of Aspell then new programs will link to the old library
+(which will work for Aspell 0.50 or 0.60) when built, if installed
+_before_, new programs will link with the new library (Aspell 0.60
+only).
+
+A.6 Upgrading from Aspell .33/Pspell .12
+========================================
+
+Aspell has undergone an extremely large number of changes since the
+previous Aspell/Pspell release.  For one thing Pspell has been merged
+with Aspell so there in no longer two separate libraries you have to
+worry about.
+
+   Because of the massive changes between Aspell/Pspell and Aspell 0.50
+you may want to clean out the old files before installing the the new
+Aspell.  To do so do a `make uninstall' in the original Aspell and
+Pspell source directories.
+
+   The way dictionaries are handled has also changed.  This includes a
+change in the naming conventions of both language names and
+dictionaries.  Due to the language name change, your old personal
+dictionaries will not be recognized.  However, you can import the old
+dictionaries by running the `aspell-import' script.  This also means
+that dictionaries designed to work with older versions of Aspell are
+not likely to function correctly.  Fortunately new dictionary packages
+are available for most languages.  You can find them off of the Aspell
+home page at `http://aspell.net'.
+
+   The Pspell ABI is now part of Aspell except that the name of
+everything has changed due to the renaming of Pspell to Aspell.  In
+particular please note the following name changes:
+
+     pspell -> aspell
+     manager -> speller
+     emulation -> enumeration
+     master_word_list -> main_word_list
+
+   Please also note that the name of the `language-tag' option has
+changed to `lang'.  However, for backward compatibility the
+`language-tag' option will still work.
+
+   However, you should also be able to build applications that require
+Pspell with the new Aspell as a backward compatibility header file is
+provided.
+
+   Due to a change in the way dictionaries are handled, scanning for
+`.pwli' files in order to find out which dictionaries are available
+will no longer work.  This means that programs that relied on this
+technique may have problems finding dictionaries.  Fortunately, GNU
+Aspell now provided a uniform way to list all installed dictionaries
+via the c API.  See the file `list-dicts.c' in the `examples/'
+directory for an example of how to do this.  Unfortunately there isn't
+any simple way to find out which dictionaries are installed which will
+work with both the old Aspell/Pspell and the new GNU Aspell.
+
+A.7 Upgrading from a Pre-0.50 snapshot
+======================================
+
+At the last minute I decided to merge the `speller-util' program into
+the main `aspell' program.  You may wish to remove that `speller-util'
+program to avoid confusion.  This also means that dictionaries designed
+to work with the snapshot will no longer work with the official release.
+
+A.8 WIN32 Notes
+===============
+
+A.8.1 Getting the WIN32 version
+-------------------------------
+
+The latest version of the native Aspell/WIN32 port, including binaries,
+can be found at `http://aspell.net/win32'.  This page has,
+unfortunately, not been updated for Aspell 0.60.  If you are interested
+in updated the native port please let me know.
+
+A.8.2 Building the WIN32 version
+--------------------------------
+
+There are two basically different ways of building Aspell using GCC for
+WIN32: You can either use the Cygwin compiler, which will produce
+binaries that depend on the POSIX layer in `cygwin1.dll'.  The other
+way is using MinGW GCC, those binaries use the native C runtime from
+Microsoft (MSVCRT.DLL).
+
+A.8.2.1 Building Aspell using Cygwin
+....................................
+
+This works exactly like on other POSIX compatible systems using the
+`./configure && make && make install' cycle.  Some versions of Cygwin
+GCC will fail to link, this is caused by an incorrect `libstdc++.la' in
+the `/lib' directory.  After removing or renaming this file, the build
+progress should work (GCC-2.95 and GCC-3.x should work).
+
+A.8.2.2 Building Aspell using MinGW
+...................................
+
+There are several different ways to build Aspell using MinGW.  The
+easiest way is to use a Cygwin compiler but instruct it to build a
+native binary rather than a Cygwin one.  To do this configure with:
+
+     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin'
+
+   You may also want to add the option `--enable-win32-relocatable' to
+use more windows friendly directories.  *Note Win32-Directories::.  In
+this case configure with:
+
+     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin' --enable-win32-relocatable
+
+   It should also be possible to build Aspell using the MSYS
+environment.  But this has not been very well tested.  If building with
+MSYS _do not_ add `CFLAGS ...' to configure.
+
+A.8.2.3 Building Aspell without using Cygwin or MSYS
+....................................................
+
+It is also possible to build Aspell without Cygwin of MinGW by using
+the files in the `win32/' subdirectory.  However, these files have not
+been updated to work with Aspell 0.60.  Thus the following instructions
+will not work without some effort.  If you do get Aspell to compile
+this way please send me the updated files so that I can include them
+with the next release.
+
+   To compile Aspell with the MinGW compiler, you will need at least
+GCC-3.2 (as shipped with MinGW-2.0.3) and some GNU tools like `rm' and
+`cp'.  The origin of those tools doesn't matter, it has shown to work
+with any tools from MinGW/MSys, Cygwin or Linux.  To build Aspell, move
+into the `win32' subdirectory and type `make'.  You can enable some
+additional build options by either commenting out the definitions at
+the head of the Makefile or passing those values as environment
+variables or at the `make' command line.  Following options are
+supported:
+
+`DEBUGVERSION'
+     If set to "1", the binaries will include debugging information
+     (resulting in a much bigger size).
+
+`CURSESDIR'
+     Enter the path to the pdcurses library here, in order to get a
+     nicer console interface (see below).
+
+`MSVCLIB'
+     Enter the filename of MS `lib.exe' here, if you want to build
+     libraries that can be imported from MS Visual C++.
+
+`WIN32_RELOCATABLE'
+     If set to "1", Aspell will detect the prefix from the path where
+     the DLL resides (see below for further details).
+
+`TARGET'
+     Sets a prefix to be used for cross compilation (e.g.
+     `/usr/local/bin/i586-mingw32msvc-' to cross compile from Linux).
+
+   There are also a MinGW compilers available for Cygwin and Linux, both
+versions are able to compile Aspell using the prebuilt `Makefile'.
+While the Cygwin port automatically detects the correct compiler, the
+Linux version depends on setting the `TARGET' variable in the
+`Makefile' (or environment) to the correct compiler prefix.
+
+   Other compilers may work.  There is a patch for MS Visual C++ 6.0
+available at `ftp://ftp.gnu.org/gnu/aspell', but it needs a lot of
+changes to the Aspell sources.  It has also been reported that the
+Intel C++ compiler can be used for compilation.
+
+A.8.3 (PD)Curses
+----------------
+
+In order to get the nice full screen interface when spell checking
+files, a curses implementation that does not require Cygwin is
+required.  The PDCurses (`http://pdcurses.sourceforge.net')
+implementation is known to work, other implementations may work however
+they have not been tested.  See the previous section for information on
+specifying the location of the curses library and include file.
+
+   Curses notes:
+
+   * PDcurses built with MinGW needs to be compiled with
+     `-DPDC_STATIC_BUILD' to avoid duplicate declaration of `DllMain'
+     when compiling `aspell.exe'.
+
+   * The curses enabled version can cause trouble in some shells (MSys
+     `rxvt', `emacs') and will produce errors like `initscr() LINES=1
+     COLS=1: too small'.  Use a non-curses version for those purposes.
+
+A.8.4 Directories
+-----------------
+
+If Aspell is configured with `--enable-win32-relocatable' or compiled
+with `WIN32_RELOCATABLE=1' when using a Makefile, it can be run from
+any directory: it will set `PREFIX' according to its install location
+(assuming it resides in `PREFIX\\bin').  Your personal wordlists will
+be saved in the `PREFIX' directory with their names changed from
+`.aspell.LANG.*' to `LANG.*' (you can override the path by setting the
+`HOME' environment variable).
+
+A.8.5 Installer
+---------------
+
+The installer registers the DLLs as shared libraries, you should
+increase the reference counter to avoid the libraries being uninstalled
+if your application still depends on them (and decrease it again when
+uninstalling your program).  The reference counters are located under:
+     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
+
+   The install location and version numbers are stored under
+
+     HKLM\SOFTWARE\Aspell
+
+A.8.6 WIN32 consoles
+--------------------
+
+The console uses a different encoding than GUI applications, changing
+this to to a Windows encoding (e.g.  1252) is not supported on
+Win9x/Me.  On WinNT (and later) those codepages can be set by first
+changing the console font to `lucida console', then changing the
+codepage using `chcp 1252'.
+
+   Some alternative shells (e.g. MSys' `rxvt' or Cygwin's `bash') do a
+codepage conversion (if correctly set up), so running Aspell inside
+those shells might be a workaround for Win9x.
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..1126a89
--- /dev/null
+++ b/TODO
@@ -0,0 +1,5 @@
+Consider adding support for recognizing options translated in a
+  different language.
+
+
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..85054ab
--- /dev/null
@@ -0,0 +1,993 @@
+# generated automatically by aclocal 1.10.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.61],,
+[m4_warning([this file was generated for autoconf 2.61.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10.3], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.3])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/codeset.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/progtest.m4])
diff --git a/auto/Makefile.in b/auto/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/auto/MkSrc/CcHelper.pm b/auto/MkSrc/CcHelper.pm
new file mode 100644 (file)
index 0000000..e814a1a
--- /dev/null
@@ -0,0 +1,339 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::CcHelper;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(to_c_return_type c_error_cond
+                  to_type_name make_desc make_func call_func
+                  make_c_method call_c_method form_c_method
+                  make_cxx_method);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::Type;
+
+sub to_type_name ( $ $ ; \% );
+
+=head1 Code Generation Modes
+
+The code generation modes are currently one of the following:
+
+  cc: Mode used to create types suitable for C interface
+  cc_cxx: Like cc but typenames don't have a leading Aspell prefix
+  cxx: Mode used to create types suitable for CXX interface
+  native: Mode in which types are suitable for the internal implementation
+  native_no_err: Like Native but with out PosibErr return types
+
+=head1 MkSrc::CcHelper
+
+Helper functions used by interface generation code:
+
+=over
+
+=item to_c_return_type ITEM
+
+.
+
+=cut
+
+sub to_c_return_type ( $ ) {
+  my ($d) = @_;
+  return $d->{type} unless exists $d->{'posib err'};
+  return 'int' if one_of $d->{type}, ('void', 'bool', 'unsigned int');
+  return $d->{type};
+}
+
+=item c_error_cond ITEM
+
+.
+
+=cut
+
+sub c_error_cond ( $ ) {
+  my ($d) = @_;
+  die unless exists $d->{'posib err'};
+  return '-1' if one_of $d->{type}, ('bool', 'unsigned int', 'int');
+  return '0';
+}
+
+=item make_func NAME @TYPES PARMS ; %ACCUM
+
+Creates a function prototype
+
+Parms can be any of:
+
+  mode: code generation mode
+
+=cut
+
+sub make_func ( $ \@ $ ; \% ) {
+  my ($name, $d, $p, $accum) = @_;
+  $accum = {} unless defined $accum;
+  my @d = @$d;
+  return (join '', 
+         (to_type_name(shift @d, {%$p,pos=>'return'}, %$accum),
+          ' ',
+          to_lower $name,
+          '(',
+          (join ', ', map {to_type_name $_, {%$p,pos=>'parm'}, %$accum} @d),
+          ')'));
+}
+
+=item call_func NAME @TYPES PARMS ; %ACCUM
+
+Return a string to call a func.  Will prefix the function with return
+if the functions returns a non-void type;
+
+Parms can be any of:
+
+  mode: code generation mode
+
+=cut
+
+sub call_func ( $ \@ $ ; \% ) {
+  my ($name, $d, $p, $accum) = @_;
+  $accum = {} unless defined $accum;
+  my @d = @$d;
+  my $func_ret = to_type_name(shift @d, {%$p,pos=>'return'}, %$accum);
+  return (join '',
+         (($func_ret eq 'void' ? '' : 'return '),
+          to_lower $name,
+          '(',
+          (join ', ', map {to_type_name $_, 
+                           {%$p,pos=>'parm',use_type=>false}, %$accum} @d),
+          ')'));
+}
+
+=item to_type_name ITEM PARMS ; %ACCUM
+
+Converts item into a type name.
+
+Parms can be any of:
+
+  mode: code generation mode
+  use_type: include the actual type
+  use_name: include the name on the type
+  pos: either "return" or "other"
+
+=cut
+
+sub to_type_name ( $ $ ; \% ) {
+  my ($d, $p, $accum) = @_;
+  $accum = {} unless defined $accum;
+
+  my $mode = $p->{mode};
+  die unless one_of $mode, qw(cc cc_cxx cxx native native_no_err);
+  my $is_cc = one_of $mode, qw(cc cc_cxx cxx);
+  my $is_native = one_of $mode, qw(native native_no_err);
+
+  my $pos  = $p->{pos};
+  my $t = finalized_type($pos eq 'return' && $is_cc
+                        ? to_c_return_type $d
+                        : $d->{type});
+  $p->{use_type} = true    unless exists $p->{use_type};
+  $p->{use_name} = true    unless exists $p->{use_name};
+  $p->{pos}      = 'other' unless exists $p->{pos};
+
+  my $name = $t->{name};
+  my $type = $t->{type};
+
+  return ( (to_type_name {%$d, type=>'string'}, $p, %$accum) ,
+          (to_type_name {%$d, type=>'int', name=>"$d->{name}_size"}, $p, %$accum) )
+      if $name eq 'encoded string' && $is_cc && $pos eq 'parm';
+
+  my $str;
+
+  if ($p->{use_type}) 
+  {
+    $str .= "const " if $t->{const};
+
+    if ($name eq 'string') {
+      if ($is_native && $pos eq 'parm') {
+       $accum->{headers}{'parm string'} = true;
+       $str .= "ParmString";
+      } else {
+       $str .= "const char *";
+      }
+    } elsif ($name eq 'string obj') {
+      die unless $pos eq 'return';
+      if ($is_cc) {
+       $str .= "const char *";
+      } else {
+       $accum->{headers}{'string'} = true;
+       $str .= "String";
+      }
+    } elsif ($name eq 'encoded string') {
+      $str .= "const char *";
+    } elsif ($name eq '') {
+      $str .= "void";
+    } elsif ($name eq 'bool' && $is_cc) {
+      $str .= "int";
+    } elsif ($type eq 'basic') {
+      $str .= $name;
+    } elsif (one_of $type, qw(enum class struct union)) {
+      my $c_type = $type eq 'class' ? 'struct' : $type;
+      if ($t->{pointer}) {
+       $accum->{types}->{$name} = $t;
+      } else {
+       $accum->{headers}->{$t->{created_in}} = true;
+      }
+      $str .= "$c_type Aspell" if $mode eq 'cc';
+      $str .= to_mixed($name);
+    } else {
+      print STDERR "Warning: Unknown Type: $name\n";
+      $str .= "{unknown type: $name}";
+    }
+
+    if ($t->{pointer} && $type eq 'class' && $mode eq 'cxx') {
+      $str .= "Ptr";
+    } elsif ($t->{pointer}) {
+      $str .= " *";
+    }
+
+  }
+
+  if (defined $d->{name} && $p->{use_name})
+  {
+    $str .= " " unless $str eq '';
+    $str .= to_lower($d->{name});
+  }
+
+  $str .= "[$t->{array}]" if $t->{array} && $p->{use_type};
+
+  return $str;
+}
+
+=item make_desc DESC ; LEVEL
+
+Make a C comment out of DESC optionally indenting it LEVEL spaces.
+
+=cut
+
+sub make_desc ( $ ; $ ) {
+  my ($desc, $indent) = @_;
+  return '' unless defined $desc;
+  my @desc = split /\n/, $desc;
+  $indent = 0 unless defined $indent;
+  $indent = ' 'x$indent;
+  return ("$indent/* ".
+         join("\n$indent * ", @desc).
+         " */\n");
+}
+
+=item make_c_method CLASS ITEM PARMS ; %ACCUM
+
+Create the phototype for a C method which is really a function.
+
+Parms is any of:
+
+  mode: code generation mode
+  no_aspell: if true do not include aspell in the name
+  this_name: name for the paramater representing the current object
+
+=item call_c_method CLASS ITEM PARMS ; %ACCUM
+
+Like make_c_method but instead returns the appropriate string to call
+the function.  If the function returns a non-void type the string will
+be prefixed with a return statement.
+
+=item form_c_method CLASS ITEM PARMS ; %ACCUM
+
+Like make_c_method except that it returns the array:
+
+  ($func, $data, $parms, $accum)
+
+which is suitable for passing into make_func.  It will return an 
+empty array if it can not make a method from ITEM.
+
+=cut
+
+sub form_c_method ($ $ $ ; \% ) 
+{
+  my ($class, $d, $p, $accum) = @_;
+  $accum = {} unless defined $accum;
+  my $mode = $p->{mode};
+  my $this_name = defined $p->{this_name} ? $p->{this_name} : 'ths';
+  my $name = $d->{name};
+  my $func = '';
+  my @data = ();
+  @data = @{$d->{data}} if defined $d->{data};
+  if ($d->{type} eq 'constructor') {
+    if (defined $name) {
+      $func = $name;
+    } else {
+      $func = "new aspell $class";
+    }
+    splice @data, 0, 0, {type => $class} unless exists $d->{'returns alt type'};
+  } elsif ($d->{type} eq 'destructor') {
+    $func = "delete aspell $class";
+    splice @data, 0, 0, ({type => 'void'}, {type=>$class, name=>$this_name});
+  } elsif ($d->{type} eq 'method') {
+    if (exists $d->{'c func'}) {
+      $func = $d->{'c func'};
+    } elsif (exists $d->{'prefix'}) {
+      $func = "$d->{prefix} $name";
+    } else {
+      $func = "aspell $class $name";
+    }
+    if (exists $d->{'const'}) {
+      splice @data, 1, 0, {type => "const $class", name=> $this_name};
+    } else {
+      splice @data, 1, 0, {type => "$class", name=> $this_name};
+    }
+  } else {
+    return ();
+  }
+  $func = "aspell $func" unless $func =~ /aspell/;
+  $func =~ s/aspell\ ?// if exists $p->{no_aspell};
+  return ($func, \@data, $p, $accum);
+}
+
+sub make_c_method ($ $ $ ; \%)
+{
+  my @ret = &form_c_method(@_);
+  return undef unless @ret > 0;
+  return &make_func(@ret);
+}
+
+sub call_c_method ($ $ $ ; \%)
+{
+  my @ret = &form_c_method(@_);
+  return undef unless @ret > 0;
+  return &call_func(@ret);
+}
+
+=item make_cxx_method ITEM PARMS ; %ACCUM
+
+Create the phototype for a C++ method.
+
+Parms is one of:
+
+  mode: code generation mode
+
+=cut
+
+sub make_cxx_method ( $ $ ; \% ) {
+  my ($d, $p, $accum) = @_;
+  my $ret;
+  $ret .= make_func $d->{name}, @{$d->{data}}, $p, %$accum;
+  $ret .= " const" if exists $d->{const};
+  return $ret;
+}
+
+=back
+
+=cut
+
+
+1;
diff --git a/auto/MkSrc/Create.pm b/auto/MkSrc/Create.pm
new file mode 100644 (file)
index 0000000..e467a10
--- /dev/null
@@ -0,0 +1,109 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Create;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(create_cc_file create_file);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::Info;
+
+=head1 MKSrc::Create
+
+=over
+
+=item create_cc_file PARMS
+
+Create a source file.
+
+  Required Parms: type, dir, name, data
+   Boolean Parms: header, cxx
+  Optional Parms: namespace (required if cxx), pre_ext, accum
+
+=item create_file FILENAME DATA
+
+Writes DATA to FILENAME but only if DATA differs from the content of
+the file and the string:
+
+    Automatically generated file.
+
+is present in the existing file if it already exists.
+
+=back
+
+=cut
+
+sub create_cc_file ( % );
+
+sub create_file ( $ $ );
+
+sub create_cc_file ( % )  {
+  my (%p) = @_;
+  $p{name} = $p{data}{name} unless exists $p{name};
+  $p{ext} = $p{cxx} ? ($p{header} ? 'hpp' : 'cpp') : 'h';
+  my $body;
+  my %accum = exists $p{accum} ? (%{$p{accum}}) : ();
+  foreach my $d (@{$p{data}{data}}) {
+    next unless exists $info{$d->{type}}{proc}{$p{type}};
+    $body .= $info{$d->{type}}{proc}{$p{type}}->($d, \%accum);
+  }
+  return unless length($body) > 0;
+  my $file = <<'---';
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+---
+  my $hm = "ASPELL_". to_upper($p{name})."__".to_upper($p{ext});
+  $file .= "#ifndef $hm\n#define $hm\n\n" if $p{header};
+  $file .= "#include \"aspell.h\"\n" if $p{type} eq 'cxx';
+  $file .= "#include \"settings.h\"\n" if $p{type} eq 'native_impl' && $p{name} eq 'errors';
+  $file .= "#include \"gettext.h\"\n" if $p{type} eq 'native_impl' && $p{name} eq 'errors';
+  $file .= cmap {"#include \"".to_lower($_).".hpp\"\n"} sort keys %{$accum{headers}};
+  $file .= "#ifdef __cplusplus\nextern \"C\" {\n#endif\n" if $p{header} && !$p{cxx};
+  $file .= "\nnamespace $p{namespace} {\n\n" if $p{cxx};
+  if (defined $info{forward}{proc}{$p{type}}) {
+    my @types = sort {$a->{name} cmp $b->{name}} (values %{$accum{types}});
+    $file .= cmap {$info{forward}{proc}{$p{type}}->($_)} @types;
+  }
+  $file .= "\n";
+  $file .= $body;
+  $file .= "\n\n}\n\n" if $p{cxx};
+  $file .= "#ifdef __cplusplus\n}\n#endif\n" if $p{header} && !$p{cxx};
+  $file .= "#endif /* $hm */\n" if $p{header};
+  create_file $p{dir}.'/'.to_lower($p{name}).$p{pre_ext}.'.'.$p{ext}, $file;
+}
+
+sub create_file ( $ $ ) {
+  my ($filename, $to_write) = @_;
+  local $/ = undef;
+  my $existing = '';
+  open F,"../$filename" and $existing=<F>;
+  if ($to_write eq $existing) {
+    print "File \"$filename\" unchanged.\n";
+  } elsif (length $existing > 0 && $existing !~ /Automatically generated file\./) {
+    print "Will not write over \"$filename\".\n";
+  } else {
+    print "Creating \"$filename\".\n";
+    open F, ">../$filename" or die;
+    print F $to_write;
+  }
+}
+
+1;
diff --git a/auto/MkSrc/Info.pm b/auto/MkSrc/Info.pm
new file mode 100644 (file)
index 0000000..5d30ec5
--- /dev/null
@@ -0,0 +1,161 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Info;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(%info %types %methods);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+=head1 MkSrc::Info
+
+=head2 %info
+
+The info array contains information on how to process the info in 
+mk-src.pl.  It has the following layout
+
+   <category> => options => [] 
+                 groups => [] # if undef than anything is accepted
+                 creates_type => "" # the object will create a new type
+                                    # as specified
+                 proc => <impl type> => sub {}
+
+where <impl type> is one of:
+
+  cc: for "aspell.h" header file
+  cxx: for C++ interface implemented on top of cc interface
+  native: for creation of header files used internally by aspell
+  impl: for definition of functions declared in cc interface.
+        the definitions use the native header files
+  native_impl: for implementations of stuff declared in the native
+                header files
+
+each proc sub should take the following argv
+
+   $data: a subtree of $master_data
+   $accum: 
+
+<options> is one of:
+
+  desc: description of the object
+  prefix:
+  posib err: the method may return an error condition
+  c func:
+  const: the method is a const member
+  c only: only include in the external interface
+  c impl headers: extra headers that need to be included in the C impl
+  c impl: use this as the c impl instead of the default
+  cxx impl: use this as the cxx impl instead of the default
+  returns alt type: the constructor returns some type other than
+    the object from which it is a member of
+  no native: do not attemt to create a native implementation
+  treat as object: treat as a object rather than a pointer
+
+The %info structure is initialized as follows:
+
+=cut
+
+#pod
+ our %info =
+ (
+  root => { 
+    options => [],
+    groups => ['methods', 'group']},
+  methods => {
+    # methods is a collection of methods which will be inserted into
+    # a class after some simple substation rules.  A $ will be
+    # replaced with name of the class.
+    options => ['strip', 'prefix', 'c impl headers'],
+    groups => undef},
+  group => {
+    # a group is a colection of objects which should be grouped together
+    # this generally means they will be in the same source file
+    options => ['no native'],
+    groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
+  enum => {
+    # basic C enum
+    options => ['desc', 'prefix'],
+    creates_type => 'enum'},
+  struct => {
+    # basic c struct
+    options => ['desc', 'treat as object'],
+    groups => undef,
+    creates_type => 'struct',},
+  union => {
+    # basic C union
+    options => ['desc', 'treat as object'],
+    groups => undef,
+    creates_type => 'union'},
+  class => {
+    # C++ class
+    options => ['c impl headers'],
+    groups => undef,
+    creates_type => 'class'},
+  errors => {}, # possible errors
+  method => {
+    # A class method
+    options => ['desc', 'posib err', 'c func', 'const',
+               'c only', 'c impl', 'cxx impl'],
+    groups => undef},
+  constructor => {
+    # A class constructor
+    options => ['returns alt type', 'c impl', 'desc'],
+    groups => 'types'},
+  destructor => {
+    # A class destructor
+    options => [],
+    groups => undef},
+  );
+#cut
+
+=pod
+
+In addition to the categories listed above a "methods" catagory by
+be specified in under the class category.  A "methods" catagory is
+created for each methods group under the name "<methods name> methods"
+When groups is undefined a type name may be specified in place of
+a category
+
+=head2 %types
+
+types contains a master list of all types.  This includes basic types
+and ones created in mk-src.in. The basic types include:
+
+=cut
+
+my @types = 
+    (
+#pod
+     'void', 'bool', 'pointer', 'double',
+     'string', 'encoded string', 'string obj',
+     'char', 'unsigned char',
+     'short', 'unsigned short',
+     'int', 'unsigned int',
+     'long', 'unsigned long'
+#cut
+     );
+
+our %types;
+use MkSrc::Type;
+foreach my $t (@types) {
+  update_type $t, {type=>'basic'}}
+
+=head2 %methods
+
+%methods is used for holding the "methods" information
+
+=cut
+
+our %methods;
+    
+1;
diff --git a/auto/MkSrc/Methods.pm b/auto/MkSrc/Methods.pm
new file mode 100644 (file)
index 0000000..b8587dc
--- /dev/null
@@ -0,0 +1,58 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Methods;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(copy_methods);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Info;
+
+sub copy_n_sub ( $ $ );
+sub copy_methods ( $ $ $ ) {
+  my ($d, $data, $class_name) = @_;
+  my $ms = $methods{$d->{type}};
+  if (not defined $d->{name}) {
+    $d->{name} = $class_name;
+    $d->{name} =~ s/ [^ ]+$// if $ms->{strip} == 1;
+  }
+  my @lst;
+  if (defined $ms->{'c impl headers'}) {
+    $data->{'c impl headers'} .= ",$ms->{'c impl headers'}";
+  }
+  foreach my $m (@{$ms->{data}}) {
+    push @lst, copy_n_sub($m, $d->{name});
+    $lst[-1]{prefix} = $m->{prefix} if exists $d->{prefix};
+  }
+  return @lst
+}
+
+sub copy_n_sub ( $ $ ) {
+  my ($d, $name) = @_;
+  my $new_d = {};
+  foreach my $k (keys %$d) {
+    if ($k eq 'data') {
+      $new_d->{data} = [];
+      foreach my $d0 (@{$d->{data}}) {
+       push @{$new_d->{data}}, copy_n_sub($d0, $name);
+      }
+    } else {
+      $new_d->{$k} = $d->{$k};
+      $new_d->{$k} =~ s/\$/$name/g unless ref $new_d->{$k};
+    }
+  }
+  return $new_d;
+}
+
+1;
diff --git a/auto/MkSrc/ProcCc.pm b/auto/MkSrc/ProcCc.pm
new file mode 100644 (file)
index 0000000..47c4338
--- /dev/null
@@ -0,0 +1,129 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::ProcCc;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::CcHelper;
+use MkSrc::Info;
+
+sub make_c_object ( $ @ );
+
+$info{group}{proc}{cc} = sub {
+  my ($data) = @_;
+  my $ret;
+  my $stars = (70 - length $data->{name})/2;
+  $ret .= "/";
+  $ret .= '*'x$stars;
+  $ret .= " $data->{name} ";
+  $ret .= '*'x$stars;
+  $ret .= "/\n";
+  foreach my $d (@{$data->{data}}) {
+    $ret .= "\n\n";
+    $ret .= $info{$d->{type}}{proc}{cc}->($d);
+  }
+  $ret .= "\n\n";
+  return $ret;
+};
+
+$info{enum}{proc}{cc} = sub {
+  my ($d) = @_;
+  my $n = "Aspell".to_mixed($d->{name});
+  return ("\n".
+         make_desc($d->{desc}).
+         "enum $n {" .
+         join(', ',
+              map {"Aspell".to_mixed($d->{prefix}).to_mixed($_->{type})}
+              @{$d->{data}}).
+         "};\n" .
+         "typedef enum $n $n;\n"
+         );
+};
+
+$info{struct}{proc}{cc} = sub {
+  return make_c_object "struct", @_;
+};
+
+$info{union}{proc}{cc} = sub {
+  return make_c_object "union", $_[0];
+};
+
+$info{class}{proc}{cc} = sub {
+  my ($d) = @_;
+  my $class = $d->{name};
+  my $classname = "Aspell".to_mixed($class);
+  my $ret = "";
+  $ret .= "typedef struct $classname $classname;\n\n";
+  foreach (@{$d->{data}}) {
+    my $s = make_c_method($class, $_, {mode=>'cc'});
+    next unless defined $s;
+    $ret .= "\n";
+    $ret .= make_desc($_->{desc});
+    $ret .= make_c_method($class, $_, {mode=>'cc'}).";\n";
+  }
+  $ret .= "\n";
+  return $ret;
+};
+
+$info{func}{proc}{cc} = sub {
+  my ($d) = @_;
+  return (make_desc($d->{desc}).
+          make_func("aspell ".$d->{name}, @{$d->{data}}, {mode => 'cc'}).';');
+};
+
+$info{errors}{proc}{cc} = sub {
+  my ($d) = @_;
+  my $p;
+  my $ret;
+  $p = sub {
+    my ($level, $data) = @_;
+    return unless defined $data;
+    foreach my $d (@$data) {
+      $ret .= "extern const struct AspellErrorInfo * const ";
+      $ret .= ' 'x$level;
+      $ret .= "aerror_";
+      $ret .= to_lower($d->{type});
+      $ret .= ";\n";
+      $p->($level + 2, $d->{data});
+    }
+  };
+  $p->(0, $d->{data});
+  return $ret;
+};
+
+sub make_c_object ( $ @ ) {
+  my ($t, $d) = @_;
+  my $struct;
+  $struct .= "Aspell";
+  $struct .= to_mixed($d->{name});
+  return (join "\n\n", grep {$_ ne ''}
+         join ('',
+               "$t $struct {\n",
+               (map {"\n".make_desc($_->{desc},2).
+                         "  ".to_type_name($_, {mode=>'cc'}). ";\n"}
+                grep {$_->{type} ne 'method'
+                          && $_->{type} ne 'cxx constructor'}
+                @{$d->{data}}),
+               "\n};\n"),
+         "typedef $t $struct $struct;",
+         join ("\n",
+               map {make_c_method($d->{name}, $_, {mode=>'cc'}).";"}
+               grep {$_->{type} eq 'method'}
+               @{$d->{data}})
+         )."\n";
+}
+
+1;
diff --git a/auto/MkSrc/ProcCxx.pm b/auto/MkSrc/ProcCxx.pm
new file mode 100644 (file)
index 0000000..1fc610b
--- /dev/null
@@ -0,0 +1,164 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::ProcCxx;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(%info %types %methods);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::CcHelper;
+use MkSrc::Info;
+
+$info{forward}{proc}{cxx} = sub {
+  my ($type) = @_;
+  my $n = to_mixed($_->{name});
+  if ($type->{type} eq 'class') {
+    return "typedef Aspell$n * ${n}Ptr;\n";
+  } elsif (one_of $type->{type}, 'struct', 'union') {
+    return "typedef Aspell$n $n;\n";
+  } else {
+    return "";
+  }
+};
+
+$info{group}{proc}{cxx} = sub {
+  my ($data, $accum) = @_;
+  my $str;
+  foreach my $d (@{$data->{data}}) {
+    my $s = $info{$d->{type}}{proc}{cxx}->($d, $accum);
+    $str .= "\n\n$s" if defined $s;
+  }
+  my $ret = "";
+  if (defined $str) {
+    my $stars = (70 - length $data->{name})/2;
+    $ret .= "/".('*'x$stars)." $data->{name} ".('*'x$stars)."/\n";
+    $ret .= $str;
+    $ret .= "\n\n";
+  }
+  return $ret;
+};
+
+$info{enum}{proc}{cxx} = sub {
+  my ($d) = @_;
+  my $n = to_mixed($d->{name});
+  return ("\n".
+         make_desc($d->{desc}).
+         "typedef Aspell$n $n;\n".
+         join('',
+              map {my $en = to_mixed($d->{prefix}).to_mixed($_->{type});
+                   "static const $n $en = Aspell$en;\n"}
+              @{$d->{data}})
+         );
+};
+
+$info{struct}{proc}{cxx} = sub {
+  my ($d, $accum) = @_;
+  my $n = to_mixed($d->{name});
+  $accum->{types}{$d->{name}} = $d;
+  return undef;
+};
+
+$info{union}{proc}{cxx} = sub {
+  my ($d, $accum) = @_;
+  my $n = to_mixed($d->{name});
+  $accum->{types}{$d->{name}} = $d;
+  return undef;
+};
+
+$info{class}{proc}{cxx} = sub {
+  my ($d, $accum) = @_;
+  my $class = $d->{name};
+  my $cn = to_mixed($class);
+  my $cl = to_lower($class);
+  my $cp = "${cn}Ptr";
+  $accum->{types}{$d->{name}} = $d;
+  my $ret;
+  $ret = <<"---";
+struct ${cn}Ref {
+  $cp ptr;
+  ${cn}Ref ($cp rhs) : ptr(rhs) {}
+};
+
+class $cn {
+  $cp ptr;
+public:
+
+  explicit $cn($cp p = 0) : ptr(p) {}
+
+  $cn($cn & other) : ptr (other.release()) {}
+  ~$cn() {del();}
+
+  $cn & operator=($cn & other) 
+    {reset(other.release()); return *this;}
+
+  $cp get()         const {return ptr;}
+  operator $cp ()   const {return ptr;}
+
+  $cp release () {$cp p = ptr; ptr = 0; return p;}
+
+  void del() {delete_aspell_$cl(ptr); ptr = 0;}
+  void reset($cp p) {assert(ptr==0); ptr = p;}
+  $cn & operator=($cp p) {reset(p); return *this;}
+  
+  $cn(${cn}Ref rhs) : ptr(rhs.ptr) {}
+
+  $cn& operator= (${cn}Ref rhs) {reset(rhs.ptr); return *this;}
+
+  operator ${cn}Ref() {return ${cn}Ref(release());}
+
+---
+  foreach (@{$d->{data}}) {
+    next unless $_->{type} eq 'method';
+    $ret .= "  ".make_cxx_method($_, {mode=>'cxx'})."\n";
+    $ret .= "  {\n";
+    $ret .= "    ".call_c_method($class, $_, {mode=>'cc', this_name=>'ptr'}).";\n";
+    $ret .= "  }\n\n";
+  }
+  $ret .= "};\n";
+  foreach (@{$d->{data}}) {
+    next unless $_->{type} eq 'constructor';
+    $ret .= "static inline ";
+    $ret .= make_c_method $class, $_, {mode=>'cxx', no_aspell=>true};
+    $ret .= "{\n";
+    $ret .= "  ".call_c_method($class, $_, {mode=>'cc'}).";\n";
+    $ret .= "}\n\n";
+  }
+  return $ret;
+};
+
+$info{errors}{proc}{cxx} = sub {
+  my ($d) = @_;
+  my $p;
+  my $ret;
+  $p = sub {
+    my ($level, $data) = @_;
+    return unless defined $data;
+    foreach my $d (@$data) {
+      $ret .= "static const ErrorInfo * const ";
+      $ret .= ' 'x$level;
+      $ret .= to_lower($d->{type});
+      $ret .= "_error" if defined $d->{data} || $level == 0;
+      $ret .= " = ";
+      $ret .= "aerror_";
+      $ret .= to_lower($d->{type});
+      $ret .= ";\n";
+      $p->($level + 2, $d->{data});
+    }
+  };
+  $p->(0, $d->{data});
+  return $ret;
+};
+
+1;
diff --git a/auto/MkSrc/ProcImpl.pm b/auto/MkSrc/ProcImpl.pm
new file mode 100644 (file)
index 0000000..b8628fd
--- /dev/null
@@ -0,0 +1,129 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::ProcImpl;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::CcHelper;
+use MkSrc::Info;
+use MkSrc::Create;
+
+$info{forward}{proc}{impl} = sub {
+  my ($type) = @_;
+  return "$type->{type} ".to_mixed($type->{name}).";\n";
+};
+
+$info{group}{proc}{impl} = sub {
+  my ($data) = @_;
+  create_cc_file (type => 'impl',
+                 cxx => true,
+                 namespace => 'acommon',
+                 dir => "lib",
+                 pre_ext => "-c",
+                 header => false,
+                 data => $data,
+                 accum => {headers => {$data->{name} => true} }
+                 );
+};
+
+$info{class}{proc}{impl} = sub {
+  my ($data, $accum) = @_;
+  my $ret;
+  foreach (grep {$_ ne ''} split /\s*,\s*/, $data->{'c impl headers'}) {
+    $accum->{headers}{$_} = true;
+  }
+  foreach my $d (@{$data->{data}}) {
+    next unless one_of $d->{type}, qw(method constructor destructor);
+    my @parms = @{$d->{data}} if exists $d->{data};
+    my $m = make_c_method $data->{name}, $d, {mode=>'cc_cxx', use_name=>true}, %$accum;
+    next unless defined $m;
+    $ret .= "extern \"C\" $m\n";
+    $ret .= "{\n";
+    if (exists $d->{'c impl'}) {
+      $ret .= cmap {"  $_\n"} split /\n/, $d->{'c impl'};
+    } else {
+      if ($d->{type} eq 'method') {
+       my $ret_type = shift @parms;
+       my $ret_native = to_type_name $ret_type, {mode=>'native_no_err', pos=>'return'}, %$accum;
+       my $snum = 0;
+       foreach (@parms) {
+         my $n = to_lower($_->{name});
+         if ($_->{type} eq 'encoded string') {
+           $accum->{headers}{'mutable string'} = true;
+           $accum->{headers}{'convert'} = true;
+           $ret .= "  ths->temp_str_$snum.clear();\n";
+           $ret .= "  ths->to_internal_->convert($n, ${n}_size, ths->temp_str_$snum);\n";
+           $ret .= "  unsigned int s$snum = ths->temp_str_$snum.size();\n";
+           $_ = "MutableString(ths->temp_str_$snum.mstr(), s$snum)";
+           $snum++;
+         } else {
+           $_ = $n;
+         }
+       }
+       my $parms = '('.(join ', ', @parms).')';
+       my $exp = "ths->".to_lower($d->{name})."$parms";
+       if (exists $d->{'posib err'}) {
+         $accum->{headers}{'posib err'} = true;
+         $ret .= "  PosibErr<$ret_native> ret = $exp;\n";
+         $ret .= "  ths->err_.reset(ret.release_err());\n";
+         $ret .= "  if (ths->err_ != 0) return ".(c_error_cond $ret_type).";\n";
+         if ($ret_type->{type} eq 'void') {
+           $ret_type = {type=>'special'};
+           $exp = "1";
+         } else {
+           $exp = "ret.data";
+         }
+       }
+       if ($ret_type->{type} eq 'string obj') {
+         $ret .= "  ths->temp_str = $exp;\n";
+         $exp = "ths->temp_str.c_str()";
+       } elsif ($ret_type->{type} eq 'encoded string') {
+         die; 
+         # This is not used and also not implemented right
+         $ret .= "  if (to_encoded_ != 0) (*to_encoded)($exp,temp_str_);\n";
+         $ret .= "  else                  temp_str_ = $exp;\n";
+         $exp = "temp_str_0.data()";
+       }
+       if ($ret_type->{type} eq 'const word list') {
+         $accum->{headers}{'word list'} = true;
+          $ret .= "  if (ret.data)\n";
+         $ret .= "    const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_;\n";
+       }
+       $ret .= "  ";
+       $ret .= "return " unless $ret_type->{type} eq 'void';
+       $ret .= $exp;
+       $ret .= ";\n";
+      } elsif ($d->{type} eq 'constructor') {
+       my $name = $d->{name} ? $d->{name} : "new $data->{name}";
+       $name =~ s/aspell\ ?//; # FIXME: Abstract this in a function
+       $name = to_lower($name);
+       shift @parms if exists $d->{'returns alt type'}; # FIXME: Abstract this in a function
+       my $parms = '('.(join ', ', map {$_->{name}} @parms).')';
+       $ret .= "  return $name$parms;\n";
+      } elsif ($d->{type} eq 'destructor') {
+       $ret .= "  delete ths;\n";
+      }
+    }
+    $ret .= "}\n\n";
+  }
+  return $ret;
+};
+
+$info{struct}{proc}{impl} = $info{class}{proc}{impl};
+
+$info{union}{proc}{impl} = $info{class}{proc}{impl};
+
+1;
diff --git a/auto/MkSrc/ProcNative.pm b/auto/MkSrc/ProcNative.pm
new file mode 100644 (file)
index 0000000..6d74e52
--- /dev/null
@@ -0,0 +1,182 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::ProcNative;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::CcHelper;
+use MkSrc::Info;
+use MkSrc::Create;
+use MkSrc::Type;
+
+sub make_native_obj ( $ @ );
+
+$info{forward}{proc}{native} = sub {
+  my ($type) = @_;
+  return "$type->{type} ".to_mixed($type->{name}).";\n";
+};
+
+$info{group}{proc}{native} = sub {
+  my ($data) = @_;
+  return if exists $data->{'no native'};
+  create_cc_file (type => 'native',
+                 cxx => true,
+                 namespace => 'acommon',
+                 dir => "common",
+                 header => true,
+                 data => $data);
+};
+
+$info{enum}{proc}{native} = sub {
+  my ($data) = @_;
+  my $n = to_mixed($data->{name});
+  return ("enum $n {" .
+         join (',',
+               map {to_mixed($data->{prefix}).to_mixed($_->{type})}
+               @{$data->{data}}).
+         "};\n");
+};
+
+
+$info{struct}{proc}{native} = sub {
+  return make_native_obj 'struct', @_;
+};
+
+$info{union}{proc}{native} = sub {
+  return make_native_obj 'union', @_;
+};
+
+$info{class}{proc}{native} = sub {
+  return make_native_obj 'class', @_;
+};
+
+$info{errors}{proc}{native} = sub {
+  my ($data, $accum) = @_;
+  my $ret;
+  $accum->{types}{"error info"} = finalized_type "error info";
+  my $p0;
+  $p0 = sub {
+    my ($level, $data) = @_;
+    return unless defined $data;
+    foreach my $d (@$data) {
+      $ret .= "extern \"C\" const ErrorInfo * const ";
+      $ret .= ' 'x$level;
+      $ret .= "aerror_";
+      $ret .= to_lower($d->{type});
+      $ret .= ";\n";
+      $p0->($level + 2, $d->{data});
+    }
+  };
+  my $p1;
+  $p1 = sub {
+    my ($level, $data) = @_;
+    return unless defined $data;
+    foreach my $d (@$data) {
+      $ret .= "static const ErrorInfo * const ";
+      $ret .= ' 'x$level;
+      $ret .= to_lower($d->{type});
+      $ret .= "_error" if defined $d->{data} || $level == 0;
+      $ret .= " = aerror_";
+      $ret .= to_lower($d->{type});
+      $ret .= ";\n";
+      $p1->($level + 2, $d->{data});
+    }
+  };
+  $p0->(0, $data->{data});
+  $ret .= "\n\n";
+  $p1->(0, $data->{data});
+  return $ret;
+};
+
+sub make_cxx_constructor ( $ $ ; \% ) {
+  my ($class, $p, $accum) = @_;
+  my $ret;
+  $ret .= to_mixed($class);
+  $ret .= "(";
+  $ret .= join ', ', map {to_type_name $_, {mode=>'native',pos=>'parm'}, %$accum} @$p;
+  $ret .= ")";
+  return $ret;
+}
+
+sub make_native_obj ( $ @ ) {
+  my ($t, $data, $accum) = @_;
+  my $obj = to_mixed($data->{name});
+  my @defaults;
+  my @public;
+  foreach my $d (@{$data->{data}}) {
+    next unless $d->{type} eq 'public';
+    next if $d->{name} eq $data->{name};
+    push @public, to_mixed($d->{name});
+    my $typ = finalized_type $d->{name};
+    $accum->{headers}{$typ->{created_in}} = true;
+  }
+  my $ret;
+  $ret .= "$t $obj ";
+  $ret .= ": ".join(', ', map {"public $_"} @public).' ' if @public;
+  $ret .= "{\n";
+  $ret .= " public:\n" if $t eq 'class';
+  foreach my $d (@{$data->{data}}) {
+    next if exists $d->{'c only'};
+    next if one_of $d->{type}, qw(constructor destructor public);
+    $ret .= "  ";
+    if ($d->{type} eq 'method') {
+      my $is_vir = $t eq 'class' && !exists $d->{'cxx impl'};
+      $ret .= "virtual " if $is_vir;
+      $ret .= make_cxx_method $d, {mode=>'native'}, %$accum;
+      $ret .= $is_vir ? " = 0;\n" 
+         : exists $d->{'cxx impl'} ? " { $d->{'cxx impl'}; }\n"
+         : ";\n";
+    } elsif ($d->{type} eq 'cxx constructor') {
+      $ret .= make_cxx_constructor $data->{name}, $d->{data}, %$accum;
+      $ret .= exists $d->{'cxx impl'} ? " $d->{'cxx impl'}\n"
+         : ";\n";
+    } else { # is a type
+      if (exists $d->{default}) {
+       push @defaults, $d;
+      }
+      if ($d->{type} eq 'cxx member') {
+       foreach (split /\s*,\s*/, $d->{'headers'}) {
+         $accum->{headers}{$_} = true;
+       }
+       $ret .= $d->{what};
+      } elsif ($t eq 'class') {
+       $ret .= to_type_name $d, {mode=>'native'}, %$accum;
+       $ret .= "_";
+      } else {
+       $ret .= to_type_name $d, {mode=>'cc_cxx'}, %$accum;
+      }
+      $ret .= ";\n";
+    }
+  }
+  if (@defaults || $t eq 'class') {
+    $ret .= "  $obj()";
+    if (@defaults) {
+      $ret .= " : ";
+      $ret .= join ', ', map {to_lower($_->{name}).($t eq 'class'?'_':'')."($_->{default})"} @defaults;
+    }
+    $ret .= " {}\n";
+  }
+  $ret .= "  virtual ~${obj}() {}\n" if $t eq 'class';
+  $ret .= "};\n";
+  foreach my $d (@{$data->{data}}) {
+    next unless $d->{type} eq 'constructor';
+    $ret .= make_c_method $data->{name}, $d, {mode=>'native',no_aspell=>false}, %$accum;
+    $ret .= ";\n";
+  }
+  return $ret;
+}
+
+1;
diff --git a/auto/MkSrc/ProcNativeImpl.pm b/auto/MkSrc/ProcNativeImpl.pm
new file mode 100644 (file)
index 0000000..39d692b
--- /dev/null
@@ -0,0 +1,97 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::ProcNativeImpl;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(%info %types %methods);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::CcHelper;
+use MkSrc::Info;
+use MkSrc::Create;
+
+$info{forward}{proc}{native_impl} = sub {
+  my ($type) = @_;
+  return "$type->{type} ".to_mixed($type->{name}).";\n";
+};
+
+$info{group}{proc}{native_impl} = sub {
+  my ($data) = @_;
+  create_cc_file (type => 'native_impl',
+                 cxx => true,
+                 namespace => 'acommon',
+                 dir => "common",
+                 header => false,
+                 data => $data,
+                 accum => {headers => {$data->{name} => true} }
+                 );
+};
+
+$info{errors}{proc}{native_impl} = sub {
+  my $ret;
+  my $p;
+  $p = sub {
+    my ($isa, $parms, $data) = @_;
+    my @parms = (@$parms, (split /, */, $data->{parms}));
+    my $parm_idx = sub {
+      my ($p) = @_;
+      return 0             if $p eq 'prim';
+      for (my $i = 0; $i != @parms; ++$i) {
+       return $i+1 if $parms[$i] eq $p;
+      }
+      die "can't find parm for \"$p\"";
+    };
+    my $proc_mesg = sub {
+      my @mesg = split /\%(\w+)/, $_[0];
+      my $mesg = '';
+      while (true) {
+       my $m = shift @mesg;
+       $m =~ s/\"/\\\"/g;
+       $mesg .= $m;
+       my $p = shift @mesg;
+       last unless defined $p;
+       $mesg .= "%$p:";
+       $mesg .= $parm_idx->($p);
+      }
+      if (length $mesg == 0) {
+       $mesg = 0;
+      } else {
+       $mesg = "N_(\"$mesg\")";
+      }
+      return $mesg;
+    };
+    my $mesg = $proc_mesg->($data->{mesg});
+    my $name = "aerror_".to_lower($data->{type});
+    $ret .= "static const ErrorInfo $name\_obj = {\n";
+    $ret .= "  ".(defined $isa ? "$isa": 0).", // isa\n";
+    $ret .= "  $mesg, // mesg\n";
+    $ret .= "  ".scalar @parms.", // num_parms\n";
+    $ret .= "  {".(join ', ', map {"\"$_\""} (@parms ? @parms : ("")))."} // parms\n";
+    $ret .= "};\n";
+    $ret .= "extern \"C\" const ErrorInfo * const $name = &$name\_obj;\n";
+    $ret .= "\n";
+    foreach my $d (@{$data->{data}}) {
+      $ret .= $p->($name, \@parms, $d);
+    }
+  };
+  my ($data, $accum) = @_;
+  $accum->{headers}{'error'} = true;
+  foreach my $d (@{$data->{data}}) {
+    $ret .= $p->(undef, [], $d);
+  }
+  return $ret;
+};
+
+1;
diff --git a/auto/MkSrc/Read.pm b/auto/MkSrc/Read.pm
new file mode 100644 (file)
index 0000000..4b3d1d0
--- /dev/null
@@ -0,0 +1,210 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Read;
+
+BEGIN {
+  use Exporter;
+  @ISA = qw(Exporter);
+  @EXPORT = qw(read);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use MkSrc::Util;
+use MkSrc::Type;
+use MkSrc::Info;
+use MkSrc::Methods;
+
+my $line = '';
+my $level = 0;
+my $base_level = 0;
+my $in_pod = undef;
+
+my $master_data = {type=>'root', name=>undef};
+# master_data contains all the information in mk-src.in and then some.
+# It has the following structure
+#   <tree>
+#   <tree> := <options>
+#             data => <tree>
+# where each tree represents an entry in mk-src.in.  
+# The following two options are always provided:
+#   name: the name of the entry
+#   type: the catagory or type name
+# Additional options are the same as specified in %info
+
+=head1 MkSrc::Read
+
+=over
+
+=item read
+
+Read in "mk-src.in" and returns a data structure which has the
+following format:
+
+    <tree>
+    <tree> := <options>
+              data => <tree>
+  where each tree represents an entry in mk-src.in.  
+  The following two options are always provided:
+    name: the name of the entry
+    type: the catagory or type name
+  Additional options are the same as specified in %info
+
+=back
+
+=cut
+
+sub advance ( );
+sub parse ( $ $ );
+sub prep ( $ $ $ );
+
+sub read ( )
+{
+  open IN, "mk-src.in" or die;
+  advance;
+  parse $master_data, 0;
+  close IN;
+  prep $master_data, '', {};
+  return $master_data;
+}
+
+sub need_options ( $ );
+sub valid_option ( $ $ );
+sub valid_group ( $ $ );
+sub store_group ( $ $ );
+
+sub advance ( ) {
+  $line = undef;
+  do {
+    $line = <IN>;
+    return unless defined $line;
+    $in_pod = $1 if $line =~ /^\=(\w+)/;
+    $line = '' if $in_pod;
+    $in_pod = undef if $in_pod && $in_pod eq 'cut';
+    $line =~ s/\#.*$//;
+    $line =~ s/^(\t*)//;
+    $level = $base_level + length($1);
+      $line =~ s/\s*$//;
+    ++$base_level if $line =~ s/^\{$//;
+    --$base_level if $line =~ s/^\}$//;
+    $line =~ s/\\([{}])/$1/g;
+  } while ($line eq '');
+  #print "$level:$line\n";
+}
+  
+sub parse ( $ $ ) {
+  my ($data, $this_level) = @_;
+  if (need_options $data) {
+    for (;;) {
+      return          if $level < $this_level;
+      return          unless defined $line;
+      die             if $level > $this_level;
+      last            if $line eq '/';
+      my $k;
+      ($k, $line) = split /\=\>/, $line;
+      $k =~ s/^\s*(.+?)\s*$/$1/;
+      my $v = $line;
+      print STDERR "The option \"$k\" is invalid for the group \"$data->{type}\"\n"
+         unless valid_option $data, $k;
+      advance;
+      for (;;) {
+       return unless defined $line;
+       last if $level <= $this_level;
+       $v .= "\n$line";
+       advance;
+      }
+      $v =~ s/^[ \t\n]+//;
+      $v =~ s/[ \t\n]+$//;
+      $data->{$k} = $v;
+    }
+    return unless $line eq '/';
+    advance;
+  } else {
+    advance if $line eq '/';
+  }
+  $data->{data} = [];
+  for (;;) {
+    return if $level < $this_level;
+    return unless defined $line;
+    die    if $level > $this_level;
+    my ($type, $name) = split /:/, $line;
+    $type =~ s/^\s*(.+?)\s*$/$1/;
+    $name =~ s/^\s*(.+?)\s*$/$1/;
+    print STDERR "The subgroup \"$type\" is invalid in the group \"$data->{type}\"\n"
+       unless valid_group $data, $type;
+    my $d = {type=>$type, name=>$name};
+    store_group $d, $data;
+    advance;
+    parse($d, $this_level + 1);
+  }
+}
+
+sub prep ( $ $ $ ) {
+  my ($data, $group, $stack) = @_;
+  my $d = creates_type $data;
+  update_type $d->{name}, {%$d,created_in=>$group} if (defined $d);
+  $group = $data->{name} if $data->{type} eq 'group';
+  $stack = {%$stack, prev=>$data, $data->{type}=>$data};
+  if ($data->{type} eq 'method') {
+    die unless $data->{data};
+    $data->{data}[0]{'posib err'} = true if exists $data->{'posib err'};
+  }
+  my $i = 0;
+  my $lst = $data->{data};
+  return unless defined $lst;
+  while ($i != @$lst) {
+    my $d = $lst->[$i];
+    if (exists $methods{$d->{type}}) {
+      splice @$lst, $i, 1, copy_methods($d, $data, $stack->{class}{name});
+    } else {
+      prep $d, $group, $stack;
+      ++$i;
+    }
+  }
+}
+
+#
+# Parser helper functions
+#
+
+sub need_options ( $ ) {
+  my ($i, $o) = @_;
+  my $options = $info{$i->{type}}{options};
+  return true unless ref $options eq 'ARRAY';
+  return true unless @$options == 0;
+  return false;
+}
+
+sub valid_option ( $ $ ) {
+  my ($i, $o) = @_;
+  my $options = $info{$i->{type}}{options};
+  return true unless ref $options eq 'ARRAY';
+  return scalar ( grep {$_ eq $o} @$options);
+}
+
+sub valid_group ( $ $ ) {
+  my ($i, $t) = @_;
+  my $groups = $info{$i->{type}}{groups};
+  return true unless ref $groups eq 'ARRAY';
+  return scalar ( grep {$_ eq $t} @$groups);
+}
+
+sub store_group ( $ $ ) {
+  my ($d, $data) = @_;
+  if ($d->{type} eq 'methods') {
+    $methods{"$d->{name} methods"} = $d;
+#   Don't usa as groups is now undef
+#   push @{$info{class}{groups}}, "$d->{name} methods";
+  } else {
+    push @{$data->{data}}, $d;
+  }
+}
+
+1;
diff --git a/auto/MkSrc/Type.pm b/auto/MkSrc/Type.pm
new file mode 100644 (file)
index 0000000..2c6ff35
--- /dev/null
@@ -0,0 +1,94 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Type;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(creates_type update_type finalized_type);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+sub creates_type ( $ );
+sub update_type ( $ ; $ );
+sub finalized_type ( $ );
+
+use MkSrc::Util;
+use MkSrc::Info;
+
+#
+# Type Functions
+#
+
+
+sub creates_type ( $ ) 
+{
+  my ($i) = @_;
+  my $d;
+  $d->{type} = $info{$i->{type}}{creates_type};
+  return undef unless defined $d->{type};
+  $d->{name} = $i->{name};
+  $d->{treat_as} =
+    ($i->{type} eq 'basic'                                    ? 'special'
+     : exists $i->{'treat as object'} || $i->{type} eq 'enum' ? 'object'
+     :                                                          'pointer');
+  if (my $name = $info{$i->{type}}{creates_name}) {
+    $d->{name} = $name->($i);
+  }
+  return $d;
+}
+
+sub update_type ( $ ; $ ) 
+{
+  my ($name, $data) = @_;
+  my $d = $types{$name};
+  $types{$name} = $d = {} unless defined $d;
+  $d->{data} = $data if defined $data;
+  $d->{data} = {} unless defined $d->{data};
+  return $d;
+}
+
+sub finalized_type ( $ ) 
+{
+  my ($name) = @_;
+
+  my $d = $types{$name};
+  $types{$name} = $d = {data=>{}} unless defined $d;
+  return $d unless exists $d->{data};
+
+  while (my ($k,$v) = each %{$d->{data}}) {
+    $d->{$k} = defined $v ? $v : true;
+  }
+  delete $d->{data};
+
+  local $_ = $name;
+
+  s/^const //       and $d->{const}   = true;
+  s/^array (\d+) // and $d->{array}   = $1;
+  s/ ?pointer$//    and $d->{pointer} = true;
+  s/ ?object$//     and $d->{pointer} = false;
+
+  $_ = 'void' if length $_ == 0;
+
+  my $r = finalized_type $_;
+
+  $d->{type} = exists $r->{type} ? $r->{type} : 'unknown';
+  $d->{name} = $_;
+  $d->{orig_name} = $name;
+  $d->{pointer} = ($r->{treat_as} eq 'pointer')
+    unless exists $d->{pointer};
+  $d->{const} = false unless $d->{pointer};
+  $d->{created_in} = $r->{created_in};
+
+  return $d;
+
+}
+1;
diff --git a/auto/MkSrc/Util.pm b/auto/MkSrc/Util.pm
new file mode 100644 (file)
index 0000000..b912a2b
--- /dev/null
@@ -0,0 +1,111 @@
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+package MkSrc::Util;
+
+BEGIN {
+  use Exporter;
+  our @ISA = qw(Exporter);
+  our @EXPORT = qw(false true
+                  cmap one_of
+                  to_upper to_lower to_mixed);
+}
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+=head1 MkSrc::Util
+
+This module contains various useful utility functions:
+
+=over
+
+=cut
+
+=item false
+
+Returns 0.
+
+=item true
+
+Returns 1.
+
+=cut
+
+sub false () {return 0}
+sub true () {return 1}
+
+=item cmap EXPR LIST
+
+Apply EXPR to each item in LIST and than concatenate the result into
+a string
+
+=cut
+
+sub cmap ( & @ ) 
+{
+  my ($sub, @d) = @_; 
+  return join '', map &$sub, @d;
+}
+
+=item one_of STR LIST
+
+Returns true if LIST contains at least one of STR.
+
+=cut
+
+sub one_of ( $ @ ) {
+  my ($v, @l) = @_; 
+  return scalar grep {$_ eq $v} @l;
+}
+
+=item to_upper STR
+
+Convert STR to all uppercase and substitute spaces with underscores.
+
+=cut
+
+sub to_upper( $ ) {
+  local ($_) = @_;
+  s/\-/ /g;
+  s/^\s+//; s/\s+$//; s/(\S)\s+(\S)/$1_$2/g;
+  return uc($_);
+}
+
+=item to_lower STR
+
+Convert STR to all lowercase and substitute spaces with underscores.
+
+=cut
+
+sub to_lower( $ ) {
+  local ($_) = @_;
+  s/\-/ /g;
+  s/^\s+//; s/\s+$//; s/(\S)\s+(\S)/$1_$2/g;
+  return lc($_);
+}
+
+=item to_mixed STR
+
+Convert STR to mixed case where each new word startes with a
+uppercase letter.  For example "feed me" would become "FeedMe".
+
+=cut
+
+sub to_mixed( $ ) {
+  local ($_) = @_;
+  s/\-/ /g;
+  s/\s*(\S)(\S*)/\u$1\l$2\E/g;
+  return $_;
+}
+
+=back
+
+=cut
+
+1;
diff --git a/auto/auto b/auto/auto
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/auto/mk-doc.pl b/auto/mk-doc.pl
new file mode 100644 (file)
index 0000000..cfd6107
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+
+my @files = qw(mk-src.in MkSrc/Info.pm 
+              MkSrc/Util.pm 
+              MkSrc/Read.pm MkSrc/Create.pm
+              MkSrc/CcHelper.pm);
+
+my $final;
+
+foreach (@files)
+{
+  open IN, $_;
+  $final .= "\n\n### FILE: $_\n\n";
+  while (<IN>) 
+  {
+    s/^\#pod\s*/\n\=pod\n\n/;
+    s/^\#cut\s*/\n\=cut\n\n/;
+    $final .= $_;
+  }
+  close IN;
+}
+
+open OUT, ">mk-src.pod" or die;
+print OUT $final;
+close OUT;
+
+use Pod::Checker;
+$parser = Pod::Checker->new();
+$parser->parse_from_file('mk-src.pod', \*STDERR);
+
+use Pod::Text;
+$parser = Pod::Text->new(loose=>1);
+$parser->parse_from_file('mk-src.pod', 'mk-src.txt');
+
+#use Pod::LaTeX;
+#$parser = Pod::LaTeX->new(AddPreamble => 0, AddPostamble => 0);
+#$parser->parse_from_file('mk-src.pod', '../manual/mk-src.tex.new');
+
+#$/ = undef;
+#open IN, '../manual/mk-src.tex';
+#$orig = <IN>;
+#open IN, '../manual/mk-src.tex.new';
+#$new = <IN>;
+#close IN;
+#if ($orig eq $new) {
+#  print "mk-src.tex unchanged\n";
+#} else {
+#  rename '../manual/mk-src.tex.new', '../manual/mk-src.tex';
+#}
+
+#unlink "mk-src.pod";
diff --git a/auto/mk-src.in b/auto/mk-src.in
new file mode 100644 (file)
index 0000000..c514db3
--- /dev/null
@@ -0,0 +1,1070 @@
+#
+# mk-src.in -- Input file for the Perl program to automatically
+#             generate interface code.
+#
+# This file is part of The New Aspell
+# Copyright (C) 2001-2005 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+=head1 mk-src.in
+
+The format of mk-src.in is as follows:
+
+  The following characters are literals: { } / '\ ' \n = >
+
+  <items>
+  <items> := (<item>\n)+
+  <items> := <category>:\ <name> {\n<details>\n} | <<tab>><details>
+  <details> := <options>\n /\n <items>
+  <options> := (<option>\n)*
+  <option> := <key> [=> <value>]
+
+  <<tab>> means everything should be indented by one tab
+
+See MkSrc::Info for a description of the categories and options
+
+=cut
+
+
+group: type id
+{
+/
+union: type id
+       treat as object
+       /
+       unsigned int: num
+               default => 0
+       array 4 char: str
+       cxx constructor:
+               /
+               string: str
+}
+methods: destructible
+       /
+       destructor
+
+#      int: ref count
+#              default => 0
+#
+#      method: ref count
+#              desc => Returns a pointer to an int which may be used
+#                      for reference counting. It will default to 0.
+#                      This integer is not used by the actual library
+#                      but may be used my some of the front ends.
+#              c only
+#              c impl => return &ths->ref_count;
+#              /
+#              int pointer
+
+methods: copyable
+       /
+       destructible methods
+
+#      type id: type id
+#
+#      method: type id
+#              desc => Two objects of the same pointer type may be
+#                      assigned to each other only if their type ids
+#                      are the same.
+#              cxx impl => return type_id_.num
+#              /
+#              unsigned int
+#
+#      int: copyable
+#              default => 2
+#
+#      method: copyable
+#              desc => Returns 0 if this object can not be copied,
+#                      1 if it may be copied, 2 if it should be
+#                      copied.  Used by some of the front ends to
+#                      determine if a deep or shallow copy should be
+#                      made.
+#              cxx impl => return copyable_
+#              /
+#              int
+
+       method: clone
+               const
+               /
+               $
+
+       method: assign
+               /
+               void
+               const $: other
+
+methods: can have error
+       /
+       cxx member: err
+               headers => copy ptr, error
+               what => CopyPtr<Error> err_
+
+       method: error number
+               const
+               c only
+               c impl => return ths->err_ == 0 ? 0 : 1;
+               /
+               unsigned int
+
+       method: error message
+               const
+               c only
+               c impl => return ths->err_ ? ths->err_->mesg : "";
+               /
+               string
+
+       method: error
+               const
+               c only
+               c impl => return ths->err_;
+               /
+               const error
+
+methods: mutable container
+       c impl headers => posib err
+       /
+       public: mutable container
+       method: add
+               /
+               bool
+               string: to_add
+
+       method: remove
+               /
+               bool
+               string: to_rem
+
+       method: clear
+               /
+               void
+
+       method: to mutable container
+               c only
+               c impl => return ths;
+               /
+               mutable container
+
+group: mutable container
+{
+/
+class: mutable container
+       /
+       mutable container methods
+}
+methods: list
+
+       strip => 1
+       /
+       method: empty
+               const
+               /
+               bool
+
+       method: size
+               const
+               /
+               unsigned int
+
+       method: elements
+               const
+               /
+               $ enumeration
+
+methods: enumeration
+
+       strip => 1
+
+       /
+       method: at end
+               const
+               /
+               bool
+
+       method: next
+               /
+               const $
+
+group: key info
+{
+/
+enum: key info type
+       prefix => key info
+       /
+       string
+       int
+       bool
+       list
+
+struct: key info
+       desc => The Key Info object is used for holding information
+               about a valid key.
+       /
+       string: name
+               desc => The name of the key.
+       key info type: type
+               desc => The key type.
+       string: def
+               desc => The default value of the key.
+       string: desc
+               desc => A brief description of the key or NULL if internal value.
+       int: flags
+       int: other data
+}
+group: config
+{
+no native
+/
+class: key info enumeration
+       /
+       enumeration methods
+       copyable methods
+
+class: config
+       c impl headers => error
+       /
+       constructor
+
+       copyable methods
+
+       can have error methods
+
+       method: set extra
+               desc => Sets extra keys which this config class should
+                       accept. begin and end are expected to point to
+                       the beginning and ending of an array of Aspell
+                       Key Info.
+               /
+               void
+               const key info: begin
+               const key info: end
+
+       method: keyinfo
+               posib err
+               desc => Returns the KeyInfo object for the
+                       corresponding key or returns NULL and sets
+                       error_num to PERROR_UNKNOWN_KEY if the key is
+                       not valid. The pointer returned is valid for
+                       the lifetime of the object.
+               /
+               const key info
+               string: key
+
+       method: possible elements
+               desc => Returns a newly allocated enumeration of all
+                       the possible objects this config class uses.
+               /
+               key info enumeration
+               int: include extra
+
+       method: get default
+               posib err
+               desc => Returns the default value for given key which
+                       may involve substituting variables, thus it is
+                       not the same as keyinfo(key)->def returns NULL
+                       and sets error_num to PERROR_UNKNOWN_KEY if
+                       the key is not valid. Uses the temporary
+                       string.
+               /
+               string obj
+               string: key
+
+       method: elements
+               desc => Returns a newly allocated enumeration of all
+                       the key/value pairs. This DOES not include ones
+                       which are set to their default values.
+               /
+               string pair enumeration
+
+       method: replace
+               posib err
+               desc => Inserts an item, if the item already exists it
+                       will be replaced. Returns TRUE if it succeeded
+                       or FALSE on error. If the key is not valid it
+                       sets error_num to PERROR_UNKNOWN_KEY, if the
+                       value is not valid it will set error_num to
+                       PERROR_BAD_VALUE, if the value can not be
+                       changed it sets error_num to
+                       PERROR_CANT_CHANGE_VALUE, and if the value is
+                       a list and you are trying to set its directory,
+                       it sets error_num to PERROR_LIST_SET
+               /
+               void
+               string: key
+               string: value
+
+       method: remove
+               posib err
+               desc => Remove a key and returns TRUE if it exists
+                       otherwise return FALSE. This effectively sets
+                       the key to its default value. Calling replace
+                       with a value of "<default>" will also call
+                       remove. If the key does not exist then it sets
+                       error_num to 0 or PERROR_NOT, if the key is
+                       not valid then it sets error_num to
+                       PERROR_UNKNOWN_KEY, if the value can not be
+                       changed then it sets error_num to
+                       PERROR_CANT_CHANGE_VALUE
+               /
+               void
+               string: key
+
+       method: have
+               const
+               /
+               bool
+               string: key
+
+       method: retrieve
+               posib err
+               desc => Returns NULL on error.
+               /
+               string obj
+               string: key
+
+       method: retrieve list
+               posib err
+               /
+               void
+               string: key
+               mutable container: lst
+
+       method: retrieve bool
+               posib err
+               desc => In "ths" Aspell configuration, search for a
+                       character string matching "key" string.
+                       If "key" is found then return 1 else return 0.
+                       If error encountered, then return -1.
+               /
+               bool
+               string: key
+
+       method: retrieve int
+               posib err
+               desc => In "ths" Aspell configuration, search for an
+                       integer value matching "key" string.
+                       Return -1 on error.
+               /
+               unsigned int
+               string: key
+
+#      method: read_in_settings
+#              posib err
+#              /
+#              bool
+
+#      method: settings_read_in
+#              /
+#              bool
+}
+group: error
+{
+/
+struct: error
+       /
+       string: mesg
+       const error info: err
+       method: is a
+               const
+               /
+               bool
+               const error info: e
+
+struct: error info
+       /
+       const error info: isa
+       string: mesg
+       unsigned int: num parms
+       array 3 string: parms
+}
+group: can have error
+{
+/
+class: can have error
+       c impl headers => error
+       /
+       cxx constructor:
+               cxx impl => : err_(e) {}
+               /
+               error: e
+       can have error methods
+               prefix =>
+       destructible methods
+}
+group: errors
+{
+/
+errors:
+       /
+       other
+       operation not supported
+               mesg => Operation Not Supported: %what
+               parms => what
+               /
+               cant copy
+               unimplemented method
+                       mesg => The method "%what" is unimplemented in "%where".
+                       parms => where
+       file
+               mesg => %file:
+               parms => file
+               /
+               cant open file
+                       mesg => The file "%file" can not be opened
+                       /
+                       cant read file
+                               mesg => The file "%file" can not be opened for reading.
+                       cant write file
+                               mesg => The file "%file" can not be opened for writing.
+               invalid name
+                       mesg => The file name "%file" is invalid.
+               bad file format
+                       mesg => The file "%file" is not in the proper format.
+       dir
+               parms => dir
+               /
+               cant read dir
+                       mesg => The directory "%dir" can not be opened for reading.
+
+       config
+               parms => key
+               /
+               unknown key
+                       mesg => The key "%key" is unknown.
+               cant change value
+                       mesg => The value for option "%key" can not be changed.
+               bad key
+                       mesg => The key "%key" is not %accepted and is thus invalid.
+                       parms => accepted
+               bad value
+                       mesg => The value "%value" is not %accepted and is thus invalid for the key "%key".
+                       parms => value, accepted
+               duplicate
+               key not string
+                       mesg => The key "%key" is not a string.
+               key not int
+                       mesg => The key "%key" is not an integer.
+               key not bool
+                       mesg => The key "%key" is not a boolean.
+               key not list
+                       mesg => The key "%key" is not a list.
+               no_value_reset
+                       mesg => The key "%key" does not take any parameters when prefixed by a "reset-".
+               no_value_enable
+                       mesg => The key "%key" does not take any parameters when prefixed by an "enable-".
+               no_value_disable
+                       mesg => The key "%key" does not take any parameters when prefixed by a "dont-" or "disable-".
+               no_value_clear
+                       mesg => The key "%key" does not take any parameters when prefixed by a "clear-".
+
+       language related
+               parms => lang
+               /
+               unknown language
+                       mesg => The language "%lang" is not known.
+               unknown soundslike
+                       mesg => The soundslike "%sl" is not known.
+                       parms => sl
+               language not supported
+                       mesg => The language "%lang" is not supported.
+               no wordlist for lang
+                       mesg => No word lists can be found for the language "%lang".
+               mismatched language
+                       mesg => Expected language "%lang" but got "%prev".
+                       parms => prev
+       affix
+               /
+               corrupt affix
+                       mesg => Affix '%aff' is corrupt.
+                       parms => aff
+               invalid cond
+                       mesg => The condition "%cond" is invalid.
+                       parms => cond
+               invalid cond strip
+                       mesg => The condition "%cond" does not guarantee that "%strip" can always be stripped.
+                       parms => cond, strip
+               incorrect encoding
+                       mesg => The file "%file" is not in the proper format. Expected the file to be in "%exp" not "%got".
+                       parms => file, exp, got
+       encoding
+               parms => encod
+               /
+               unknown encoding
+                       mesg => The encoding "%encod" is not known.
+               encoding not supported
+                       mesg => The encoding "%encod" is not supported.
+               conversion not supported
+                       mesg => The conversion from "%encod" to "%encod2" is not supported.
+                       parms => encod2
+       pipe
+               /
+               cant create pipe
+               process died
+       bad input
+               /
+               invalid string
+                       mesg => The string "%str" is invalid.
+                       parms => str
+               invalid word
+                       mesg => The word "%word" is invalid.
+                       parms => word
+               invalid affix
+                       mesg => The affix flag '%aff' is invalid for word "%word".
+                       parms => aff, word
+               inapplicable affix
+                       mesg => The affix flag '%aff' can not be applied to word "%word".
+                       parms => aff, word
+               unknown unichar
+                       mesg =>
+               word list flags
+                       /
+                       invalid flag
+                       conflicting flags
+       version control
+               /
+               bad version string
+                       mesg => not a version number
+       filter
+               /
+               cant dlopen file
+                       mesg => dlopen returned "%return".
+                       parms => return
+               empty filter
+                       mesg => The file "%filter" does not contain any filters.
+                       parms => filter
+               no such filter
+                       mesg => The filter "%filter" does not exist.
+                       parms => filter
+               confusing version
+                       mesg => Confused by version control.
+               bad version
+                       mesg => Aspell version does not match filter's requirement.
+               identical option
+                       mesg => Filter option already exists.
+               options only
+                       mesg => Use option modifiers only within named option.
+               invalid option modifier
+                       mesg => Option modifier unknown.
+               cant describe filter
+                       mesg => Error setting filter description.
+       filter mode file
+               /
+               mode option name
+                       mesg => Empty option specifier.
+               no filter to option
+                       mesg => Option "%option" possibly specified prior to filter.
+                       parms => option
+               bad mode key
+                       mesg => Unknown mode description key "%key".
+                       parms => key
+               expect mode key
+                       mesg => Expecting "%modekey" key.
+                       parms => modekey
+               mode version requirement
+                       mesg => Version specifier missing key: "aspell".
+               confusing mode version
+                       mesg => Confused by version control.
+               bad mode version
+                       mesg => Aspell version does not match mode's requirement.
+               missing magic expression
+                       mesg => Missing magic mode expression.
+               empty file ext
+                       mesg => Empty extension at char %char.
+                       parms => char
+       filter mode expand
+               mesg => "%mode" error
+               parms => mode
+               /
+               unknown mode
+                       mesg => Unknown mode: "%mode".
+               mode extend expand
+                       mesg => "%mode" error while extend Aspell modes. (out of memory?)
+       filter mode magic
+               mesg = "%mode": bad magic "%magic"
+               parms => mode, magic
+               /
+               file magic pos
+                       mesg => "%mode": no start for magic search given for magic "%magic".
+               file magic range
+                       mesg => "%mode": no range for magic search given for magic "%magic".
+               missing magic
+                       mesg => "%mode": no magic expression available for magic "%magic".
+               bad magic
+                       mesg => "%mode": Magic "%magic": bad regular expression after location specifier; regexp reports: "%regerr".
+                       parms => regerr
+
+       expression
+               /
+               invalid expression
+                       mesg => "%expression" is not a valid regular expression.
+                       parms => expression
+}
+group: speller
+{
+no native
+/
+class: speller
+       c impl headers => error
+       /
+       # FIXME: make a "methods" of the next two contractors
+       #      which will probably involve modifying mk-src.pl
+
+       constructor: new aspell speller
+               returns alt type
+               c impl =>
+                       PosibErr<Speller *> ret = new_speller(config);
+                       if (ret.has_err()) \{
+                         return new CanHaveError(ret.release_err());
+                       \} else \{
+                         return ret;
+                       \}
+               /
+               can have error
+               config: config
+
+       constructor: to aspell speller
+               c impl => return static_cast<Speller *>(obj);
+               /
+               can have error: obj
+
+       destructible methods
+
+       can have error methods
+
+       method: config
+               /
+               config
+
+       method: check
+
+               posib err
+               desc => Returns 0 if it is not in the dictionary,
+                       1 if it is, or -1 on error.
+               /
+               bool
+               encoded string: word
+
+       method: add to personal
+
+               posib err
+               desc => Add this word to your own personal word list.
+               /
+               void
+               encoded string: word
+
+       method: add to session
+
+               posib err
+               desc => Add this word to the current spelling session.
+               /
+               void
+               encoded string: word
+
+       method: personal word list
+
+               posib err
+               desc => This is your own personal word list file plus
+                       any extra words added during this session to
+                       your own personal word list.
+               /
+               const word list
+
+       method: session word list
+
+               posib err
+               desc => This is a list of words added to this session
+                       that are not in the main word list or in your
+                       own personal list but are considered valid for
+                       this spelling session.
+               /
+               const word list
+
+       method: main word list
+
+               posib err
+               desc => This is the main list of words used during this
+                       spelling session.
+               /
+               const word list
+
+       method: save all word lists
+
+               posib err
+               /
+               void
+
+       method: clear session
+
+               posib err
+               /
+               void
+
+       method: suggest
+
+               posib err
+               desc => Return NULL on error.
+                       The word list returned by suggest is only
+                       valid until the next call to suggest.
+               /
+               const word list
+               encoded string: word
+
+       method: store replacement
+
+               posib err
+               /
+               bool
+               encoded string: mis
+               encoded string: cor
+
+}
+
+group: filter
+{
+no native
+/
+class: filter
+       c impl headers => error
+       /
+       destructible methods
+
+       can have error methods
+
+       # FIXME: make a "methods" of the next two contractors
+
+#      constructor: new aspell filter
+#              returns alt type
+#              c impl =>
+#                      PosibErr<Filter *> ret = new_filter(config);
+#                      if (ret.has_err()) \{
+#                        return new CanHaveError(ret.release_err());
+#                      \} else \{
+#                        return ret;
+#                      \}
+#              /
+#              can have error
+#              config: config
+
+       constructor: to aspell filter
+               c impl => return static_cast<Filter *>(obj);
+               /
+               can have error: obj
+
+#      method: setup
+#
+#              posib err
+#              /
+#              void
+#              speller: speller
+#              config: config
+#
+#      method: reset
+#
+#              /
+#              void
+#
+#      method: process
+#
+#              /
+#              void
+#              char pointer: str
+#              int: size
+#
+#      method: config
+#
+#              /
+#              config
+}
+
+group: document checker
+{
+no native
+/
+struct: token
+       /
+       unsigned int: offset
+       unsigned int: len
+
+class: document checker
+       c impl headers => error
+       /
+       destructible methods
+
+       can have error methods
+
+       # FIXME: make a "methods" of the next two contractors
+
+       constructor: new aspell document checker
+               returns alt type
+               c impl =>
+                       PosibErr<DocumentChecker *> ret = new_document_checker(speller);
+                       if (ret.has_err()) \{
+                         return new CanHaveError(ret.release_err());
+                       \} else \{
+                         return ret;
+                       \}
+               desc => Creates a new document checker.
+                       The speller class is expected to last until
+                       this class is destroyed.
+                       If config is given it will be used to override
+                       any relevent options set by this speller class.
+                       The config class is not once this function is done.
+                       If filter is given then it will take ownership of
+                       the filter class and use it to do the filtering.
+                       You are expected to free the checker when done.
+               /
+               can have error
+               speller: speller
+
+       constructor: to aspell document checker
+               c impl => return static_cast<DocumentChecker *>(obj);
+               /
+               can have error: obj
+
+       method: reset
+
+               desc => Reset the internal state of the filter.
+                       Should be called whenever a new document is
+                       being filtered.
+               /
+               void
+
+       method: process
+
+               desc => Process a string.
+                       The string passed in should only be split on
+                       white space characters.  Furthermore, between
+                       calls to reset, each string should be passed
+                       in exactly once and in the order they appeared
+                       in the document.  Passing in strings out of
+                       order, skipping strings or passing them in
+                       more than once may lead to undefined results.
+               /
+               void
+               string: str
+               int: size
+
+       method: next misspelling
+
+               desc => Returns the next misspelled word in the
+                       processed string.  If there are no more
+                       misspelled words, then token.word will be
+                       NULL and token.size will be 0
+               /
+               token object
+
+       method: filter
+
+               desc => Returns the underlying filter class.
+               /
+               filter
+}
+
+group: word list
+{
+/
+class: word list
+       c impl headers => string enumeration
+       /
+       cxx member: from internal
+               what => class Convert * from_internal_
+               default => 0
+
+       method: empty
+               const
+               /
+               bool
+
+       method: size
+               const
+               /
+               unsigned int
+
+       method: elements
+               const
+               c impl =>
+                       StringEnumeration * els = ths->elements();
+                       els->from_internal_ = ths->from_internal_;
+                       return els;
+               /
+               string enumeration
+}
+group: string enumeration
+{
+/
+class: string enumeration
+       c impl headers => convert
+       /
+       copyable methods
+       method: at end
+               const
+               /
+               bool
+
+       method: next
+               c impl =>
+                       const char * s = ths->next();
+                       if (s == 0 || ths->from_internal_ == 0) \{
+                         return s;
+                       \} else \{
+                         ths->temp_str.clear();
+                         ths->from_internal_->convert(s,-1,ths->temp_str);
+                         ths->from_internal_->append_null(ths->temp_str);
+                         return ths->temp_str.data();
+                       \}
+               /
+               const string
+
+}
+group: info
+{
+/
+struct: module info
+       /
+       string: name
+       double: order num
+       string: lib dir
+       string list: dict dirs
+       string list: dict exts
+
+struct: dict info
+       /
+       string: name
+               desc => The Name to identify this dictionary by.
+       string: code
+               desc => The language code to identify this dictionary.
+                       A two letter UPPER-CASE ISO 639 language code
+                       and an optional two letter ISO 3166 country
+                       code after a dash or underscore.
+       string: jargon
+               desc => Any extra information to distinguish this
+                       variety of dictionary from other dictionaries
+                       which may have the same language and size.
+       int: size
+       string: size str
+               desc => A two char digit code describing the size of
+                       the dictionary: 10=tiny, 20=really small,
+                       30=small, 40=med-small, 50=med, 60=med-large,
+                       70=large, 80=huge, 90=insane.  Please check
+                       the README in aspell-lang-200?????.tar.bz2 or
+                       see SCOWL (http://wordlist.sourceforge.net)
+                       for an example of how these sizes are used.
+       module info: module
+
+class: module info list
+       /
+       constructor: get aspell module info list
+               /
+               config: config
+
+       list methods
+
+class: dict info list
+       /
+       constructor: get aspell dict info list
+               /
+               config: config
+
+       list methods
+
+class: module info enumeration
+       /
+       enumeration methods
+       copyable methods
+
+class: dict info enumeration
+       /
+       enumeration methods
+       copyable methods
+}
+
+group: string list
+{
+/
+class: string list
+       /
+       constructor
+
+       list methods
+
+       mutable container methods
+
+       copyable methods
+}
+
+group: string map
+{
+/
+class: string map
+       /
+       constructor
+
+       mutable container methods
+
+       copyable methods
+
+       list methods: string pair
+
+       method: insert
+               desc => Insert a new element.
+                       Will NOT overwrite an existing entry.
+                       Returns FALSE if the element already exists.
+               /
+               bool
+               string: key
+               string: value
+
+       method: replace
+               desc => Insert a new element.
+                       Will overwrite an existing entry.
+                       Always returns TRUE.
+               /
+               bool
+               string: key
+               string: value
+
+       method: lookup
+               const
+               desc => Looks up an element and returns the value.
+                       Returns NULL if the element does not exist.
+                       Returns an empty string if the element exists
+                       but has a NULL value.
+               /
+               string
+               string: key
+}
+
+group: string pair
+{
+/
+struct: string pair
+       treat as object
+       /
+       string: first
+               default => ""
+       string: second
+               default => ""
+}
+group: string pair enumeration
+{
+/
+class: string pair enumeration
+       /
+       enumeration methods
+       copyable methods
+}
+group: cache
+{
+/
+func: reset cache
+       desc => Reset the global cache(s) so that cache queries will
+               create a new object. If existing objects are still in
+               use they are not deleted. If which is NULL then all
+               caches will be reset. Current caches are "encode",
+               "decode", "dictionary", "language", and "keyboard".
+       /
+       bool
+       string: which
+}
+
diff --git a/auto/mk-src.pl b/auto/mk-src.pl
new file mode 100755 (executable)
index 0000000..a157e71
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+
+#
+# mk-src.pl -- Perl program to automatically generate interface code.
+#
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+######################################################################
+#
+# Prologue
+#
+
+use strict;
+use warnings;
+no warnings qw(uninitialized);
+no locale;
+
+use Data::Dumper;
+
+use MkSrc::Info;
+use MkSrc::Read;
+use MkSrc::Util;
+use MkSrc::Type;
+use MkSrc::Create;
+
+
+######################################################################
+#
+# Main
+#
+
+my $master_data = read;
+
+# Pure C
+use MkSrc::ProcCc;
+create_cc_file (type => 'cc',
+               dir => 'interfaces/cc',
+               name => 'aspell',
+               header => true,
+               data => $master_data);
+
+# C++ over C
+# Currently incomplete and broken
+#use MkSrc::ProcCxx;
+#create_cc_file (type => 'cxx',
+#              cxx => true,
+#              namespace => 'aspell',
+#              dir => 'interfaces/cxx',
+#              name => 'aspell-cxx',
+#              header => true,
+#              data => $master_data);
+
+# Native
+use MkSrc::ProcNative;
+foreach my $d (@{$master_data->{data}}) {
+  $info{group}{proc}{native}->($d);
+}
+
+# C for C++
+use MkSrc::ProcImpl;
+foreach my $d (@{$master_data->{data}}) {
+  $info{group}{proc}{impl}->($d);
+}
+
+# Impl
+use MkSrc::ProcNativeImpl;
+foreach my $d (@{$master_data->{data}}) {
+  $info{group}{proc}{native_impl}->($d);
+}
diff --git a/auto/mk-src.txt b/auto/mk-src.txt
new file mode 100644 (file)
index 0000000..37e3fdb
--- /dev/null
@@ -0,0 +1,271 @@
+mk-src.in
+
+    The format of mk-src.in is as follows:
+
+      The following characters are literals: { } / '\ ' \n = >
+
+      <items>
+      <items> := (<item>\n)+
+      <items> := <category>:\ <name> {\n<details>\n} | <<tab>><details>
+      <details> := <options>\n /\n <items>
+      <options> := (<option>\n)*
+      <option> := <key> [=> <value>]
+
+      <<tab>> means everything should be indented by one tab
+
+    See MkSrc::Info for a description of the categories and options
+
+MkSrc::Info
+
+  %info
+
+    The info array contains information on how to process the info in
+    mk-src.pl. It has the following layout
+
+       <category> => options => [] 
+                     groups => [] # if undef than anything is accepted
+                     creates_type => "" # the object will create a new type
+                                        # as specified
+                     proc => <impl type> => sub {}
+
+    where <impl type> is one of:
+
+      cc: for "aspell.h" header file
+      cxx: for C++ interface implemented on top of cc interface
+      native: for creation of header files used internally by aspell
+      impl: for definition of functions declared in cc interface.
+            the definitions use the native header files
+      native_impl: for implementations of stuff declared in the native
+                    header files
+
+    each proc sub should take the following argv
+
+       $data: a subtree of $master_data
+       $accum: 
+
+    <options> is one of:
+
+      desc: description of the object
+      prefix:
+      posib err: the method may return an error condition
+      c func:
+      const: the method is a const member
+      c only: only include in the external interface
+      c impl headers: extra headers that need to be included in the C impl
+      c impl: use this as the c impl instead of the default
+      cxx impl: use this as the cxx impl instead of the default
+      returns alt type: the constructor returns some type other than
+        the object from which it is a member of
+      no native: do not attemt to create a native implementation
+      treat as object: treat as a object rather than a pointer
+
+    The %info structure is initialized as follows:
+
+     our %info =
+     (
+      root => { 
+        options => [],
+        groups => ['methods', 'group']},
+      methods => {
+        # methods is a collection of methods which will be inserted into
+        # a class after some simple substation rules.  A $ will be
+        # replaced with name of the class.
+        options => ['strip', 'prefix', 'c impl headers'],
+        groups => undef},
+      group => {
+        # a group is a colection of objects which should be grouped together
+        # this generally means they will be in the same source file
+        options => ['no native'],
+        groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
+      enum => {
+        # basic C enum
+        options => ['desc', 'prefix'],
+        creates_type => 'enum'},
+      struct => {
+        # basic c struct
+        options => ['desc', 'treat as object'],
+        groups => undef,
+        creates_type => 'struct',},
+      union => {
+        # basic C union
+        options => ['desc', 'treat as object'],
+        groups => undef,
+        creates_type => 'union'},
+      class => {
+        # C++ class
+        options => ['c impl headers'],
+        groups => undef,
+        creates_type => 'class'},
+      errors => {}, # possible errors
+      method => {
+        # A class method
+        options => ['desc', 'posib err', 'c func', 'const',
+                    'c only', 'c impl', 'cxx impl'],
+        groups => undef},
+      constructor => {
+        # A class constructor
+        options => ['returns alt type', 'c impl', 'desc'],
+        groups => 'types'},
+      destructor => {
+        # A class destructor
+        options => [],
+        groups => undef},
+      );
+
+    In addition to the categories listed above a "methods" catagory by be
+    specified in under the class category. A "methods" catagory is created
+    for each methods group under the name "<methods name> methods" When
+    groups is undefined a type name may be specified in place of a category
+
+  %types
+
+    types contains a master list of all types. This includes basic types and
+    ones created in mk-src.in. The basic types include:
+
+         'void', 'bool', 'pointer', 'double',
+         'string', 'encoded string', 'string obj',
+         'char', 'unsigned char',
+         'short', 'unsigned short',
+         'int', 'unsigned int',
+         'long', 'unsigned long'
+
+  %methods
+
+    %methods is used for holding the "methods" information
+
+MkSrc::Util
+
+    This module contains various useful utility functions:
+
+    false
+        Returns 0.
+
+    true
+        Returns 1.
+
+    cmap EXPR LIST
+        Apply EXPR to each item in LIST and than concatenate the result into
+        a string
+
+    one_of STR LIST
+        Returns true if LIST contains at least one of STR.
+
+    to_upper STR
+        Convert STR to all uppercase and substitute spaces with underscores.
+
+    to_lower STR
+        Convert STR to all lowercase and substitute spaces with underscores.
+
+    to_mixed STR
+        Convert STR to mixed case where each new word startes with a
+        uppercase letter. For example "feed me" would become "FeedMe".
+
+MkSrc::Read
+
+    read
+        Read in "mk-src.in" and returns a data structure which has the
+        following format:
+
+            <tree>
+            <tree> := <options>
+                      data => <tree>
+          where each tree represents an entry in mk-src.in.  
+          The following two options are always provided:
+            name: the name of the entry
+            type: the catagory or type name
+          Additional options are the same as specified in %info
+
+MKSrc::Create
+
+    create_cc_file PARMS
+        Create a source file.
+
+          Required Parms: type, dir, name, data
+           Boolean Parms: header, cxx
+          Optional Parms: namespace (required if cxx), pre_ext, accum
+
+    create_file FILENAME DATA
+        Writes DATA to FILENAME but only if DATA differs from the content of
+        the file and the string:
+
+            Automatically generated file.
+
+        is present in the existing file if it already exists.
+
+Code Generation Modes
+
+    The code generation modes are currently one of the following:
+
+      cc: Mode used to create types suitable for C interface
+      cc_cxx: Like cc but typenames don't have a leading Aspell prefix
+      cxx: Mode used to create types suitable for CXX interface
+      native: Mode in which types are suitable for the internal implementation
+      native_no_err: Like Native but with out PosibErr return types
+
+MkSrc::CcHelper
+
+    Helper functions used by interface generation code:
+
+    to_c_return_type ITEM
+        .
+
+    c_error_cond ITEM
+        .
+
+    make_func NAME @TYPES PARMS ; %ACCUM
+        Creates a function prototype
+
+        Parms can be any of:
+
+          mode: code generation mode
+
+    call_func NAME @TYPES PARMS ; %ACCUM
+        Return a string to call a func. Will prefix the function with return
+        if the functions returns a non-void type;
+
+        Parms can be any of:
+
+          mode: code generation mode
+
+    to_type_name ITEM PARMS ; %ACCUM
+        Converts item into a type name.
+
+        Parms can be any of:
+
+          mode: code generation mode
+          use_type: include the actual type
+          use_name: include the name on the type
+          pos: either "return" or "other"
+
+    make_desc DESC ; LEVEL
+        Make a C comment out of DESC optionally indenting it LEVEL spaces.
+
+    make_c_method CLASS ITEM PARMS ; %ACCUM
+        Create the phototype for a C method which is really a function.
+
+        Parms is any of:
+
+          mode: code generation mode
+          no_aspell: if true do not include aspell in the name
+          this_name: name for the paramater representing the current object
+
+    call_c_method CLASS ITEM PARMS ; %ACCUM
+        Like make_c_method but instead returns the appropriate string to
+        call the function. If the function returns a non-void type the
+        string will be prefixed with a return statement.
+
+    form_c_method CLASS ITEM PARMS ; %ACCUM
+        Like make_c_method except that it returns the array:
+
+          ($func, $data, $parms, $accum)
+
+        which is suitable for passing into make_func. It will return an
+        empty array if it can not make a method from ITEM.
+
+    make_cxx_method ITEM PARMS ; %ACCUM
+        Create the phototype for a C++ method.
+
+        Parms is one of:
+
+          mode: code generation mode
+
diff --git a/common/Makefile.in b/common/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/common/asc_ctype.hpp b/common/asc_ctype.hpp
new file mode 100644 (file)
index 0000000..2d48305
--- /dev/null
@@ -0,0 +1,44 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASC_CTYPE__HPP
+#define ASC_CTYPE__HPP
+
+namespace acommon {
+
+  static inline bool asc_isspace(int c) 
+  {
+    return c==' ' || c=='\n' || c=='\r' || c=='\t' || c=='\f' || c=='\v';
+  }
+
+  static inline bool asc_isdigit(int c)
+  {
+    return '0' <= c && c <= '9';
+  }
+  static inline bool asc_islower(int c)
+  {
+    return 'a' <= c && c <= 'z';
+  }
+  static inline bool asc_isupper(int c)
+  {
+    return 'A' <= c && c <= 'Z';
+  }
+  static inline bool asc_isalpha(int c)
+  {
+    return asc_islower(c) || asc_isupper(c);
+  }
+  static inline int asc_tolower(int c)
+  {
+    return asc_isupper(c) ? c + 0x20 : c;
+  }
+  static inline int asc_toupper(int c)
+  {
+    return asc_islower(c) ? c - 0x20 : c;
+  }
+  
+}
+
+#endif
diff --git a/common/basic_list.hpp b/common/basic_list.hpp
new file mode 100644 (file)
index 0000000..c8072fe
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef autil__basic_list_hh
+#define autil__basic_list_hh
+
+#include <list>
+//#include <ext/slist>
+
+//#include <assert.h>
+
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+// BasicList is a simple list structure which can either be
+//   implemented as a singly or doubly linked list.  I created it
+//   because a Singly liked list is not part of the C++ standard however
+//   the Doubly Linked list does not have the same methods as the doubly
+//   linked list because the singly linked list has a bunch of special
+//   methods to address the fact that it is far faster to insert
+//   elements before the position pointed to by an iterator is far faster
+//   than inserting elements after the current position which is what is
+//   normally done.  Thus it is not possibly to simply substitute a singly
+//   linked list with a doubly linked list by changing the name of the
+//   container used.  This list currently acts as a wrapper for the list
+//   (doubly linked list) STL class however it can also very easily be
+//   written as a wrapper for the slist (singly linked list) class when
+//   it is available (slist is part of the SGI STL but not the C++
+//   standard) for better performance.
+
+namespace acommon {
+
+  template <typename T>
+  class BasicList {
+    //typedef __gnu_cxx::slist<T> List;
+    typedef std::list<T> List;
+    List data_;
+  public:
+    // treat the iterators as forward iterators only
+    typedef typename List::iterator       iterator;
+    typedef typename List::const_iterator const_iterator;
+    typedef typename List::size_type      size_type;
+    bool empty() {return data_.empty();}
+    void clear() {data_.clear();}
+    size_type size() {return data_.size();}
+    iterator begin() {return data_.begin();}
+    iterator end()   {return data_.end();}
+    const_iterator begin() const {return data_.begin();}
+    const_iterator end()   const {return data_.end();}
+    void push_front(const T & item) {data_.push_front(item);}
+    void pop_front() {data_.pop_front();}
+          T & front() {return data_.front();}
+    const T & front() const {return data_.front();}
+    void swap(BasicList & other) {data_.swap(other.data_);}
+    void sort() {data_.sort();}
+    template<class Pred> void sort(Pred pr) {data_.sort(pr);}
+    void splice_into (BasicList & other, iterator prev, iterator cur)
+    {
+      //++prev;
+      //assert (prev == cur);
+      data_.splice(data_.begin(),other.data_,cur);
+      //data_.splice_after(data_.begin(), prev);
+    }
+  };
+
+}
+
+#endif
diff --git a/common/block_slist-t.hpp b/common/block_slist-t.hpp
new file mode 100644 (file)
index 0000000..669c4bd
--- /dev/null
@@ -0,0 +1,55 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef autil__block_slist_t_hh
+#define autil__block_slist_t_hh
+
+#include <cstdlib>
+#include <cassert>
+
+#include "block_slist.hpp"
+
+namespace acommon {
+
+  template <typename T>
+  void BlockSList<T>::add_block(unsigned int num) 
+  {
+    assert (reinterpret_cast<const char *>(&(first_available->next))
+           == 
+           reinterpret_cast<const char *>(first_available));
+    const unsigned int ptr_offset = 
+      reinterpret_cast<const char *>(&(first_available->data)) 
+      - reinterpret_cast<const char *>(&(first_available->next));
+    void * block = malloc( ptr_offset + sizeof(Node) * num );
+    *reinterpret_cast<void **>(block) = first_block;
+    first_block = block;
+    Node * first = reinterpret_cast<Node *>(reinterpret_cast<char *>(block) + ptr_offset);
+    Node * i = first;
+    Node * last = i + num;
+    while (i + 1 != last) {
+      i->next = i + 1;
+      i = i + 1;
+    }
+    i->next = 0;
+    first_available = first;  
+  }
+
+  template <typename T>
+  void BlockSList<T>::clear()
+  {
+    void * i = first_block;
+    while (i != 0) {
+      void * n = *reinterpret_cast<void **>(i);
+      free(i);
+      i = n;
+    }
+    first_block = 0;
+    first_available = 0;
+  }
+
+}
+
+#endif
diff --git a/common/block_slist.hpp b/common/block_slist.hpp
new file mode 100644 (file)
index 0000000..3c9a025
--- /dev/null
@@ -0,0 +1,76 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef autil__block_slist_hh
+#define autil__block_slist_hh
+
+// BlockSList provided a pool of nodes which can be used for singly
+//   linked lists.  Nodes are allocated in large chunks instead of
+//   one at a time which means that getting a new node is very fast.
+//   Nodes returned are not initialized in any way.  A placement new
+//   must be used to construct the the data member and the destructor
+//   must explicitly be called.
+
+namespace acommon {
+
+  template <typename T>
+  class BlockSList {
+
+  public:
+
+    struct Node {
+      Node * next;
+      T      data;
+    };
+
+  private:
+
+    void * first_block;
+    Node * first_available;
+
+    BlockSList(const BlockSList &);
+    BlockSList & operator= (const BlockSList &);
+  
+  public:
+
+    BlockSList() 
+      // Default constructor.
+      // add_block must be called before any nodes are available
+      : first_block(0), first_available(0) {};
+
+    Node * new_node() 
+      // return a new_node if one is available or null otherwise
+      // Note: the node's data member is NOT initialized in any way.
+    {
+      Node * n = first_available;
+      if (n != 0)
+       first_available = first_available->next;
+      return n;
+    }
+
+    void remove_node(Node * n) 
+      // marks the node as availabe
+      // Note: the node's data memeber destructor is NOT called
+    {
+      n->next = first_available;
+      first_available = n;
+    }
+
+    void add_block(unsigned int num);
+    // allocate enough memory for an additional num nodes
+
+    void clear();
+    // free all memory.  add_block must then be called before any nodes
+    // are available
+    // Note: the node's data member destructor is NOT called
+    
+
+    ~BlockSList() {clear();}
+  
+  };
+
+}
+#endif
diff --git a/common/cache-t.hpp b/common/cache-t.hpp
new file mode 100644 (file)
index 0000000..c326fd2
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef ACOMMON_CACHE_T__HPP
+#define ACOMMON_CACHE_T__HPP
+
+#include "lock.hpp"
+#include "cache.hpp"
+
+//#include "iostream.hpp"
+
+namespace acommon {
+
+class GlobalCacheBase
+{
+public:
+  mutable Mutex lock;
+public: // but don't use
+  const char * name;
+  GlobalCacheBase * next;
+  GlobalCacheBase * * prev;
+protected:
+  Cacheable * first;
+  void del(Cacheable * d);
+  void add(Cacheable * n);
+  GlobalCacheBase(const char * n);
+  ~GlobalCacheBase();
+public:
+  void release(Cacheable * d);
+  void detach(Cacheable * d);
+  void detach_all();
+};
+
+template <class D>
+class GlobalCache : public GlobalCacheBase
+{
+public:
+  typedef D Data;
+  typedef typename Data::CacheKey Key;
+public:
+  GlobalCache(const char * n) : GlobalCacheBase(n) {}
+  // "find" and "add" will _not_ acquire a lock
+  Data * find(const Key & key) {
+    D * cur = static_cast<D *>(first);
+    while (cur && !cur->cache_key_eq(key))
+      cur = static_cast<D *>(cur->next);
+    return cur;
+  }
+  void add(Data * n) {GlobalCacheBase::add(n);}
+  // "release" and "detach" _will_ acquire a lock
+  void release(Data * d) {GlobalCacheBase::release(d);}
+  void detach(Data * d) {GlobalCacheBase::detach(d);}
+};
+
+template <class Data>
+PosibErr<Data *> get_cache_data(GlobalCache<Data> * cache, 
+                                typename Data::CacheConfig * config, 
+                                const typename Data::CacheKey & key)
+{
+  LOCK(&cache->lock);
+  Data * n = cache->find(key);
+  //CERR << "Getting " << key << " for " << cache->name << "\n";
+  if (n) {
+    n->refcount++;
+    return n;
+  }
+  PosibErr<Data *> res = Data::get_new(key, config);
+  if (res.has_err()) {
+    //CERR << "ERROR\n"; 
+    return res;
+  }
+  n = res.data;
+  cache->add(n);
+  //CERR << "LOADED FROM DISK\n";
+  return n;
+}
+
+template <class Data>
+PosibErr<Data *> get_cache_data(GlobalCache<Data> * cache, 
+                                typename Data::CacheConfig * config, 
+                                typename Data::CacheConfig2 * config2,
+                                const typename Data::CacheKey & key)
+{
+  LOCK(&cache->lock);
+  Data * n = cache->find(key);
+  //CERR << "Getting " << key << "\n";
+  if (n) {
+    n->refcount++;
+    return n;
+  }
+  PosibErr<Data *> res = Data::get_new(key, config, config2);
+  if (res.has_err()) {
+    //CERR << "ERROR\n"; 
+    return res;
+  }
+  n = res.data;
+  cache->add(n);
+  //CERR << "LOADED FROM DISK\n";
+  return n;
+}
+
+}
+
+#endif
diff --git a/common/cache.cpp b/common/cache.cpp
new file mode 100644 (file)
index 0000000..c4884e5
--- /dev/null
@@ -0,0 +1,122 @@
+#include <assert.h>
+
+#include "stack_ptr.hpp"
+#include "cache-t.hpp"
+
+namespace acommon {
+
+static StackPtr<Mutex> global_cache_lock(new Mutex);
+static GlobalCacheBase * first_cache = 0;
+
+void Cacheable::copy() const
+{
+  //CERR << "COPY\n";
+  LOCK(&cache->lock);
+  copy_no_lock();
+}
+
+void GlobalCacheBase::del(Cacheable * n)
+{
+  *n->prev = n->next;
+  if (n->next) n->next->prev = n->prev;
+  n->next = 0;
+  n->prev = 0;
+}
+
+void GlobalCacheBase::add(Cacheable * n) 
+{
+  assert(n->refcount > 0);
+  n->next = first;
+  n->prev = &first;
+  if (first) first->prev = &n->next;
+  first = n;
+  n->cache = this;
+}
+
+void GlobalCacheBase::release(Cacheable * d) 
+{
+  //CERR << "RELEASE\n";
+  LOCK(&lock);
+  d->refcount--;
+  assert(d->refcount >= 0);
+  if (d->refcount != 0) return;
+  //CERR << "DEL\n";
+  if (d->attached()) del(d);
+  delete d;
+}
+
+void GlobalCacheBase::detach(Cacheable * d)
+{
+  LOCK(&lock);
+  if (d->attached()) del(d);
+}
+
+void GlobalCacheBase::detach_all()
+{
+  LOCK(&lock);
+  Cacheable * p = first;
+  while (p) {
+    *p->prev = 0;
+    p->prev = 0;
+    p = p->next;
+  }
+}
+
+void release_cache_data(GlobalCacheBase * cache, const Cacheable * d)
+{
+  cache->release(const_cast<Cacheable *>(d));
+}
+
+GlobalCacheBase::GlobalCacheBase(const char * n)
+  : name (n)
+{
+  LOCK(global_cache_lock);
+  next = first_cache;
+  prev = &first_cache;
+  if (first_cache) first_cache->prev = &next;
+  first_cache = this;
+}
+
+GlobalCacheBase::~GlobalCacheBase()
+{
+  detach_all();
+  LOCK(global_cache_lock);
+  *prev = next;
+  if (next) next->prev = prev;
+}
+
+bool reset_cache(const char * which)
+{
+  LOCK(global_cache_lock);
+  bool any = false;
+  for (GlobalCacheBase * i = first_cache; i; i = i->next)
+  {
+    if (which && strcmp(i->name, which) == 0) {i->detach_all(); any = true;}
+  }
+  return any;
+}
+
+extern "C"
+int aspell_reset_cache(const char * which)
+{
+  return reset_cache(which);
+}
+
+#if 0
+
+struct CacheableImpl : public Cacheable
+{
+  class CacheConfig;
+  typedef String CacheKey;
+  bool cache_key_eq(const CacheKey &);
+  static PosibErr<CacheableImpl *> get_new(const CacheKey &, CacheConfig *);
+};
+
+template
+PosibErr<CacheableImpl *> get_cache_data(GlobalCache<CacheableImpl> *, 
+                                         CacheableImpl::CacheConfig *, 
+                                         const CacheableImpl::CacheKey &);
+
+#endif
+
+}
diff --git a/common/cache.hpp b/common/cache.hpp
new file mode 100644 (file)
index 0000000..8770afc
--- /dev/null
@@ -0,0 +1,86 @@
+#ifndef ACOMMON_CACHE__HPP
+#define ACOMMON_CACHE__HPP
+
+#include "posib_err.hpp"
+
+namespace acommon {
+
+class GlobalCacheBase;
+template <class Data> class GlobalCache;
+
+// get_cache_data (both versions) and release_cache_data will acquires
+// the cache's lock
+
+template <class Data>
+PosibErr<Data *> get_cache_data(GlobalCache<Data> *, 
+                                typename Data::CacheConfig *, 
+                                const typename Data::CacheKey &);
+template <class Data>
+PosibErr<Data *> get_cache_data(GlobalCache<Data> *, 
+                                typename Data::CacheConfig *, 
+                                typename Data::CacheConfig2 *, 
+                                const typename Data::CacheKey &);
+
+class Cacheable;
+void release_cache_data(GlobalCacheBase *, const Cacheable *);
+static inline void release_cache_data(const GlobalCacheBase * c, const Cacheable * d)
+{
+  release_cache_data(const_cast<GlobalCacheBase *>(c),d);
+}
+
+class Cacheable
+{
+public: // but don't use
+  Cacheable * next;
+  Cacheable * * prev;
+  mutable int refcount;
+  GlobalCacheBase * cache;
+public:
+  bool attached() {return prev;}
+  void copy_no_lock() const {refcount++;}
+  void copy() const; // Acquires cache->lock
+  void release() const {release_cache_data(cache,this);} // Acquires cache->lock
+  Cacheable(GlobalCacheBase * c = 0) : next(0), prev(0), refcount(1), cache(c) {}
+  virtual ~Cacheable() {}
+};
+
+template <class Data>
+class CachePtr
+{
+  Data * ptr;
+
+public:
+  void reset(Data * p) {
+    if (ptr) ptr->release();
+    ptr = p;
+  }
+  void copy(Data * p) {if (p) p->copy(); reset(p);}
+  Data * release() {Data * tmp = ptr; ptr = 0; return tmp;}
+
+  Data & operator*  () const {return *ptr;}
+  Data * operator-> () const {return ptr;}
+  Data * get()         const {return ptr;}
+  operator Data * ()   const {return ptr;}
+
+  CachePtr() : ptr(0) {}
+  CachePtr(const CachePtr & other) {ptr = other.ptr; if (ptr) ptr->copy();}
+  void operator=(const CachePtr & other) {copy(other.ptr);}
+  ~CachePtr() {reset(0);}
+};
+
+template <class Data>
+PosibErr<void> setup(CachePtr<Data> & res,
+                     GlobalCache<Data> * cache, 
+                     typename Data::CacheConfig * config, 
+                     const typename Data::CacheKey & key) {
+  PosibErr<Data *> pe = get_cache_data(cache, config, key);
+  if (pe.has_err()) return pe;
+  res.reset(pe.data);
+  return no_err;
+}
+
+bool reset_cache(const char * = 0);
+
+}
+
+#endif
diff --git a/common/can_have_error.cpp b/common/can_have_error.cpp
new file mode 100644 (file)
index 0000000..42bfb79
--- /dev/null
@@ -0,0 +1,30 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "error.hpp"
+#include "can_have_error.hpp"
+
+namespace acommon {
+
+  CanHaveError::CanHaveError(Error * e)
+    : err_(e)
+  {}
+
+  CanHaveError::~CanHaveError() 
+  {}
+
+  CanHaveError::CanHaveError(const CanHaveError & other)
+    : err_(other.err_) {}
+
+
+  CanHaveError & CanHaveError::operator=(const CanHaveError & other)
+  {
+    err_ = other.err_;
+    return *this;
+  }
+
+
+}
diff --git a/common/can_have_error.hpp b/common/can_have_error.hpp
new file mode 100644 (file)
index 0000000..aae735d
--- /dev/null
@@ -0,0 +1,29 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_CAN_HAVE_ERROR__HPP
+#define ASPELL_CAN_HAVE_ERROR__HPP
+
+#include "copy_ptr.hpp"
+#include "error.hpp"
+
+namespace acommon {
+
+struct Error;
+
+class CanHaveError {
+ public:
+  CanHaveError(Error * e = 0);
+  CopyPtr<Error> err_;
+  virtual ~CanHaveError();
+  CanHaveError(const CanHaveError &);
+  CanHaveError & operator=(const CanHaveError &);
+};
+
+
+}
+
+#endif /* ASPELL_CAN_HAVE_ERROR__HPP */
diff --git a/common/char_vector.hpp b/common/char_vector.hpp
new file mode 100644 (file)
index 0000000..6ef061b
--- /dev/null
@@ -0,0 +1,18 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001-2003 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_CHAR_VECTOR__HPP
+#define ASPELL_CHAR_VECTOR__HPP
+
+#include "string.hpp"
+#include "ostream.hpp"
+
+namespace acommon
+{
+  typedef String CharVector;
+}
+
+#endif
diff --git a/common/clone_ptr-t.hpp b/common/clone_ptr-t.hpp
new file mode 100644 (file)
index 0000000..05e7b79
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef autil__clone_ptr_t
+#define autil__clone_ptr_t
+
+#include "clone_ptr.hpp"
+#include <typeinfo>
+#include "generic_copy_ptr-t.hpp"
+
+namespace acommon {
+
+  template <typename T>
+  inline T * ClonePtr<T>::Parms::clone(const T * ptr) const {
+    return ptr->clone();
+  }
+
+  template <typename T>
+  void ClonePtr<T>::Parms::assign(T * & rhs, const T * lhs) const {
+    if (typeid(*rhs) == typeid(*lhs)) {
+      rhs->assign(lhs);
+    } else {
+      T * temp = rhs;
+      rhs = lhs->clone();
+      delete temp;
+    }
+  }
+
+  template <typename T>
+  inline void ClonePtr<T>::Parms::del(T * ptr) {
+    delete ptr;
+  }
+
+}
+
+#endif
diff --git a/common/clone_ptr.hpp b/common/clone_ptr.hpp
new file mode 100644 (file)
index 0000000..a4a6eef
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef autil__clone_ptr
+#define autil__clone_ptr
+
+#include "generic_copy_ptr.hpp"
+
+namespace acommon {
+
+  template <typename T>
+  class ClonePtr 
+  {
+    struct Parms {
+      T * clone(const T * ptr) const;
+      void assign(T * & rhs, const T * lhs) const;
+      void del(T * ptr);
+    };
+    GenericCopyPtr<T, Parms> impl;
+
+  public:
+
+    explicit ClonePtr(T * p = 0) : impl(p) {}
+    ClonePtr(const ClonePtr & other) : impl(other.impl) {}
+
+    ClonePtr & operator=(const ClonePtr & other) {
+      impl = other.impl; 
+      return *this;
+    }
+
+    void assign(const T * other) {impl.assign(other);}
+    void reset(T * other = 0)    {impl.reset(other);}
+    
+    T & operator*  () const {return *impl;}
+    T * operator-> () const {return impl;}
+    T * get()         const {return impl;}
+    operator T * ()   const {return impl;}
+
+    T * release() {return impl.release();}
+  };
+  
+}
+
+#endif
+
diff --git a/common/config.cpp b/common/config.cpp
new file mode 100644 (file)
index 0000000..b1e919b
--- /dev/null
@@ -0,0 +1,1525 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+//#include <stdio.h>
+//#define DEBUG {fprintf(stderr,"File: %s(%i)\n",__FILE__,__LINE__);}
+#include <string.h>
+#include <stdlib.h>
+#include "ndebug.hpp"
+#include <assert.h>
+
+#include "dirs.h"
+#include "settings.h"
+
+#ifdef USE_LOCALE
+# include <locale.h>
+#endif
+
+#ifdef HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+
+#include "cache.hpp"
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "errors.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "itemize.hpp"
+#include "mutable_container.hpp"
+#include "posib_err.hpp"
+#include "string_map.hpp"
+#include "stack_ptr.hpp"
+#include "char_vector.hpp"
+#include "convert.hpp"
+#include "vararray.hpp"
+#include "string_list.hpp"
+
+#include "gettext.h"
+
+#include "iostream.hpp"
+
+#define DEFAULT_LANG "en_US"
+
+// NOTE: All filter options are now stored with he "f-" prefix.  However
+//   during lookup, the non prefix version is also recognized.
+
+// The "place_holder" field in Entry and the "Vector<int>" parameter of
+// commit_all are there to deal with the fact than when spacing
+// options on the command line such as "--key what" it can not be
+// determined if "what" should be a the value of "key" or if it should
+// be treated as an independent arg.  This is because "key" may
+// be a filter option.  Filter options KeyInfo are not loaded until
+// after a commit which is not done at the time the options are being
+// read in from the command line.  (If the command line arguments are
+// read in after the other settings are read in and committed than any
+// options setting any of the config files will be ignored.  Thus the
+// command line must be parsed and options must be added in an
+// uncommitted state).  So the solution is to assume it is an
+// independent arg until told otherwise, the position in the arg array
+// is stored along with the value in the "place_holder" field.  When
+// the config class is finally committed and it is determined that
+// "what" is really a value for key the stored arg position is pushed
+// onto the Vector<int> so it can be removed from the arg array.  In
+// the case of a "lset-*" this will happen in multiple config
+// "Entry"s, so care is taken to only add the arg position once.
+
+namespace acommon {
+
+  const char * const keyinfo_type_name[4] = {
+    N_("string"), N_("integer"), N_("boolean"), N_("list")
+  };
+
+  const int Config::num_parms_[9] = {1, 1, 0, 0, 0,
+                                     1, 1, 1, 0};
+  
+  typedef Notifier * NotifierPtr;
+  
+  Config::Config(ParmStr name,
+                const KeyInfo * mainbegin, 
+                const KeyInfo * mainend)
+    : name_(name)
+    , first_(0), insert_point_(&first_), others_(0)
+    , committed_(true), attached_(false)
+    , md_info_list_index(-1)
+    , settings_read_in_(false)
+    , load_filter_hook(0)
+    , filter_mode_notifier(0)
+  {
+    keyinfo_begin = mainbegin;
+    keyinfo_end   = mainend;
+    extra_begin = 0;
+    extra_end   = 0;
+  }
+
+  Config::~Config() {
+    del();
+  }
+
+  Config::Config(const Config & other) 
+  {
+    copy(other);
+  }
+  
+  Config & Config::operator= (const Config & other)
+  {
+    del();
+    copy(other);
+    return *this;
+  }
+  
+  Config * Config::clone() const {
+    return new Config(*this);
+  }
+
+  void Config::assign(const Config * other) {
+    *this = *(const Config *)(other);
+  }
+
+  void Config::copy(const Config & other)
+  {
+    assert(other.others_ == 0);
+    others_ = 0;
+
+    name_ = other.name_;
+
+    committed_ = other.committed_;
+    attached_ = other.attached_;
+    settings_read_in_ = other.settings_read_in_;
+
+    keyinfo_begin = other.keyinfo_begin;
+    keyinfo_end   = other.keyinfo_end;
+    extra_begin   = other.extra_begin;
+    extra_end     = other.extra_end;
+    filter_modules = other.filter_modules;
+
+#ifdef HAVE_LIBDL
+    filter_modules_ptrs = other.filter_modules_ptrs;
+    for (Vector<Cacheable *>::iterator i = filter_modules_ptrs.begin();
+         i != filter_modules_ptrs.end();
+         ++i)
+      (*i)->copy();
+#endif
+
+    md_info_list_index = other.md_info_list_index;
+
+    insert_point_ = 0;
+    Entry * const * src  = &other.first_;
+    Entry * * dest = &first_;
+    while (*src) 
+    {
+      *dest = new Entry(**src);
+      if (src == other.insert_point_)
+        insert_point_ = dest;
+      src  = &((*src)->next);
+      dest = &((*dest)->next);
+    }
+    if (insert_point_ == 0)
+      insert_point_ = dest;
+    *dest = 0;
+
+    Vector<Notifier *>::const_iterator i   = other.notifier_list.begin();
+    Vector<Notifier *>::const_iterator end = other.notifier_list.end();
+
+    for(; i != end; ++i) {
+      Notifier * tmp = (*i)->clone(this);
+      if (tmp != 0)
+       notifier_list.push_back(tmp);
+    }
+  }
+
+  void Config::del()
+  {
+    while (first_) {
+      Entry * tmp = first_->next;
+      delete first_;
+      first_ = tmp;
+    }
+
+    while (others_) {
+      Entry * tmp = others_->next;
+      delete first_;
+      others_ = tmp;
+    }
+
+    Vector<Notifier *>::iterator i   = notifier_list.begin();
+    Vector<Notifier *>::iterator end = notifier_list.end();
+
+    for(; i != end; ++i) {
+      delete (*i);
+      *i = 0;
+    }
+    
+    notifier_list.clear();
+
+#ifdef HAVE_LIBDL
+    filter_modules.clear();
+    for (Vector<Cacheable *>::iterator i = filter_modules_ptrs.begin();
+         i != filter_modules_ptrs.end();
+         ++i)
+      (*i)->release();
+    filter_modules_ptrs.clear();
+#endif
+  }
+
+  void Config::set_filter_modules(const ConfigModule * modbegin, 
+                                 const ConfigModule * modend)
+  {
+    assert(filter_modules_ptrs.empty());
+    filter_modules.clear();
+    filter_modules.assign(modbegin, modend);
+  }
+
+  void Config::set_extra(const KeyInfo * begin, 
+                              const KeyInfo * end) 
+  {
+    extra_begin = begin;
+    extra_end   = end;
+  }
+
+  //
+  //
+  //
+
+
+  //
+  // Notifier methods
+  //
+
+  NotifierEnumeration * Config::notifiers() const 
+  {
+    return new NotifierEnumeration(notifier_list);
+  }
+
+  bool Config::add_notifier(Notifier * n) 
+  {
+    Vector<Notifier *>::iterator i   = notifier_list.begin();
+    Vector<Notifier *>::iterator end = notifier_list.end();
+
+    while (i != end && *i != n)
+      ++i;
+
+    if (i != end) {
+    
+      return false;
+    
+    } else {
+
+      notifier_list.push_back(n);
+      return true;
+
+    }
+  }
+
+  bool Config::remove_notifier(const Notifier * n) 
+  {
+    Vector<Notifier *>::iterator i   = notifier_list.begin();
+    Vector<Notifier *>::iterator end = notifier_list.end();
+
+    while (i != end && *i != n)
+      ++i;
+
+    if (i == end) {
+    
+      return false;
+    
+    } else {
+
+      delete *i;
+      notifier_list.erase(i);
+      return true;
+
+    }
+  }
+
+  bool Config::replace_notifier(const Notifier * o, 
+                                     Notifier * n) 
+  {
+    Vector<Notifier *>::iterator i   = notifier_list.begin();
+    Vector<Notifier *>::iterator end = notifier_list.end();
+
+    while (i != end && *i != o)
+      ++i;
+
+    if (i == end) {
+    
+      return false;
+    
+    } else {
+
+      delete *i;
+      *i = n;
+      return true;
+
+    }
+  }
+
+  //
+  // retrieve methods
+  //
+
+  const Config::Entry * Config::lookup(const char * key) const
+  {
+    const Entry * res = 0;
+    const Entry * cur = first_;
+
+    while (cur) {
+      if (cur->key == key && cur->action != NoOp)  res = cur;
+      cur = cur->next;
+    }
+
+    if (!res || res->action == Reset) return 0;
+    return res;
+  }
+
+  bool Config::have(ParmStr key) const 
+  {
+    PosibErr<const KeyInfo *> pe = keyinfo(key);
+    if (pe.has_err()) {pe.ignore_err(); return false;}
+    return lookup(pe.data->name);
+  }
+
+  PosibErr<String> Config::retrieve(ParmStr key) const
+  {
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+    if (ki->type == KeyInfoList) return make_err(key_not_string, ki->name);
+
+    const Entry * cur = lookup(ki->name);
+
+    return cur ? cur->value : get_default(ki);
+  }
+
+  PosibErr<String> Config::retrieve_any(ParmStr key) const
+  {
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+
+    if (ki->type != KeyInfoList) {
+      const Entry * cur = lookup(ki->name);
+      return cur ? cur->value : get_default(ki);
+    } else {
+      StringList sl;
+      RET_ON_ERR(retrieve_list(key, &sl));
+      StringListEnumeration els = sl.elements_obj();
+      const char * s;
+      String val;
+      while ( (s = els.next()) != 0 ) {
+        val += s;
+        val += '\n';
+      }
+      val.pop_back();
+      return val;
+    }
+  }
+
+  PosibErr<bool> Config::retrieve_bool(ParmStr key) const
+  {
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+    if (ki->type != KeyInfoBool) return make_err(key_not_bool, ki->name);
+
+    const Entry * cur = lookup(ki->name);
+
+    String value(cur ? cur->value : get_default(ki));
+
+    if (value == "false") return false;
+    else                  return true;
+  }
+  
+  PosibErr<int> Config::retrieve_int(ParmStr key) const
+  {
+    assert(committed_); // otherwise the value may not be an integer
+                        // as it has not been verified.
+
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+    if (ki->type != KeyInfoInt) return make_err(key_not_int, ki->name);
+
+    const Entry * cur = lookup(ki->name);
+
+    String value(cur ? cur->value : get_default(ki));
+
+    return atoi(value.str());
+  }
+
+  void Config::lookup_list(const KeyInfo * ki,
+                           MutableContainer & m,
+                           bool include_default) const
+  {
+    const Entry * cur = first_;
+    const Entry * first_to_use = 0;
+
+    while (cur) {
+      if (cur->key == ki->name && 
+          (first_to_use == 0 || 
+           cur->action == Reset || cur->action == Set 
+           || cur->action == ListClear)) 
+        first_to_use = cur;
+      cur = cur->next;
+    }
+
+    cur = first_to_use;
+
+    if (include_default && 
+        (!cur || 
+         !(cur->action == Set || cur->action == ListClear)))
+    {
+      String def = get_default(ki);
+      separate_list(def, m, true);
+    }
+
+    if (cur && cur->action == Reset) {
+      cur = cur->next;
+    }
+
+    if (cur && cur->action == Set) {
+      if (!include_default) m.clear();
+      m.add(cur->value);
+      cur = cur->next;
+    }
+
+    if (cur && cur->action == ListClear) {
+      if (!include_default) m.clear();
+      cur = cur->next;
+    }
+
+    while (cur) {
+      if (cur->key == ki->name) {
+        if (cur->action == ListAdd)
+          m.add(cur->value);
+        else if (cur->action == ListRemove)
+          m.remove(cur->value);
+      }
+      cur = cur->next;
+    }
+  }
+
+  PosibErr<void> Config::retrieve_list(ParmStr key, 
+                                      MutableContainer * m) const
+  {
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+    if (ki->type != KeyInfoList) return make_err(key_not_list, ki->name);
+
+    lookup_list(ki, *m, true);
+
+    return no_err;
+  }
+
+  static const KeyInfo * find(ParmStr key, 
+                             const KeyInfo * i, 
+                             const KeyInfo * end) 
+  {
+    while (i != end) {
+      if (strcmp(key, i->name) == 0)
+       return i;
+      ++i;
+    }
+    return i;
+  }
+
+  static const ConfigModule * find(ParmStr key, 
+                                  const ConfigModule * i, 
+                                  const ConfigModule * end) 
+  {
+    while (i != end) {
+      if (strcmp(key, i->name) == 0)
+       return i;
+      ++i;
+    }
+    return i;
+  }
+
+  PosibErr<const KeyInfo *> Config::keyinfo(ParmStr key) const
+  {
+    typedef PosibErr<const KeyInfo *> Ret;
+    {
+      const KeyInfo * i;
+      i = acommon::find(key, keyinfo_begin, keyinfo_end);
+      if (i != keyinfo_end) return Ret(i);
+      
+      i = acommon::find(key, extra_begin, extra_end);
+      if (i != extra_end) return Ret(i);
+      
+      const char * s = strncmp(key, "f-", 2) == 0 ? key + 2 : key.str();
+      const char * h = strchr(s, '-');
+      if (h == 0) goto err;
+
+      String k(s, h - s);
+      const ConfigModule * j = acommon::find(k,
+                                            filter_modules.pbegin(),
+                                            filter_modules.pend());
+      
+      if (j == filter_modules.pend() && load_filter_hook && committed_) {
+        // FIXME: This isn't quite right
+        PosibErrBase pe = load_filter_hook(const_cast<Config *>(this), k);
+        pe.ignore_err();
+        j = acommon::find(k,
+                          filter_modules.pbegin(),
+                          filter_modules.pend());
+      }
+
+      if (j == filter_modules.pend()) goto err;
+
+      i = acommon::find(key, j->begin, j->end);
+      if (i != j->end) return Ret(i);
+      
+      if (strncmp(key, "f-", 2) != 0) k = "f-";
+      else                            k = "";
+      k += key;
+      i = acommon::find(k, j->begin, j->end);
+      if (i != j->end) return Ret(i);
+    }
+  err:  
+    return Ret().prim_err(unknown_key, key);
+  }
+
+  static bool proc_locale_str(ParmStr lang, String & final_str)
+  {
+    if (lang == 0) return false;
+    const char * i = lang;
+    if (!(asc_islower(i[0]) && asc_islower(i[1]))) return false;
+    final_str.assign(i, 2);
+    i += 2;
+    if (! (i[0] == '_' || i[0] == '-')) return true;
+    i += 1;
+    if (!(asc_isupper(i[0]) && asc_isupper(i[1]))) return true;
+    final_str += '_';
+    final_str.append(i, 2);
+    return true;
+  }
+
+  static void get_lang_env(String & str) 
+  {
+    if (proc_locale_str(getenv("LC_MESSAGES"), str)) return;
+    if (proc_locale_str(getenv("LANG"), str)) return;
+    if (proc_locale_str(getenv("LANGUAGE"), str)) return;
+    str = DEFAULT_LANG;
+  }
+
+#ifdef USE_LOCALE
+
+  static void get_lang(String & final_str) 
+  {
+    // FIXME: THIS IS NOT THREAD SAFE
+    String locale = setlocale (LC_ALL, NULL);
+    if (locale == "C")
+      setlocale (LC_ALL, "");
+    const char * lang = setlocale (LC_MESSAGES, NULL);
+    bool res = proc_locale_str(lang, final_str);
+    if (locale == "C")
+      setlocale(LC_MESSAGES, locale.c_str());
+    if (!res)
+      get_lang_env(final_str);
+  }
+
+#else
+
+  static inline void get_lang(String & str) 
+  {
+    get_lang_env(str);
+  }
+
+#endif
+
+#if defined USE_LOCALE && defined HAVE_LANGINFO_CODESET
+
+  static inline void get_encoding(const Config & c, String & final_str)
+  {
+    const char * codeset = nl_langinfo(CODESET);
+    if (ascii_encoding(c, codeset)) codeset = "none";
+    final_str = codeset;
+  }
+
+#else
+
+  static inline void get_encoding(const Config &, String & final_str)
+  {
+    final_str = "none";
+  }
+
+#endif
+
+  String Config::get_default(const KeyInfo * ki) const
+  {
+    bool   in_replace = false;
+    String final_str;
+    String replace;
+    const char * i = ki->def;
+    if (*i == '!') { // special cases
+      ++i;
+    
+      if (strcmp(i, "lang") == 0) {
+        
+        const Entry * entry;
+        if (entry = lookup("actual-lang"), entry) {
+          return entry->value;
+        } else if (have("master")) {
+         final_str = "<unknown>";
+       } else {
+         get_lang(final_str);
+       }
+       
+      } else if (strcmp(i, "encoding") == 0) {
+
+        get_encoding(*this, final_str);
+
+      } else if (strcmp(i, "special") == 0) {
+
+       // do nothing
+
+      } else {
+      
+       abort(); // this should not happen
+      
+      }
+    
+    } else for(; *i; ++i) {
+    
+      if (!in_replace) {
+
+       if (*i == '<') {
+         in_replace = true;
+       } else {
+         final_str += *i;
+       }
+
+      } else { // in_replace
+      
+       if (*i == '/' || *i == ':' || *i == '|' || *i == '#' || *i == '^') {
+         char sep = *i;
+         String second;
+         ++i;
+         while (*i != '\0' && *i != '>') second += *i++;
+         if (sep == '/') {
+           String s1 = retrieve(replace);
+           String s2 = retrieve(second);
+           final_str += add_possible_dir(s1, s2);
+         } else if (sep == ':') {
+           String s1 = retrieve(replace);
+           final_str += add_possible_dir(s1, second);
+         } else if (sep == '#') {
+           String s1 = retrieve(replace);
+           assert(second.size() == 1);
+           unsigned int s = 0;
+           while (s != s1.size() && s1[s] != second[0]) ++s;
+           final_str.append(s1, s);
+         } else if (sep == '^') {
+           String s1 = retrieve(replace);
+           String s2 = retrieve(second);
+           final_str += figure_out_dir(s1, s2);
+         } else { // sep == '|'
+           assert(replace[0] == '$');
+           const char * env = getenv(replace.c_str()+1);
+           final_str += env ? env : second;
+         }
+         replace = "";
+         in_replace = false;
+
+       } else if (*i == '>') {
+
+         final_str += retrieve(replace).data;
+         replace = "";
+         in_replace = false;
+
+       } else {
+
+         replace += *i;
+
+       }
+
+      }
+      
+    }
+    return final_str;
+  }
+
+  PosibErr<String> Config::get_default(ParmStr key) const
+  {
+    RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki);
+    return get_default(ki);
+  }
+
+
+
+#define TEST(v,l,a)                         \
+  do {                                      \
+    if (len == l && memcmp(s, v, l) == 0) { \
+      if (action) *action = a;              \
+      return c + 1;                         \
+    }                                       \
+  } while (false)
+
+  const char * Config::base_name(const char * s, Action * action)
+  {
+    if (action) *action = Set;
+    const char * c = strchr(s, '-');
+    if (!c) return s;
+    unsigned len = c - s;
+    TEST("reset",   5, Reset);
+    TEST("enable",  6, Enable);
+    TEST("dont",    4, Disable);
+    TEST("disable", 7, Disable);
+    TEST("lset",    4, ListSet);
+    TEST("rem",     3, ListRemove);
+    TEST("remove",  6, ListRemove);
+    TEST("add",     3, ListAdd);
+    TEST("clear",   5, ListClear);
+    return s;
+  }
+
+#undef TEST
+
+  void separate_list(ParmStr value, AddableContainer & out, bool do_unescape)
+  {
+    unsigned len = value.size();
+    
+    VARARRAY(char, buf, len + 1);
+    memcpy(buf, value, len + 1);
+    
+    len = strlen(buf);
+    char * s = buf;
+    char * end = buf + len;
+      
+    while (s < end)
+    {
+      if (do_unescape) while (*s == ' ' || *s == '\t') ++s;
+      char * b = s;
+      char * e = s;
+      while (*s != '\0') {
+        if (do_unescape && *s == '\\') {
+          ++s;
+          if (*s == '\0') break;
+          e = s;
+          ++s;
+        } else {
+          if (*s == ':') break;
+          if (!do_unescape || (*s != ' ' && *s != '\t')) e = s;
+          ++s;
+        }
+      }
+      if (s != b) {
+        ++e;
+        *e = '\0';
+        if (do_unescape) unescape(b);
+      
+        out.add(b);
+      }
+      ++s;
+    }
+  }
+
+  void combine_list(String & res, const StringList & in)
+  {
+    res.clear();
+    StringListEnumeration els = in.elements_obj();
+    const char * s = 0;
+    while ( (s = els.next()) != 0) 
+    {
+      for (; *s; ++s) {
+        if (*s == ':')
+          res.append('\\');
+        res.append(*s);
+      }
+      res.append(':');
+    }
+    if (res.back() == ':') res.pop_back();
+  }
+
+  struct ListAddHelper : public AddableContainer 
+  {
+    Config * config;
+    Config::Entry * orig_entry;
+    PosibErr<bool> add(ParmStr val);
+  };
+
+  PosibErr<bool> ListAddHelper::add(ParmStr val)
+  {
+    Config::Entry * entry = new Config::Entry(*orig_entry);
+    entry->value = val;
+    entry->action = Config::ListAdd;
+    config->set(entry);
+    return true;
+  }
+
+  void Config::replace_internal(ParmStr key, ParmStr value)
+  {
+    Entry * entry = new Entry;
+    entry->key = key;
+    entry->value = value;
+    entry->action = Set;
+    entry->next = *insert_point_;
+    *insert_point_ = entry;
+    insert_point_ = &entry->next;
+  }
+
+  PosibErr<void> Config::replace(ParmStr key, ParmStr value)
+  {
+    Entry * entry = new Entry;
+    entry->key = key;
+    entry->value = value;
+    return set(entry);
+  }
+  
+  PosibErr<void> Config::remove(ParmStr key)
+  {
+    Entry * entry = new Entry;
+    entry->key = key;
+    entry->action = Reset;
+    return set(entry);
+  }
+
+  PosibErr<void> Config::set(Entry * entry0, bool do_unescape)
+  {
+    StackPtr<Entry> entry(entry0);
+
+    if (entry->action == NoOp)
+      entry->key = base_name(entry->key.str(), &entry->action);
+
+    if (num_parms(entry->action) == 0 && !entry->value.empty()) 
+    {
+      if (entry->place_holder == -1) {
+        switch (entry->action) {
+        case Reset:
+          return make_err(no_value_reset, entry->key);
+        case Enable:
+          return make_err(no_value_enable, entry->key);
+        case Disable:
+          return make_err(no_value_disable, entry->key);
+        case ListClear:
+          return make_err(no_value_clear, entry->key);
+        default:
+          abort(); // this shouldn't happen
+        }
+      } else {
+        entry->place_holder = -1;
+      }
+    }
+
+    if (entry->action != ListSet) {
+
+      switch (entry->action) {
+      case Enable:
+        entry->value = "true";
+        entry->action = Set;
+        break;
+      case Disable:
+        entry->value = "false";
+        entry->action = Set;
+        break;
+      default:
+        ;
+      }
+      if (do_unescape) unescape(entry->value.mstr());
+
+      entry->next = *insert_point_;
+      *insert_point_ = entry;
+      insert_point_ = &entry->next;
+      entry.release();
+      if (committed_) RET_ON_ERR(commit(entry0)); // entry0 == entry
+      
+    } else { // action == ListSet
+
+      Entry * ent = new Entry;
+      ent->key = entry->key;
+      ent->action = ListClear;
+      set(ent);
+
+      ListAddHelper helper;
+      helper.config = this;
+      helper.orig_entry = entry;
+
+      separate_list(entry->value.str(), helper, do_unescape);
+    }
+    return no_err;
+  }
+
+  PosibErr<void> Config::merge(const Config & other)
+  {
+    const Entry * src  = other.first_;
+    while (src) 
+    {
+      Entry * entry = new Entry(*src);
+      entry->next = *insert_point_;
+      *insert_point_ = entry;
+      insert_point_ = &entry->next;
+      if (committed_) RET_ON_ERR(commit(entry));
+      src = src->next;
+    }
+    return no_err;
+  }
+
+  void Config::lang_config_merge(const Config & other,
+                                 int which, ParmStr data_encoding)
+  {
+    Conv to_utf8;
+    to_utf8.setup(*this, data_encoding, "utf-8", NormTo);
+    const Entry * src  = other.first_;
+    Entry * * ip = &first_;
+    while (src)
+    {
+      const KeyInfo * l_ki = other.keyinfo(src->key);
+      if (l_ki->other_data == which) {
+        const KeyInfo * c_ki = keyinfo(src->key);
+        Entry * entry = new Entry(*src);
+        if (c_ki->flags & KEYINFO_UTF8)
+          entry->value = to_utf8(entry->value);
+        entry->next = *ip;
+        *ip = entry;
+        ip = &entry->next;
+      }
+      src = src->next;
+    }
+  }
+
+
+#define NOTIFY_ALL(fun)                                       \
+  do {                                                        \
+    Vector<Notifier *>::iterator   i = notifier_list.begin(); \
+    Vector<Notifier *>::iterator end = notifier_list.end();   \
+    while (i != end) {                                        \
+      RET_ON_ERR((*i)->fun);                                  \
+      ++i;                                                    \
+    }                                                         \
+  } while (false)
+
+  PosibErr<int> Config::commit(Entry * entry, Conv * conv) 
+  {
+    PosibErr<const KeyInfo *> pe = keyinfo(entry->key);
+    {
+      if (pe.has_err()) goto error;
+      
+      const KeyInfo * ki = pe;
+
+      entry->key = ki->name;
+      
+      // FIXME: This is the correct thing to do but it causes problems
+      //        with changing a filter mode in "pipe" mode and probably
+      //        elsewhere.
+      //if (attached_ && !(ki->flags & KEYINFO_MAY_CHANGE)) {
+      //  pe = make_err(cant_change_value, entry->key);
+      //  goto error;
+      //}
+
+      int place_holder = entry->place_holder;
+      
+      if (conv && ki->flags & KEYINFO_UTF8)
+        entry->value = (*conv)(entry->value);
+
+      if (ki->type != KeyInfoList && list_action(entry->action)) {
+        pe = make_err(key_not_list, entry->key);
+        goto error;
+      }
+      
+      assert(ki->def != 0); // if null this key should never have values
+      // directly added to it
+      String value(entry->action == Reset ? get_default(ki) : entry->value);
+      
+      switch (ki->type) {
+        
+      case KeyInfoBool: {
+
+        bool val;
+      
+        if  (value.empty() || entry->place_holder != -1) {
+          // if entry->place_holder != -1 than IGNORE the value no
+          // matter what it is
+          entry->value = "true";
+          val = true;
+          place_holder = -1;
+        } else if (value == "true") {
+          val = true;
+        } else if (value == "false") {
+          val = false;
+        } else {
+          pe = make_err(bad_value, entry->key, value,
+                        /* TRANSLATORS: "true" and "false" are literal
+                         * values and should not be translated.*/
+                        _("either \"true\" or \"false\""));
+          goto error;
+        }
+
+        NOTIFY_ALL(item_updated(ki, val));
+        break;
+        
+      } case KeyInfoString:
+        
+        NOTIFY_ALL(item_updated(ki, value));
+        break;
+        
+      case KeyInfoInt: 
+      {
+        int num;
+        
+        if (sscanf(value.str(), "%i", &num) == 1 && num >= 0) {
+          NOTIFY_ALL(item_updated(ki, num));
+        } else {
+          pe = make_err(bad_value, entry->key, value, _("a positive integer"));
+          goto error;
+        }
+        
+        break;
+      }
+      case KeyInfoList:
+        
+        NOTIFY_ALL(list_updated(ki));
+        break;
+        
+      }
+      return place_holder;
+    }
+  error:
+    entry->action = NoOp;
+    if (!entry->file.empty())
+      return pe.with_file(entry->file, entry->line_num);
+    else
+      return (PosibErrBase &)pe;
+  }
+
+#undef NOTIFY_ALL
+
+
+  /////////////////////////////////////////////////////////////////////
+  /////////////////////////////////////////////////////////////////////
+
+  class PossibleElementsEmul : public KeyInfoEnumeration
+  {
+  private:
+    bool include_extra;
+    bool include_modules;
+    bool module_changed;
+    const Config * cd;
+    const KeyInfo * i;
+    const ConfigModule * m;
+  public:
+    PossibleElementsEmul(const Config * d, bool ic, bool im)
+      : include_extra(ic), include_modules(im), 
+        module_changed(false), cd(d), i(d->keyinfo_begin), m(0) {}
+
+    KeyInfoEnumeration * clone() const {
+      return new PossibleElementsEmul(*this);
+    }
+
+    void assign(const KeyInfoEnumeration * other) {
+      *this = *(const PossibleElementsEmul *)(other);
+    }
+
+    virtual bool active_filter_module_changed(void) {
+      return module_changed;
+    }
+
+    const char * active_filter_module_name(void){
+      if (m != 0)
+        return m->name;
+      return "";
+    }
+
+    virtual const char * active_filter_module_desc(void) {
+      if (m != 0)
+        return m->desc;
+      return "";
+    }
+
+    const KeyInfo * next() {
+      if (i == cd->keyinfo_end) {
+       if (include_extra)
+         i = cd->extra_begin;
+       else
+         i = cd->extra_end;
+      }
+      
+      module_changed = false;
+      if (i == cd->extra_end) {
+       m = cd->filter_modules.pbegin();
+       if (!include_modules || m == cd->filter_modules.pend()) return 0;
+       else {
+          i = m->begin;
+          module_changed = true;
+        }
+      }
+
+      if (m == 0){
+       return i++;
+      }
+
+      if (m == cd->filter_modules.pend()){
+       return 0;
+      }
+
+      while (i == m->end) {
+       ++m;
+       if (m == cd->filter_modules.pend()) return 0;
+       else {
+          i = m->begin;
+          module_changed = true;
+        }
+      }
+
+      return i++;
+    }
+
+    bool at_end() const {
+      return (m == cd->filter_modules.pend());
+    }
+  };
+
+  KeyInfoEnumeration *
+  Config::possible_elements(bool include_extra, bool include_modules) const
+  {
+    return new PossibleElementsEmul(this, include_extra, include_modules);
+  }
+
+  struct ListDefaultDump : public AddableContainer 
+  {
+    OStream & out;
+    bool first;
+    const char * first_prefix;
+    unsigned num_blanks;
+    ListDefaultDump(OStream & o);
+    PosibErr<bool> add(ParmStr d);
+  };
+  
+  ListDefaultDump::ListDefaultDump(OStream & o) 
+    : out(o), first(false)
+  {
+    first_prefix = _("# default: ");
+    num_blanks = strlen(first_prefix - 1);
+  }
+
+  PosibErr<bool> ListDefaultDump::add(ParmStr d) 
+  {
+    if (first) {
+      out.write(first_prefix);
+    } else {
+      out.put('#');
+      for (unsigned i = 0; i != num_blanks; ++i)
+        out.put(' ');
+    }
+    VARARRAY(char, buf, d.size() * 2 + 1);
+    escape(buf, d);
+    out.printl(buf);
+    first = false;
+    return true;
+  }
+
+  class ListDump : public MutableContainer 
+  {
+    OStream & out;
+    const char * name;
+  public:
+    ListDump(OStream & o, ParmStr n) 
+      : out(o), name(n) {}
+    PosibErr<bool> add(ParmStr d);
+    PosibErr<bool> remove(ParmStr d);
+    PosibErr<void> clear();
+  };
+
+  PosibErr<bool> ListDump::add(ParmStr d) {
+    VARARRAY(char, buf, d.size() * 2 + 1);
+    escape(buf, d);
+    out.printf("add-%s %s\n", name, buf);
+    return true;
+  }
+  PosibErr<bool> ListDump::remove(ParmStr d) {
+    VARARRAY(char, buf, d.size() * 2 + 1);
+    escape(buf, d);
+    out.printf("remove-%s %s\n", name, buf);
+    return true;
+  }
+  PosibErr<void> ListDump::clear() {
+    out.printf("clear-%s\n", name);
+    return no_err;
+  }
+
+  void Config::write_to_stream(OStream & out, 
+                              bool include_extra) 
+  {
+    KeyInfoEnumeration * els = possible_elements(include_extra);
+    const KeyInfo * i;
+    String buf;
+    String obuf;
+    String def;
+    bool have_value;
+
+    while ((i = els->next()) != 0) {
+      if (i->desc == 0) continue;
+
+      if (els->active_filter_module_changed()) {
+        out.printf(_("\n"
+                     "#######################################################################\n"
+                     "#\n"
+                     "# Filter: %s\n"
+                     "#   %s\n"
+                     "#\n"
+                     "# configured as follows:\n"
+                     "\n"),
+                   els->active_filter_module_name(),
+                   _(els->active_filter_module_desc()));
+      }
+
+      obuf.clear();
+      have_value = false;
+
+      obuf.printf("# %s (%s)\n#   %s\n",
+                  i->name, _(keyinfo_type_name[i->type]), _(i->desc));
+      if (i->def != 0) {
+       if (i->type != KeyInfoList) {
+          buf.resize(strlen(i->def) * 2 + 1);
+          escape(buf.data(), i->def);
+          obuf.printf("# default: %s", buf.data());
+          def = get_default(i);
+          if (def != i->def) {
+            buf.resize(def.size() * 2 + 1);
+            escape(buf.data(), def.str());
+            obuf.printf(" = %s", buf.data());
+          }
+          obuf << '\n';
+          const Entry * entry = lookup(i->name);
+         if (entry) {
+            have_value = true;
+            buf.resize(entry->value.size() * 2 + 1);
+            escape(buf.data(), entry->value.str());
+           obuf.printf("%s %s\n", i->name, buf.data());
+          }
+       } else {
+          unsigned s = obuf.size();
+          ListDump ld(obuf, i->name);
+          lookup_list(i, ld, false);
+          have_value = s != obuf.size();
+       }
+      }
+      obuf << '\n';
+      if (!(i->flags & KEYINFO_HIDDEN) || have_value)
+        out.write(obuf);
+    }
+    delete els;
+  }
+
+  PosibErr<void> Config::read_in(IStream & in, ParmStr id) 
+  {
+    String buf;
+    DataPair dp;
+    while (getdata_pair(in, dp, buf)) {
+      to_lower(dp.key);
+      Entry * entry = new Entry;
+      entry->key = dp.key;
+      entry->value = dp.value;
+      entry->file = id;
+      entry->line_num = dp.line_num;
+      RET_ON_ERR(set(entry, true));
+    }
+    return no_err;
+  }
+
+  PosibErr<void> Config::read_in_file(ParmStr file) {
+    FStream in;
+    RET_ON_ERR(in.open(file, "r"));
+    return read_in(in, file);
+  }
+
+  PosibErr<void> Config::read_in_string(ParmStr str, const char * what) {
+    StringIStream in(str);
+    return read_in(in, what);
+  }
+
+
+  PosibErr<bool> Config::read_in_settings(const Config * other)
+  {
+    if (settings_read_in_) return false;
+
+    bool was_committed = committed_;
+    set_committed_state(false);
+
+    if (other && other->settings_read_in_) {
+
+      assert(empty());
+      del(); // to clean up any notifiers and similar stuff
+      copy(*other);
+
+    } else {
+
+      if (other) merge(*other);
+
+      const char * env = getenv("ASPELL_CONF");
+      if (env != 0) { 
+        insert_point_ = &first_;
+        RET_ON_ERR(read_in_string(env, _("ASPELL_CONF env var")));
+      }
+      
+      {
+      insert_point_ = &first_;
+      PosibErrBase pe = read_in_file(retrieve("per-conf-path"));
+      if (pe.has_err() && !pe.has_err(cant_read_file)) return pe;
+      }
+      
+      {
+        insert_point_ = &first_;
+        PosibErrBase pe = read_in_file(retrieve("conf-path"));
+        if (pe.has_err() && !pe.has_err(cant_read_file)) return pe;
+      }
+
+      if (was_committed)
+        RET_ON_ERR(commit_all());
+
+      settings_read_in_ = true;
+    }
+
+    return true;
+  }
+
+  PosibErr<void> Config::commit_all(Vector<int> * phs, const char * codeset)
+  {
+    committed_ = true;
+    others_ = first_;
+    first_ = 0;
+    insert_point_ = &first_;
+    Conv to_utf8;
+    if (codeset)
+      RET_ON_ERR(to_utf8.setup(*this, codeset, "utf-8", NormTo));
+    while (others_) {
+      *insert_point_ = others_;
+      others_ = others_->next;
+      (*insert_point_)->next = 0;
+      RET_ON_ERR_SET(commit(*insert_point_, codeset ? &to_utf8 : 0), int, place_holder);
+      if (phs && place_holder != -1 && (phs->empty() || phs->back() != place_holder))
+        phs->push_back(place_holder);
+      insert_point_ = &((*insert_point_)->next);
+    }
+    return no_err;
+  }
+
+  PosibErr<void> Config::set_committed_state(bool val) {
+    if (val && !committed_) {
+      RET_ON_ERR(commit_all());
+    } else if (!val && committed_) {
+      assert(empty());
+      committed_ = false;
+    }
+    return no_err;
+  }
+
+
+#ifdef ENABLE_WIN32_RELOCATABLE
+#  define HOME_DIR "<prefix>"
+#  define PERSONAL "<lang>.pws"
+#  define REPL     "<lang>.prepl"
+#else
+#  define HOME_DIR "<$HOME|./>"
+#  define PERSONAL ".aspell.<lang>.pws"
+#  define REPL     ".aspell.<lang>.prepl"
+#endif
+
+  static const KeyInfo config_keys[] = {
+    // the description should be under 50 chars
+    {"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0}
+    , {"actual-lang",     KeyInfoString, "", 0} 
+    , {"conf",     KeyInfoString, "aspell.conf",
+       /* TRANSLATORS: The remaing strings in config.cpp should be kept
+          under 50 characters, begin with a lower case character and not
+          include any trailing punctuation marks. */
+       N_("main configuration file")}
+    , {"conf-dir", KeyInfoString, CONF_DIR,
+       N_("location of main configuration file")}
+    , {"conf-path",     KeyInfoString, "<conf-dir/conf>", 0}
+    , {"data-dir", KeyInfoString, DATA_DIR,
+       N_("location of language data files")}
+    , {"dict-alias", KeyInfoList, "",
+       N_("create dictionary aliases")}
+    , {"dict-dir", KeyInfoString, DICT_DIR,
+       N_("location of the main word list")}
+    , {"encoding",   KeyInfoString, "!encoding",
+       N_("encoding to expect data to be in"), KEYINFO_COMMON}
+    , {"filter",   KeyInfoList  , "url",
+       N_("add or removes a filter"), KEYINFO_MAY_CHANGE}
+    , {"filter-path", KeyInfoList, DICT_DIR,
+       N_("path(s) aspell looks for filters")}
+    //, {"option-path", KeyInfoList, DATA_DIR,
+    //   N_("path(s) aspell looks for options descriptions")}
+    , {"mode",     KeyInfoString, "url",
+       N_("filter mode"), KEYINFO_COMMON}
+    , {"extra-dicts", KeyInfoList, "",
+       N_("extra dictionaries to use")}
+    , {"home-dir", KeyInfoString, HOME_DIR,
+       N_("location for personal files")}
+    , {"ignore",   KeyInfoInt   , "1",
+       N_("ignore words <= n chars"), KEYINFO_MAY_CHANGE}
+    , {"ignore-accents" , KeyInfoBool, "false",
+       /* TRANSLATORS: It is OK if this is longer than 50 chars */
+       N_("ignore accents when checking words -- CURRENTLY IGNORED"), KEYINFO_MAY_CHANGE | KEYINFO_HIDDEN}
+    , {"ignore-case", KeyInfoBool  , "false",
+       N_("ignore case when checking words"), KEYINFO_MAY_CHANGE}
+    , {"ignore-repl", KeyInfoBool  , "false",
+       N_("ignore commands to store replacement pairs"), KEYINFO_MAY_CHANGE}
+    , {"jargon",     KeyInfoString, "",
+       N_("extra information for the word list"), KEYINFO_HIDDEN}
+    , {"keyboard", KeyInfoString, "standard",
+       N_("keyboard definition to use for typo analysis")}
+    , {"lang", KeyInfoString, "<language-tag>",
+       N_("language code"), KEYINFO_COMMON}
+    , {"language-tag", KeyInfoString, "!lang",
+       N_("deprecated, use lang instead"), KEYINFO_HIDDEN}
+    , {"local-data-dir", KeyInfoString, "<actual-dict-dir>",
+       N_("location of local language data files")     }
+    , {"master",        KeyInfoString, "<lang>",
+       N_("base name of the main dictionary to use"), KEYINFO_COMMON}
+    , {"master-flags",  KeyInfoString, "", 0}
+    , {"master-path",   KeyInfoString, "<dict-dir/master>",   0}
+    , {"module",        KeyInfoString, "default",
+       N_("set module name"), KEYINFO_HIDDEN}
+    , {"module-search-order", KeyInfoList, "",
+       N_("search order for modules"), KEYINFO_HIDDEN}
+    , {"normalize", KeyInfoBool, "true",
+       N_("enable Unicode normalization")}
+    , {"norm-required", KeyInfoBool, "false",
+       N_("Unicode normalization required for current lang")}
+    , {"norm-form", KeyInfoString, "nfc",
+       /* TRANSLATORS: the values after the ':' are literal
+          values and should not be translated. */
+       N_("Unicode normalization form: none, nfd, nfc, comp")}
+    , {"norm-strict", KeyInfoBool, "false",
+       N_("avoid lossy conversions when normalization")}
+    , {"per-conf", KeyInfoString, ".aspell.conf",
+       N_("personal configuration file")}
+    , {"per-conf-path", KeyInfoString, "<home-dir/per-conf>", 0}
+    , {"personal", KeyInfoString, PERSONAL,
+       N_("personal dictionary file name")}
+    , {"personal-path", KeyInfoString, "<home-dir/personal>", 0}
+    , {"prefix",   KeyInfoString, PREFIX,
+       N_("prefix directory")}
+    , {"repl",     KeyInfoString, REPL,
+       N_("replacements list file name") }
+    , {"repl-path",     KeyInfoString, "<home-dir/repl>",     0}
+    , {"run-together",        KeyInfoBool,  "false",
+       N_("consider run-together words legal"), KEYINFO_MAY_CHANGE}
+    , {"run-together-limit",  KeyInfoInt,   "2",
+       N_("maximum number that can be strung together"), KEYINFO_MAY_CHANGE}
+    , {"run-together-min",    KeyInfoInt,   "3",
+       N_("minimal length of interior words"), KEYINFO_MAY_CHANGE}
+    , {"save-repl", KeyInfoBool  , "true",
+       N_("save replacement pairs on save all")}
+    , {"set-prefix", KeyInfoBool, "true",
+       N_("set the prefix based on executable location")}
+    , {"size",          KeyInfoString, "+60",
+       N_("size of the word list")}
+    , {"spelling",   KeyInfoString, "",
+       N_("no longer used"), KEYINFO_HIDDEN}
+    , {"sug-mode",   KeyInfoString, "normal",
+       N_("suggestion mode"), KEYINFO_MAY_CHANGE | KEYINFO_COMMON}
+    , {"sug-edit-dist", KeyInfoInt, "1",
+       /* TRANSLATORS: "sug-mode" is a literal value and should not be
+          translated. */
+       N_("edit distance to use, override sug-mode default")}
+    , {"sug-typo-analysis", KeyInfoBool, "true",
+       N_("use typo analysis, override sug-mode default")}
+    , {"sug-repl-table", KeyInfoBool, "true",
+       N_("use replacement tables, override sug-mode default")}
+    , {"sug-split-char", KeyInfoList, "\\ :-",
+       N_("characters to insert when a word is split"), KEYINFO_UTF8}
+    , {"use-other-dicts", KeyInfoBool, "true",
+       N_("use personal, replacement & session dictionaries")}
+    , {"variety", KeyInfoList, "",
+       N_("extra information for the word list")}
+    , {"word-list-path", KeyInfoList, DATA_DIR,
+       N_("search path for word list information files"), KEYINFO_HIDDEN}
+    , {"warn", KeyInfoBool, "true",
+       N_("enable warnings")}
+    
+    
+    //
+    // These options are generally used when creating dictionaries
+    // and may also be specified in the language data file
+    //
+
+    , {"affix-char",          KeyInfoString, "/", // FIXME: Implement
+       /* TRANSLATORS: It is OK if this is longer than 50 chars */
+       N_("indicator for affix flags in word lists -- CURRENTLY IGNORED"), KEYINFO_UTF8 | KEYINFO_HIDDEN}
+    , {"affix-compress", KeyInfoBool, "false",
+       N_("use affix compression when creating dictionaries")}
+    , {"clean-affixes", KeyInfoBool, "true",
+       N_("remove invalid affix flags")}
+    , {"clean-words", KeyInfoBool, "false",
+       N_("attempts to clean words so that they are valid")}
+    , {"invisible-soundslike", KeyInfoBool, "false",
+       N_("compute soundslike on demand rather than storing")} 
+    , {"partially-expand",  KeyInfoBool, "false",
+       N_("partially expand affixes for better suggestions")}
+    , {"skip-invalid-words",  KeyInfoBool, "true",
+       N_("skip invalid words")}
+    , {"validate-affixes", KeyInfoBool, "true",
+       N_("check if affix flags are valid")}
+    , {"validate-words", KeyInfoBool, "true",
+       N_("check if words are valid")}
+    
+    //
+    // These options are specific to the "aspell" utility.  They are
+    // here so that they can be specified in configuration files.
+    //
+    , {"backup",  KeyInfoBool, "true",
+       N_("create a backup file by appending \".bak\"")}
+    , {"byte-offsets", KeyInfoBool, "false",
+       N_("use byte offsets instead of character offsets")}
+    , {"guess", KeyInfoBool, "false",
+       N_("create missing root/affix combinations"), KEYINFO_MAY_CHANGE}
+    , {"keymapping", KeyInfoString, "aspell",
+       N_("keymapping for check mode: \"aspell\" or \"ispell\"")}
+    , {"reverse", KeyInfoBool, "false",
+       N_("reverse the order of the suggest list")}
+    , {"suggest", KeyInfoBool, "true",
+       N_("suggest possible replacements"), KEYINFO_MAY_CHANGE}
+    , {"time"   , KeyInfoBool, "false",
+       N_("time load time and suggest time in pipe mode"), KEYINFO_MAY_CHANGE}
+    };
+
+  const KeyInfo * config_impl_keys_begin = config_keys;
+  const KeyInfo * config_impl_keys_end   
+  = config_keys + sizeof(config_keys)/sizeof(KeyInfo);
+
+  Config * new_basic_config() { 
+    aspell_gettext_init();
+    return new Config("aspell",
+                     config_impl_keys_begin,
+                     config_impl_keys_end);
+  }
+  
+}
+
diff --git a/common/config.hpp b/common/config.hpp
new file mode 100644 (file)
index 0000000..d2f0101
--- /dev/null
@@ -0,0 +1,281 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_CONFIG___HPP
+#define ASPELL_CONFIG___HPP
+
+#include "can_have_error.hpp"
+#include "key_info.hpp"
+#include "posib_err.hpp"
+#include "string.hpp"
+#include "vector.hpp"
+
+namespace acommon {
+
+  class OStream;
+  class KeyInfoEnumeration;
+  class StringPairEnumeration;
+  class MutableContainer;
+  class Cacheable;
+  struct Conv;
+
+  // The Config class is used to hold configuration information.
+  // it has a set of keys which it will except.  Inserting or even
+  // trying to look at a key that it does not know will produce
+  // an error.  Extra accepted keys can be added with the set_extra 
+  // method.
+
+  // Keys taged with KEYINFO_UTF8 are expected to be in UTF-8 format.
+  // Keys with file/dir names may contain 8-bit characters and must
+  //   remain untranslated
+  // All other keys are expected to only contain ASCII characters.
+
+  class Config;
+
+  struct ConfigModule {
+    const char * name; 
+    const char * file; // path of shared object or dll
+    const char * desc; // description of module
+    const KeyInfo * begin;
+    const KeyInfo * end;
+  };
+
+  class Notifier {
+  public:
+    // returns a copy if a copy should be made otherwise returns null
+    virtual Notifier * clone(Config *) const {return 0;}
+    virtual ~Notifier() {}
+
+    virtual PosibErr<void> item_updated(const KeyInfo *, bool)    {return no_err;}
+    virtual PosibErr<void> item_updated(const KeyInfo *, int)     {return no_err;}
+    virtual PosibErr<void> item_updated(const KeyInfo *, ParmStr) {return no_err;}
+    virtual PosibErr<void> list_updated(const KeyInfo *)          {return no_err;}
+  };
+
+  class PossibleElementsEmul;
+  class NotifierEnumeration;
+  class GetLine;
+  class MDInfoListofLists;
+
+  static const bool REPLACE = true;
+  static const bool INSERT  = false;
+
+  // prefixes
+  //
+  // reset - resets a value to the default
+  //
+  // enable - sets a boolean value to true
+  // dont, disable - sets a boolean value to false
+  // -- setting a boolean value to an empty string is the same as setting 
+  //    it to true
+  //
+  // lset - sets a list, items seperated by ':'
+  // rem, remove - removes item from a list
+  // add - add an item to a list
+  // clear - removes all items from a list
+  // -- setting a list item directly, ie with out a prefix, is the same as 
+  //    setting it to a single value
+
+  class Config : public CanHaveError {
+    // copy and destructor provided
+    friend class MDInfoListofLists;
+
+  public:
+    enum Action {NoOp, Set, Reset, Enable, Disable, 
+                 ListSet, ListAdd, ListRemove, ListClear};
+
+    struct Entry {
+      Entry * next;
+      String key;
+      String value;
+      String file;
+      unsigned line_num;
+      Action action;
+      bool need_conv;
+      short place_holder;
+      Entry() : line_num(0), action(NoOp), 
+                need_conv(false), place_holder(-1) {}
+    };
+
+  private:
+    static const int num_parms_[9];
+
+  public:
+    static inline bool list_action(Action a) {return (int)a >= (int)ListAdd; }
+    static inline int num_parms(Action a) {return num_parms_[a];}
+
+  private:
+    String    name_;
+
+    Entry * first_;
+    Entry * * insert_point_;
+    Entry * others_;
+
+    bool committed_;
+    bool attached_;    // if attached can't copy
+    Vector<Notifier *> notifier_list;
+
+    friend class PossibleElementsEmul;
+
+    const KeyInfo       * keyinfo_begin;
+    const KeyInfo       * keyinfo_end;
+    const KeyInfo       * extra_begin;
+    const KeyInfo       * extra_end;
+
+    int md_info_list_index;
+
+    void copy(const Config & other);
+    void del();
+
+    PosibErr<int> commit(Entry * entry, Conv * conv = 0);
+
+    bool settings_read_in_;
+
+  public:
+
+    // the first
+    // if the second parameter is set than flaged options will be
+    // converted to utf-8 if needed
+    PosibErr<void> commit_all(Vector<int> * = 0, const char * codeset = 0);
+
+    PosibErr<void> replace(ParmStr, ParmStr);
+    PosibErr<void> remove(ParmStr);
+
+    bool empty() const {return !first_;}
+
+    PosibErr<void> merge(const Config & other);
+
+    void lang_config_merge(const Config & other,
+                           int which, ParmStr codeset);
+
+    bool settings_read_in() {return settings_read_in_;}
+
+    PosibErr<void> set_committed_state(bool val);
+
+    const Entry * lookup(const char * key) const;
+    void lookup_list(const KeyInfo * ki, MutableContainer & m, 
+                     bool include_default) const;
+
+    String temp_str;
+
+    PosibErr<const ConfigModule *> (* load_filter_hook)(Config * config, ParmStr value);
+    Notifier * filter_mode_notifier;
+
+    Vector<ConfigModule>      filter_modules;
+    Vector<Cacheable *> filter_modules_ptrs;
+
+    Config(ParmStr name,
+          const KeyInfo * mainbegin, 
+          const KeyInfo * mainend);
+
+    Config(const Config &);
+    ~Config();
+    Config & operator= (const Config &);
+
+    bool get_attached() const {return attached_;}
+    void set_attached(bool a) {attached_ = a;}
+
+    Config * clone() const;
+    void assign(const Config * other);
+
+    const char * name() const {return name_.c_str();}
+
+    NotifierEnumeration * notifiers() const;
+  
+    bool add_notifier    (      Notifier *);
+    bool remove_notifier (const Notifier *);
+    bool replace_notifier(const Notifier *, Notifier *);
+
+    void set_extra(const KeyInfo * begin, const KeyInfo * end);
+
+    void set_filter_modules(const ConfigModule * modbegin, const ConfigModule * modend);
+
+    static const char * base_name(const char * name, Action * action = 0);
+  
+    PosibErr<const KeyInfo *> keyinfo(ParmStr key) const;
+
+    KeyInfoEnumeration * possible_elements(bool include_extra = true,
+                                           bool include_modules = true) const;
+    
+    StringPairEnumeration * elements() {return 0;} // FIXME
+    
+    String get_default(const KeyInfo * ki) const;
+    PosibErr<String> get_default(ParmStr) const;
+
+    PosibErr<String> retrieve(ParmStr key) const;
+
+    // will also retrive a list, with one value per line
+    PosibErr<String> retrieve_any(ParmStr key) const;
+  
+    bool have (ParmStr key) const;
+
+    PosibErr<void> retrieve_list (ParmStr key, MutableContainer *) const;
+    PosibErr<bool> retrieve_bool (ParmStr key) const;
+    PosibErr<int>  retrieve_int  (ParmStr key) const;
+    
+    // will take ownership of entry, even if there is an error
+    PosibErr<void> set(Entry * entry, bool do_unescape = false);
+      
+    void replace_internal (ParmStr, ParmStr);
+    
+    void write_to_stream(OStream & out, bool include_extra = false);
+
+    PosibErr<bool> read_in_settings(const Config * = 0);
+
+    PosibErr<void> read_in(IStream & in, ParmStr id = "");
+    PosibErr<void> read_in_file(ParmStr file);
+    PosibErr<void> read_in_string(ParmStr str, const char * what = "");
+  };
+
+  Config * new_config();
+  Config * new_basic_config(); // config which doesn't require any
+                              // external symbols
+
+  class NotifierEnumeration {
+    // no copy and destructor needed
+    Vector<Notifier *>::const_iterator i;
+    Vector<Notifier *>::const_iterator end;
+  public:
+    NotifierEnumeration(const Vector<Notifier *> & b) 
+      : i(b.begin()), end(b.end()) {}
+    const Notifier * next() {
+      const Notifier * temp = *i;
+      if (i != end)
+       ++i;
+      return temp;
+    }
+    bool at_end() const {return i == end;}
+  };
+
+  class KeyInfoEnumeration {
+  public:
+    typedef const KeyInfo * Value;
+    virtual KeyInfoEnumeration * clone() const = 0;
+    virtual void assign(const KeyInfoEnumeration *) = 0;
+    virtual bool at_end() const = 0;
+    virtual const KeyInfo * next() = 0;
+    virtual const char * active_filter_module_name(void) = 0;
+    virtual const char * active_filter_module_desc(void) = 0;
+    virtual bool active_filter_module_changed(void) = 0;
+    virtual ~KeyInfoEnumeration() {}
+  };
+
+  static const unsigned KEYINFO_MAY_CHANGE = 1 << 0;
+  static const unsigned KEYINFO_UTF8       = 1 << 1;
+  static const unsigned KEYINFO_HIDDEN     = 1 << 2;
+  static const unsigned KEYINFO_COMMON     = 1 << 4;
+  
+  class AddableContainer;
+  class StringList;
+
+  void separate_list(ParmStr value, AddableContainer & out, bool do_unescape = true);
+  void combine_list(String & res, const StringList &);
+
+
+}
+
+#endif
+
diff --git a/common/convert.cpp b/common/convert.cpp
new file mode 100644 (file)
index 0000000..2bbd8e0
--- /dev/null
@@ -0,0 +1,1095 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+#include "asc_ctype.hpp"
+#include "convert.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "config.hpp"
+#include "errors.hpp"
+#include "stack_ptr.hpp"
+#include "cache-t.hpp"
+#include "file_util.hpp"
+#include "file_data_util.hpp"
+#include "vararray.hpp"
+
+#include "iostream.hpp"
+
+#include "gettext.h"
+
+namespace acommon {
+
+  typedef unsigned char  byte;
+  typedef unsigned char  Uni8;
+  typedef unsigned short Uni16;
+  typedef unsigned int   Uni32;
+
+
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Lookups
+  //
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // ToUniLookup
+  //
+
+  class ToUniLookup 
+  {
+    Uni32 data[256];
+    static const Uni32 npos = (Uni32)(-1);
+  public:
+    void reset();
+    Uni32 operator[] (char key) const {return data[(unsigned char)key];}
+    bool have(char key) const {return data[(unsigned char)key] != npos;}
+    bool insert(char key, Uni32 value);
+  };
+
+  void ToUniLookup::reset() 
+  {
+    for (int i = 0; i != 256; ++i)
+      data[i] = npos;
+  }
+
+  bool ToUniLookup::insert(char key, Uni32 value)
+  {
+    if (data[(unsigned char)key] != npos) 
+      return false;
+    data[(unsigned char)key] = value;
+    return true;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // FromUniLookup
+  //
+
+  // Assumes that the maximum number of items in the table is 256
+  // Also assumes (unsigned char)i == i % 256
+
+  // Based on the iso-8859-* character sets it is very fast, almost all
+  // lookups involving no more than 2 comparisons.
+  // NO looks ups involded more than 3 compassions.
+  // Also, no division (or modules) is done whatsoever.
+
+
+  struct UniItem {
+    Uni32 key;
+    char  value;
+  };
+
+  class FromUniLookup 
+  {
+  private:
+    static const Uni32 npos = (Uni32)(-1);
+    UniItem * overflow_end;
+  
+    UniItem data[256*4];
+
+    UniItem overflow[256]; // you can never be too careful;
+  
+  public:
+    FromUniLookup() {}
+    void reset();
+    inline char operator() (Uni32 key, char unknown = '?') const;
+    bool insert(Uni32 key, char value);
+  };
+
+  void FromUniLookup::reset()
+  {
+    for (unsigned i = 0; i != 256*4; ++i)
+      data[i].key = npos;
+    overflow_end = overflow;
+  }
+
+  inline char FromUniLookup::operator() (Uni32 k, char unknown) const
+  {
+    const UniItem * i = data + (unsigned char)k * 4;
+
+    if (i->key == k) return i->value;
+    ++i;
+    if (i->key == k) return i->value;
+    ++i;
+    if (i->key == k) return i->value;
+    ++i;
+    if (i->key == k) return i->value;
+  
+    if (i->key == npos) return unknown;
+  
+    for(i = overflow; i != overflow_end; ++i)
+      if (i->key == k) return i->value;
+
+    return unknown;
+  }
+
+  bool FromUniLookup::insert(Uni32 k, char v) 
+  {
+    UniItem * i = data + (unsigned char)k * 4;
+    UniItem * e = i + 4;
+    while (i != e && i->key != npos) {
+      if (i->key == k)
+        return false;
+      ++i;
+    }
+    if (i == e) {
+      for(i = overflow; i != overflow_end; ++i)
+        if (i->key == k) return false;
+    }
+    i->key = k;
+    i->value = v;
+    return true;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // CharLookup
+  //
+
+  class CharLookup 
+  {
+  private:
+    int data[256];
+  public:
+    void reset();
+    char operator[] (char key) const {return data[(unsigned char)key];}
+    bool insert(char key, char value);
+  };
+
+  void CharLookup::reset() {
+    for (int i = 0; i != 256; ++i) 
+      data[i] = -1;
+  }
+
+  bool CharLookup::insert(char key, char value) 
+  {
+    if (data[(unsigned char)key] != -1)
+      return false;
+    data[(unsigned char)key] = value;
+    return true;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // NormLookup
+  //
+
+  template <class T>
+  struct NormTable
+  {
+    static const unsigned struct_size;
+    unsigned mask;
+    unsigned height;
+    unsigned width;
+    unsigned size;
+    T * end;
+    T data[1]; // hack for data[]
+  };
+
+  template <class T>
+  const unsigned NormTable<T>::struct_size = sizeof(NormTable<T>) - 1;
+
+  template <class T, class From>
+  struct NormLookupRet
+  {
+    const typename T::To   * to;
+    const From * last;
+    NormLookupRet(const typename T::To * t, From * l) 
+      : to(t), last(l) {}
+  };
+  
+  template <class T, class From>
+  static inline NormLookupRet<T,From> norm_lookup(const NormTable<T> * d, 
+                                                  From * s, From * stop,
+                                                  const typename T::To * def,
+                                                  From * prev) 
+  {
+  loop:
+    if (s != stop) {
+      const T * i = d->data + (static_cast<typename T::From>(*s) & d->mask);
+      for (;;) {
+        if (i->from == static_cast<typename T::From>(*s)) {
+          if (i->sub_table) {
+            // really tail recursion
+            if (i->to[1] != T::to_non_char) {def = i->to; prev = s;}
+            d = (const NormTable<T> *)(i->sub_table);
+            s++;
+            goto loop;
+          } else {
+            return NormLookupRet<T,From>(i->to, s);
+          }
+        } else {
+          i += d->height;
+          if (i >= d->end) break;
+        }
+      }
+    }
+    return NormLookupRet<T,From>(def, prev);
+  }
+
+  template <class T>
+  void free_norm_table(NormTable<T> * d)
+  {
+    for (T * cur = d->data; cur != d->end; ++cur) {
+      if (cur->sub_table) 
+        free_norm_table<T>(static_cast<NormTable<T> *>(cur->sub_table));
+    }
+    free(d);
+  }
+
+  struct FromUniNormEntry
+  {
+    typedef Uni32 From;
+    Uni32 from;
+    typedef byte To;
+    byte  to[4];
+    static const From from_non_char = (From)(-1);
+    static const To   to_non_char   = 0x10;
+    static const unsigned max_to = 4;
+    void * sub_table;
+  } 
+#ifdef __GNUC__    
+    __attribute__ ((aligned (16)))
+#endif
+  ;
+
+  struct ToUniNormEntry
+  {
+    typedef byte From;
+    byte from;
+    typedef Uni16 To;
+    Uni16 to[3];
+    static const From from_non_char = 0x10;
+    static const To   to_non_char   = 0x10;
+    static const unsigned max_to = 3;
+    void * sub_table;
+  } 
+#ifdef __GNUC__    
+    __attribute__ ((aligned (16)))
+#endif
+  ;
+  
+  //////////////////////////////////////////////////////////////////////
+  //
+  // read in char data
+  //
+
+  PosibErr<void> read_in_char_data (const Config & config,
+                                    ParmStr encoding,
+                                    ToUniLookup & to,
+                                    FromUniLookup & from)
+  {
+    to.reset();
+    from.reset();
+    
+    String dir1,dir2,file_name;
+    fill_data_dir(&config, dir1, dir2);
+    find_file(file_name,dir1,dir2,encoding,".cset");
+
+    FStream data;
+    PosibErrBase err = data.open(file_name, "r");
+    if (err.get_err()) { 
+      char mesg[300];
+      snprintf(mesg, 300, _("This could also mean that the file \"%s\" could not be opened for reading or does not exist."),
+               file_name.c_str());
+      return make_err(unknown_encoding, encoding, mesg);
+    }
+    unsigned chr;
+    Uni32 uni;
+    String line;
+    char * p;
+    do {
+      p = get_nb_line(data, line);
+    } while (*p != '/');
+    for (chr = 0; chr != 256; ++chr) {
+      p = get_nb_line(data, line);
+      if (strtoul(p, 0, 16) != chr)
+        return make_err(bad_file_format, file_name);
+      uni = strtoul(p + 3, 0, 16);
+      to.insert(chr, uni);
+      from.insert(uni, chr);
+    }
+  
+    return no_err;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // read in norm data
+  //
+
+  struct Tally 
+  {
+    int size;
+    Uni32 mask;
+    int max;
+    int * data;
+    Tally(int s, int * d) : size(s), mask(s - 1), max(0), data(d) {
+      memset(data, 0, sizeof(int)*size);
+    }
+    void add(Uni32 chr) {
+      Uni32 p = chr & mask;
+      data[p]++;
+      if (data[p] > max) max = data[p];
+    }
+  };
+
+  template <class T>
+  static PosibErr< NormTable<T> * > create_norm_table(IStream & in, String & buf)
+  {
+    const char * p = get_nb_line(in, buf);
+    assert(*p == 'N');
+    ++p;
+    int size = strtoul(p, (char **)&p, 10);
+    VARARRAY(T, d, size);
+    memset(d, 0, sizeof(T) * size);
+    int sz = 1 << (unsigned)floor(log(size <= 1 ? 1.0 : size - 1)/log(2.0));
+    VARARRAY(int, tally0_d, sz);   Tally tally0(sz,   tally0_d);
+    VARARRAY(int, tally1_d, sz*2); Tally tally1(sz*2, tally1_d);
+    VARARRAY(int, tally2_d, sz*4); Tally tally2(sz*4, tally2_d);
+    T * cur = d;
+    while (p = get_nb_line(in, buf), *p != '.') {
+      Uni32 f = strtoul(p, (char **)&p, 16);
+      cur->from = static_cast<typename T::From>(f);
+      assert(f == cur->from);
+      tally0.add(f);
+      tally1.add(f);
+      tally2.add(f);
+      ++p;
+      assert(*p == '>');
+      ++p;
+      assert(*p == ' ');
+      ++p;
+      unsigned i = 0;
+      if (*p != '-') {
+        for (;; ++i) {
+          const char * q = p;
+          Uni32 t = strtoul(p, (char **)&p, 16);
+          if (q == p) break;
+          assert(i < d->max_to);
+          cur->to[i] = static_cast<typename T::To>(t);
+          assert(t == static_cast<Uni32>(cur->to[i]));
+        } 
+      } else {
+        cur->to[0] = 0;
+        cur->to[1] = T::to_non_char;
+      }
+      if (*p == ' ') ++p;
+      if (*p == '/') cur->sub_table = create_norm_table<T>(in,buf);
+      ++cur;
+    }
+    assert(cur - d == size);
+    Tally * which = &tally0;
+    if (which->max > tally1.max) which = &tally1;
+    if (which->max > tally2.max) which = &tally2;
+    NormTable<T> * final = (NormTable<T> *)calloc(1, NormTable<T>::struct_size + 
+                                                  sizeof(T) * which->size * which->max);
+    memset(final, 0, NormTable<T>::struct_size + sizeof(T) * which->size * which->max);
+    final->mask = which->size - 1;
+    final->height = which->size;
+    final->width = which->max;
+    final->end = final->data + which->size * which->max;
+    final->size = size;
+    for (cur = d; cur != d + size; ++cur) {
+      T * dest = final->data + (cur->from & final->mask);
+      while (dest->from != 0) dest += final->height;
+      *dest = *cur;
+      if (dest->from == 0) dest->from = T::from_non_char;
+    }
+    for (T * dest = final->data; dest < final->end; dest += final->height) {
+      if (dest->from == 0 || (dest->from == T::from_non_char && dest->to[0] == 0)) {
+        dest->from = T::from_non_char;
+        dest->to[0] = T::to_non_char;
+      }
+    }
+    return final;
+  }
+
+  PosibErr<NormTables *> NormTables::get_new(const String & encoding, 
+                                             const Config * config)
+  {
+    String dir1,dir2,file_name;
+    fill_data_dir(config, dir1, dir2);
+    find_file(file_name,dir1,dir2,encoding,".cmap");
+    
+    FStream in;
+    PosibErrBase err = in.open(file_name, "r");
+    if (err.get_err()) { 
+      char mesg[300];
+      snprintf(mesg, 300, _("This could also mean that the file \"%s\" could not be opened for reading or does not exist."),
+               file_name.c_str());
+      return make_err(unknown_encoding, encoding, mesg); // FIXME
+    }
+
+    NormTables * d = new NormTables;
+    d->key = encoding;
+    String l;
+    get_nb_line(in, l);
+    remove_comments(l);
+    assert (l == "INTERNAL");
+    get_nb_line(in, l);
+    remove_comments(l);
+    assert (l == "/");
+    d->internal = create_norm_table<FromUniNormEntry>(in, l);
+    get_nb_line(in, l);
+    remove_comments(l);
+    assert (l == "STRICT");
+    char * p = get_nb_line(in, l);
+    remove_comments(l);
+    if (l == "/") {
+      d->strict_d = create_norm_table<FromUniNormEntry>(in, l);
+      d->strict = d->strict_d;
+    } else {
+      assert(*p == '=');
+      ++p; ++p;
+      assert(strcmp(p, "INTERNAL") == 0);
+      d->strict = d->internal;
+    }
+    while (get_nb_line(in, l)) {
+      remove_comments(l);
+      d->to_uni.push_back(ToUniTable());
+      ToUniTable & e = d->to_uni.back();
+      e.name.resize(l.size());
+      for (unsigned i = 0; i != l.size(); ++i)
+        e.name[i] = asc_tolower(l[i]);
+      char * p = get_nb_line(in, l);
+      remove_comments(l);
+      if (l == "/") {
+        e.ptr = e.data = create_norm_table<ToUniNormEntry>(in,l);
+      } else {
+        assert(*p == '=');
+        ++p; ++p;
+        for (char * q = p; *q; ++q) *q = asc_tolower(*q);
+        Vector<ToUniTable>::iterator i = d->to_uni.begin();
+        while (i->name != p && i != d->to_uni.end()) ++i;
+        assert(i != d->to_uni.end());
+        e.ptr = i->ptr;
+        get_nb_line(in, l);
+      }
+    }  
+    return d;
+  }
+
+  NormTables::~NormTables()
+  {
+    free_norm_table<FromUniNormEntry>(internal);
+    if (strict_d)
+      free_norm_table<FromUniNormEntry>(strict_d);
+    for (unsigned i = 0; i != to_uni.size(); ++i) {
+      if (to_uni[i].data)
+        free_norm_table<ToUniNormEntry>(to_uni[i].data);
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+  //
+  //  Convert
+  //
+  //////////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////////
+
+
+  bool operator== (const Convert & rhs, const Convert & lhs)
+  {
+    return strcmp(rhs.in_code(), lhs.in_code()) == 0
+      && strcmp(rhs.out_code(), lhs.out_code()) == 0;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Trivial Conversion
+  //
+
+  template <typename Chr>
+  struct DecodeDirect : public Decode 
+  {
+    void decode(const char * in0, int size, FilterCharVector & out) const {
+      const Chr * in = reinterpret_cast<const Chr *>(in0);
+      if (size == -1) {
+        for (;*in; ++in)
+          out.append(*in);
+      } else {
+        const Chr * stop = reinterpret_cast<const Chr *>(in0 +size);
+        for (;in != stop; ++in)
+          out.append(*in);
+      }
+    }
+    PosibErr<void> decode_ec(const char * in0, int size, 
+                             FilterCharVector & out, ParmStr) const {
+      DecodeDirect::decode(in0, size, out);
+      return no_err;
+    }
+  };
+
+  template <typename Chr>
+  struct EncodeDirect : public Encode
+  {
+    void encode(const FilterChar * in, const FilterChar * stop, 
+                CharVector & out) const {
+      for (; in != stop; ++in) {
+        Chr c = in->chr;
+        if (c != in->chr) c = '?';
+        out.append(&c, sizeof(Chr));
+      }
+    }
+    PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, 
+                             CharVector & out, ParmStr orig) const {
+      for (; in != stop; ++in) {
+        Chr c = in->chr;
+        if (c != in->chr) {
+          char m[70];
+          snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr);
+          return make_err(invalid_string, orig, m);
+        }
+        out.append(&c, sizeof(Chr));
+      }
+      return no_err;
+    }
+    bool encode(FilterChar * &, FilterChar * &, FilterCharVector &) const {
+      return true;
+    }
+  };
+
+  template <typename Chr>
+  struct ConvDirect : public DirectConv
+  {
+    void convert(const char * in0, int size, CharVector & out) const {
+      if (size == -1) {
+        const Chr * in = reinterpret_cast<const Chr *>(in0);
+        for (;*in != 0; ++in)
+          out.append(in, sizeof(Chr));
+      } else {
+        out.append(in0, size);
+      }
+    }
+    PosibErr<void> convert_ec(const char * in0, int size, 
+                              CharVector & out, ParmStr) const {
+      ConvDirect::convert(in0, size, out);
+      return no_err;
+    }
+  };
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  //  Lookup Conversion
+  //
+
+  struct DecodeLookup : public Decode 
+  {
+    ToUniLookup lookup;
+    PosibErr<void> init(ParmStr code, const Config & c) {
+      FromUniLookup unused;
+      return read_in_char_data(c, code, lookup, unused);
+    }
+    void decode(const char * in, int size, FilterCharVector & out) const {
+      if (size == -1) {
+        for (;*in; ++in)
+          out.append(lookup[*in]);
+      } else {
+        const char * stop = in + size;
+        for (;in != stop; ++in)
+          out.append(lookup[*in]);
+      }
+    }
+    PosibErr<void> decode_ec(const char * in, int size, 
+                             FilterCharVector & out, ParmStr) const {
+      DecodeLookup::decode(in, size, out);
+      return no_err;
+    }
+  };
+
+  struct DecodeNormLookup : public Decode 
+  {
+    typedef ToUniNormEntry E;
+    NormTable<E> * data;
+    DecodeNormLookup(NormTable<E> * d) : data(d) {}
+    // must be null terminated
+    // FIXME: Why must it be null terminated?
+    void decode(const char * in, int size, FilterCharVector & out) const {
+      const char * stop = in + size; // will word even if size -1
+      while (in != stop) {
+        if (*in == 0) {
+          if (size == -1) break;
+          out.append(0);
+          ++in;
+        } else {
+          NormLookupRet<E,const char> ret = norm_lookup<E>(data, in, stop, 0, in);
+          for (unsigned i = 0; ret.to[i] && i < E::max_to; ++i)
+            out.append(ret.to[i]);
+          in = ret.last + 1;
+        }
+      }
+    }
+    PosibErr<void> decode_ec(const char * in, int size, 
+                             FilterCharVector & out, ParmStr) const {
+      DecodeNormLookup::decode(in, size, out);
+      return no_err;
+    }
+  };
+
+  struct EncodeLookup : public Encode 
+  {
+    FromUniLookup lookup;
+    PosibErr<void> init(ParmStr code, const Config & c) 
+      {ToUniLookup unused;
+      return read_in_char_data(c, code, unused, lookup);}
+    void encode(const FilterChar * in, const FilterChar * stop, 
+                CharVector & out) const {
+      for (; in != stop; ++in) {
+        out.append(lookup(*in));
+      }
+    }
+    PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, 
+                             CharVector & out, ParmStr orig) const {
+      for (; in != stop; ++in) {
+        char c = lookup(*in, '\0');
+        if (c == '\0' && in->chr != 0) {
+          char m[70];
+          snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr);
+          return make_err(invalid_string, orig, m);
+        }
+        out.append(c);
+      }
+      return no_err;
+    }
+    bool encode(FilterChar * & in0, FilterChar * & stop,
+                FilterCharVector & out) const {
+      FilterChar * in = in0;
+      for (; in != stop; ++in)
+        *in = lookup(*in);
+      return true;
+    }
+  };
+
+  struct EncodeNormLookup : public Encode 
+  {
+    typedef FromUniNormEntry E;
+    NormTable<E> * data;
+    EncodeNormLookup(NormTable<E> * d) : data(d) {}
+    // *stop must equal 0
+    void encode(const FilterChar * in, const FilterChar * stop, 
+                CharVector & out) const {
+      while (in < stop) {
+        if (*in == 0) {
+          out.append('\0');
+          ++in;
+        } else {
+          NormLookupRet<E,const FilterChar> ret = norm_lookup<E>(data, in, stop, (const byte *)"?", in);
+          for (unsigned i = 0; i < E::max_to && ret.to[i]; ++i)
+            out.append(ret.to[i]);
+          in = ret.last + 1;
+        }
+      }
+    }
+    PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, 
+                             CharVector & out, ParmStr orig) const {
+      while (in < stop) {
+        if (*in == 0) {
+          out.append('\0');
+          ++in;
+        } else {
+          NormLookupRet<E,const FilterChar> ret = norm_lookup<E>(data, in, stop, 0, in);
+          if (ret.to == 0) {
+            char m[70];
+            snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr);
+            return make_err(invalid_string, orig, m);
+          }
+          for (unsigned i = 0; i < E::max_to && ret.to[i]; ++i)
+            out.append(ret.to[i]);
+          in = ret.last + 1;
+        }
+      }
+      return no_err;
+    }
+    bool encode(FilterChar * & in, FilterChar * & stop,
+                FilterCharVector & buf) const {
+      buf.clear();
+      while (in < stop) {
+        if (*in == 0) {
+          buf.append(FilterChar(0));
+          ++in;
+        } else {
+          NormLookupRet<E,FilterChar> ret = norm_lookup<E>(data, in, stop, (const byte *)"?", in);
+          const FilterChar * end = ret.last + 1;
+          unsigned width = 0;
+          for (; in != end; ++in) width += in->width;
+          buf.append(FilterChar(ret.to[0], width));
+          for (unsigned i = 1; i < E::max_to && ret.to[i]; ++i) {
+            buf.append(FilterChar(ret.to[i],0));
+          }
+        }
+      }
+      buf.append(0);
+      in = buf.pbegin();
+      stop = buf.pend();
+      return true;
+    }
+  };
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  //  UTF8
+  //
+  
+#define get_check_next \
+  if (in == stop) goto error;          \
+  c = *in;                             \
+  if ((c & 0xC0) != 0x80) goto error;  \
+  ++in;                                \
+  u <<= 6;                             \
+  u |= c & 0x3F;                       \
+  ++w;
+
+  static inline FilterChar from_utf8 (const char * & in, const char * stop, 
+                                      Uni32 err_char = '?')
+  {
+    Uni32 u = (Uni32)(-1);
+    FilterChar::Width w = 1;
+
+    // the first char is guaranteed not to be off the end
+    char c = *in;
+    ++in;
+
+    while (in != stop && (c & 0xC0) == 0x80) {c = *in; ++in; ++w;}
+    if ((c & 0x80) == 0x00) { // 1-byte wide
+      u = c;
+    } else if ((c & 0xE0) == 0xC0) { // 2-byte wide
+      u  = c & 0x1F;
+      get_check_next;
+    } else if ((c & 0xF0) == 0xE0) { // 3-byte wide
+      u  = c & 0x0F;
+      get_check_next;
+      get_check_next;
+    } else if ((c & 0xF8) == 0xF0) { // 4-byte wide
+      u  = c & 0x07;
+      get_check_next;
+      get_check_next;
+      get_check_next;
+    } else {
+      goto error;
+    }
+
+    return FilterChar(u, w);
+  error:
+    return FilterChar(err_char, w);
+  }
+
+  static inline void to_utf8 (FilterChar in, CharVector & out)
+  {
+    FilterChar::Chr c = in;
+    
+    if (c < 0x80) {
+      out.append(c);
+    }
+    else if (c < 0x800) {
+      out.append(0xC0 | (c>>6));
+      out.append(0x80 | (c & 0x3F));
+    }
+    else if (c < 0x10000) {
+      out.append(0xE0 | (c>>12));
+      out.append(0x80 | (c>>6 & 0x3F));
+      out.append(0x80 | (c & 0x3F));
+    }
+    else if (c < 0x200000) {
+      out.append(0xF0 | (c>>18));
+      out.append(0x80 | (c>>12 & 0x3F));
+      out.append(0x80 | (c>>6 & 0x3F));
+      out.append(0x80 | (c & 0x3F));
+    }
+  }
+  
+  struct DecodeUtf8 : public Decode 
+  {
+    ToUniLookup lookup;
+    void decode(const char * in, int size, FilterCharVector & out) const {
+      const char * stop = in + size; // this is OK even if size == -1
+      while (*in && in != stop) {
+        out.append(from_utf8(in, stop));
+      }
+    }
+    PosibErr<void> decode_ec(const char * in, int size, 
+                             FilterCharVector & out, ParmStr orig) const {
+      const char * begin = in;
+      const char * stop = in + size; // this is OK even if size == -1
+      while (*in && in != stop) {
+        FilterChar c = from_utf8(in, stop, (Uni32)-1);
+        if (c == (Uni32)-1) {
+          char m[70];
+          snprintf(m, 70, _("Invalid UTF-8 sequence at position %ld."), (long)(in - begin));
+          return make_err(invalid_string, orig, m);
+        }
+        out.append(c);
+      }
+      return no_err;
+    }
+  };
+
+  struct EncodeUtf8 : public Encode 
+  {
+    FromUniLookup lookup;
+    void encode(const FilterChar * in, const FilterChar * stop, 
+                CharVector & out) const {
+      for (; in != stop; ++in) {
+        to_utf8(*in, out);
+      }
+    }
+    PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, 
+                             CharVector & out, ParmStr) const {
+      for (; in != stop; ++in) {
+        to_utf8(*in, out);
+      }
+      return no_err;
+    }
+  };
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Cache
+  //
+
+  static GlobalCache<Decode> decode_cache("decode");
+  static GlobalCache<Encode> encode_cache("encode");
+  static GlobalCache<NormTables> norm_tables_cache("norm_tables");
+  
+  //////////////////////////////////////////////////////////////////////
+  //
+  // new_aspell_convert
+  //
+
+  void Convert::generic_convert(const char * in, int size, CharVector & out)
+  {
+    buf_.clear();
+    decode_->decode(in, size, buf_);
+    FilterChar * start = buf_.pbegin();
+    FilterChar * stop = buf_.pend();
+    if (!filter.empty())
+      filter.process(start, stop);
+    encode_->encode(start, stop, out);
+  }
+
+  const char * fix_encoding_str(ParmStr enc, String & buf)
+  {
+    buf.clear();
+    buf.reserve(enc.size() + 1);
+    for (size_t i = 0; i != enc.size(); ++i)
+      buf.push_back(asc_tolower(enc[i]));
+
+    if (strncmp(buf.c_str(), "iso8859", 7) == 0)
+      buf.insert(buf.begin() + 3, '-'); // For backwards compatibility
+    
+    if (buf == "ascii" || buf == "ansi_x3.4-1968")
+      return "iso-8859-1";
+    else if (buf == "machine unsigned 16" || buf == "utf-16")
+      return "ucs-2";
+    else if (buf == "machine unsigned 32" || buf == "utf-32")
+      return "ucs-4";
+    else
+      return buf.c_str();
+  }
+
+  bool ascii_encoding(const Config & c, ParmStr enc0)
+  {
+    if (enc0.empty()) return true;
+    if (enc0 == "ANSI_X3.4-1968" 
+        || enc0 == "ASCII" || enc0 == "ascii") return true;
+    String buf;
+    const char * enc = fix_encoding_str(enc0, buf);
+    if (strcmp(enc, "utf-8") == 0 
+        || strcmp(enc, "ucs-2") == 0 
+        || strcmp(enc, "ucs-4") == 0) return false;
+    String dir1,dir2,file_name;
+    fill_data_dir(&c, dir1, dir2);
+    file_name << dir1 << enc << ".cset";
+    if (file_exists(file_name)) return false;
+    if (dir1 == dir2) return true;
+    file_name.clear();
+    file_name << dir2 << enc << ".cset";
+    return !file_exists(file_name);
+  }
+
+  PosibErr<Convert *> internal_new_convert(const Config & c,
+                                           ParmString in, 
+                                           ParmString out,
+                                           bool if_needed,
+                                           Normalize norm)
+  {
+    String in_s;
+    in = fix_encoding_str(in, in_s);
+
+    String out_s;
+    out = fix_encoding_str(out, out_s); 
+
+    if (if_needed && in == out) return 0;
+
+    StackPtr<Convert> conv(new Convert);
+    switch (norm) {
+    case NormNone:
+      RET_ON_ERR(conv->init(c, in, out)); break;
+    case NormFrom:
+      RET_ON_ERR(conv->init_norm_from(c, in, out)); break;
+    case NormTo:
+      RET_ON_ERR(conv->init_norm_to(c, in, out)); break;
+    }
+    return conv.release();
+  }
+
+  PosibErr<Decode *> Decode::get_new(const String & key, const Config * c)
+  {
+    StackPtr<Decode> ptr;
+    if (key == "iso-8859-1")
+      ptr.reset(new DecodeDirect<Uni8>);
+    else if (key == "ucs-2")
+      ptr.reset(new DecodeDirect<Uni16>);
+    else if (key == "ucs-4")
+      ptr.reset(new DecodeDirect<Uni32>);
+    else if (key == "utf-8")
+      ptr.reset(new DecodeUtf8);
+    else
+      ptr.reset(new DecodeLookup);
+    RET_ON_ERR(ptr->init(key, *c));
+    ptr->key = key;
+    return ptr.release();
+  }
+
+  PosibErr<Encode *> Encode::get_new(const String & key, const Config * c)
+  {
+    StackPtr<Encode> ptr;
+    if (key == "iso-8859-1")
+      ptr.reset(new EncodeDirect<Uni8>);
+    else if (key == "ucs-2")
+      ptr.reset(new EncodeDirect<Uni16>);
+    else if (key == "ucs-4")
+      ptr.reset(new EncodeDirect<Uni32>);
+    else if (key == "utf-8")
+      ptr.reset(new EncodeUtf8);
+    else
+      ptr.reset(new EncodeLookup);
+    RET_ON_ERR(ptr->init(key, *c));
+    ptr->key = key;
+    return ptr.release();
+  }
+
+  Convert::~Convert() {}
+
+  PosibErr<void> Convert::init(const Config & c, ParmStr in, ParmStr out)
+  {
+    RET_ON_ERR(setup(decode_c, &decode_cache, &c, in));
+    decode_ = decode_c.get();
+    RET_ON_ERR(setup(encode_c, &encode_cache, &c, out));
+    encode_ = encode_c.get();
+
+    conv_ = 0;
+    if (in == out) {
+      if (in == "ucs-2") {
+        conv_ = new ConvDirect<Uni16>;
+      } else if (in == "ucs-4") {
+        conv_ = new ConvDirect<Uni32>;
+      } else {
+        conv_ = new ConvDirect<char>;
+      }
+    }
+
+    if (conv_)
+      RET_ON_ERR(conv_->init(decode_, encode_, c));
+
+    return no_err;
+  }
+
+  
+  PosibErr<void> Convert::init_norm_from(const Config & c, ParmStr in, ParmStr out)
+  {
+    if (!c.retrieve_bool("normalize") && !c.retrieve_bool("norm-required")) 
+      return init(c,in,out);
+
+    RET_ON_ERR(setup(norm_tables_, &norm_tables_cache, &c, out));
+
+    RET_ON_ERR(setup(decode_c, &decode_cache, &c, in));
+    decode_ = decode_c.get();
+
+    if (c.retrieve_bool("norm-strict")) {
+      encode_s = new EncodeNormLookup(norm_tables_->strict);
+      encode_ = encode_s;
+      encode_->key = out;
+      encode_->key += ":strict";
+    } else {
+      encode_s = new EncodeNormLookup(norm_tables_->internal);
+      encode_ = encode_s;
+      encode_->key = out;
+      encode_->key += ":internal";
+    }
+    conv_ = 0;
+
+    return no_err;
+  }
+
+  PosibErr<void> Convert::init_norm_to(const Config & c, ParmStr in, ParmStr out)
+  {
+    String norm_form = c.retrieve("norm-form");
+    if ((!c.retrieve_bool("normalize") || norm_form == "none")
+        && !c.retrieve_bool("norm-required"))
+      return init(c,in,out);
+    if (norm_form == "none" && c.retrieve_bool("norm-required"))
+      norm_form = "nfc";
+
+    RET_ON_ERR(setup(norm_tables_, &norm_tables_cache, &c, in));
+
+    RET_ON_ERR(setup(encode_c, &encode_cache, &c, out));
+    encode_ = encode_c.get();
+
+    NormTables::ToUni::const_iterator i = norm_tables_->to_uni.begin();
+    for (; i != norm_tables_->to_uni.end() && i->name != norm_form; ++i);
+    assert(i != norm_tables_->to_uni.end());
+
+    decode_s = new DecodeNormLookup(i->ptr);
+    decode_ = decode_s;
+    decode_->key = in;
+    decode_->key += ':';
+    decode_->key += i->name;
+
+    conv_ = 0;
+
+    return no_err;
+  }
+
+  PosibErr<void> MBLen::setup(const Config &, ParmStr enc0)
+  {
+    String buf;
+    const char * enc = fix_encoding_str(enc0,buf);
+    if      (strcmp(enc, "utf-8") == 0) encoding = UTF8;
+    else if (strcmp(enc, "ucs-2") == 0) encoding = UCS2;
+    else if (strcmp(enc, "ucs-4") == 0) encoding = UCS4;
+    else                                encoding = Other;
+    return no_err;
+  }
+
+  unsigned MBLen::operator()(const char * str, const char * stop)
+  {
+    unsigned size = 0;
+    switch (encoding) {
+    case Other: 
+      return stop - str;
+    case UTF8:
+      for (; str != stop; ++str) {
+        if ((*str & 0x80) == 0 || (*str & 0xC0) == 0xC0) ++size;
+      }
+      return size;
+    case UCS2:
+      return (stop - str)/2;
+    case UCS4:
+      return (stop - str)/4;
+    }
+    return 0;
+  }
+  
+}
diff --git a/common/convert.hpp b/common/convert.hpp
new file mode 100644 (file)
index 0000000..76332ee
--- /dev/null
@@ -0,0 +1,417 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_CONVERT__HPP
+#define ASPELL_CONVERT__HPP
+
+#include "string.hpp"
+#include "posib_err.hpp"
+#include "char_vector.hpp"
+#include "filter_char.hpp"
+#include "filter_char_vector.hpp"
+#include "stack_ptr.hpp"
+#include "filter.hpp"
+#include "cache.hpp"
+
+namespace acommon {
+
+  class OStream;
+  class Config;
+
+  struct ConvBase : public Cacheable {
+    typedef const Config CacheConfig;
+    typedef const char * CacheKey;
+    String key;
+    bool cache_key_eq(const char * l) const  {return key == l;}
+    ConvBase() {}
+  private:
+    ConvBase(const ConvBase &);
+    void operator=(const ConvBase &);
+  };
+
+  struct Decode : public ConvBase {
+    virtual PosibErr<void> init(ParmStr code, const Config &) {return no_err;}
+    virtual void decode(const char * in, int size,
+                       FilterCharVector & out) const = 0;
+    virtual PosibErr<void> decode_ec(const char * in, int size,
+                                     FilterCharVector & out, ParmStr orig) const = 0;
+    static PosibErr<Decode *> get_new(const String &, const Config *);
+    virtual ~Decode() {}
+  };
+  struct Encode : public ConvBase {
+    // null characters should be treated like any other character
+    // by the encoder.
+    virtual PosibErr<void> init(ParmStr, const Config &) {return no_err;}
+    virtual void encode(const FilterChar * in, const FilterChar * stop, 
+                        CharVector & out) const = 0;
+    virtual PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, 
+                                     CharVector & out, ParmStr orig) const = 0;
+    // may convert inplace
+    virtual bool encode(FilterChar * & in, FilterChar * & stop, 
+                        FilterCharVector & buf) const {return false;}
+    static PosibErr<Encode *> get_new(const String &, const Config *);
+    virtual ~Encode() {}
+  };
+  struct DirectConv { // convert directly from in_code to out_code.
+    // should not take ownership of decode and encode.
+    // decode and encode guaranteed to stick around for the life
+    // of the object.
+    virtual PosibErr<void> init(const Decode *, const Encode *, 
+                               const Config &) {return no_err;}
+    virtual void convert(const char * in, int size, 
+                        CharVector & out) const = 0;
+    virtual PosibErr<void> convert_ec(const char * in, int size, 
+                                      CharVector & out, ParmStr orig) const = 0;
+    virtual ~DirectConv() {}
+  };
+  template <class T> struct NormTable;
+  struct FromUniNormEntry;
+  struct ToUniNormEntry;
+  struct NormTables : public Cacheable {
+    typedef const Config CacheConfig;
+    typedef const char * CacheKey;
+    String key;
+    bool cache_key_eq(const char * l) const  {return key == l;}
+    static PosibErr<NormTables *> get_new(const String &, const Config *);
+    NormTable<FromUniNormEntry> * internal;
+    NormTable<FromUniNormEntry> * strict_d;
+    NormTable<FromUniNormEntry> * strict;
+    struct ToUniTable {
+      String name;
+      NormTable<ToUniNormEntry> * data;
+      NormTable<ToUniNormEntry> * ptr;
+      ToUniTable() : data(), ptr() {}
+    };
+    typedef Vector<ToUniTable> ToUni;
+    Vector<ToUniTable> to_uni;
+    ~NormTables();
+  };
+
+  typedef FilterCharVector ConvertBuffer;
+
+  class Convert {
+  private:
+    CachePtr<Decode> decode_c;
+    StackPtr<Decode> decode_s;
+    Decode * decode_;
+    CachePtr<Encode> encode_c;
+    StackPtr<Encode> encode_s;
+    Encode * encode_;
+    CachePtr<NormTables> norm_tables_;
+    StackPtr<DirectConv> conv_;
+
+    ConvertBuffer buf_;
+
+    static const unsigned int null_len_ = 4; // POSIB FIXME: Be more precise
+
+    Convert(const Convert &);
+    void operator=(const Convert &);
+
+  public:
+    Convert() {}
+    ~Convert();
+
+    // This filter is used when the convert method is called.  It must
+    // be set up by an external entity as this class does not set up
+    // this class in any way.
+    Filter filter;
+
+    PosibErr<void> init(const Config &, ParmStr in, ParmStr out);
+    PosibErr<void> init_norm_to(const Config &, ParmStr in, ParmStr out);
+    PosibErr<void> init_norm_from(const Config &, ParmStr in, ParmStr out);
+    
+    const char * in_code() const   {return decode_->key.c_str();}
+    const char * out_code() const  {return encode_->key.c_str();}
+
+    void append_null(CharVector & out) const
+    {
+      const char nul[4] = {0,0,0,0}; // 4 should be enough
+      out.write(nul, null_len_);
+    }
+
+    unsigned int null_len() const {return null_len_;}
+  
+    // this filters will generally not translate null characters
+    // if you need a null character at the end, add it yourself
+    // with append_null
+
+    void decode(const char * in, int size, FilterCharVector & out) const 
+      {decode_->decode(in,size,out);}
+    
+    void encode(const FilterChar * in, const FilterChar * stop, 
+               CharVector & out) const
+      {encode_->encode(in,stop,out);}
+
+    bool encode(FilterChar * & in, FilterChar * & stop, 
+                FilterCharVector & buf) const
+      {return encode_->encode(in,stop,buf);}
+
+    // does NOT pass it through filters
+    // DOES NOT use an internal state
+    void convert(const char * in, int size, CharVector & out, ConvertBuffer & buf) const
+    {
+      if (conv_) {
+       conv_->convert(in,size,out);
+      } else {
+        buf.clear();
+        decode_->decode(in, size, buf);
+        encode_->encode(buf.pbegin(), buf.pend(), out);
+      }
+    }
+
+    // does NOT pass it through filters
+    // DOES NOT use an internal state
+    PosibErr<void> convert_ec(const char * in, int size, CharVector & out, 
+                              ConvertBuffer & buf, ParmStr orig) const
+    {
+      if (conv_) {
+       RET_ON_ERR(conv_->convert_ec(in,size,out, orig));
+      } else {
+        buf.clear();
+        RET_ON_ERR(decode_->decode_ec(in, size, buf, orig));
+       RET_ON_ERR(encode_->encode_ec(buf.pbegin(), buf.pend(), 
+                                      out, orig));
+      }
+      return no_err;
+    }
+
+
+    // convert has the potential to use internal buffers and
+    // is therefore not const.  It is also not thread safe
+    // and I have no intention to make it thus.
+
+    void convert(const char * in, int size, CharVector & out) {
+      if (filter.empty()) {
+        convert(in,size,out,buf_);
+      } else {
+        generic_convert(in,size,out);
+      }
+    }
+
+    void generic_convert(const char * in, int size, CharVector & out);
+    
+  };
+
+  bool operator== (const Convert & rhs, const Convert & lhs);
+
+  const char * fix_encoding_str(ParmStr enc, String & buf);
+
+  // also returns true if the encoding is unknown
+  bool ascii_encoding(const Config & c, ParmStr enc0);
+
+  enum Normalize {NormNone, NormFrom, NormTo};
+
+  PosibErr<Convert *> internal_new_convert(const Config & c, 
+                                           ParmString in, ParmString out,
+                                           bool if_needed,
+                                           Normalize n);
+  
+  static inline PosibErr<Convert *> new_convert(const Config & c,
+                                                ParmStr in, ParmStr out,
+                                                Normalize n)
+  {
+    return internal_new_convert(c,in,out,false,n);
+  }
+  
+  static inline PosibErr<Convert *> new_convert_if_needed(const Config & c,
+                                                          ParmStr in, ParmStr out,
+                                                          Normalize n)
+  {
+    return internal_new_convert(c,in,out,true,n);
+  }
+
+  struct ConvObj {
+    Convert * ptr;
+    ConvObj(Convert * c = 0) : ptr(c) {}
+    ~ConvObj() {delete ptr;}
+    PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm)
+    {
+      delete ptr;
+      ptr = 0;
+      PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm);
+      if (pe.has_err()) return pe;
+      ptr = pe.data;
+      return no_err;
+    }
+    operator const Convert * () const {return ptr;}
+  private:
+    ConvObj(const ConvObj &);
+    void operator=(const ConvObj &);
+  };
+
+  struct ConvP {
+    const Convert * conv;
+    ConvertBuffer buf0;
+    CharVector buf;
+    operator bool() const {return conv;}
+    ConvP(const Convert * c = 0) : conv(c) {}
+    ConvP(const ConvObj & c) : conv(c.ptr) {}
+    ConvP(const ConvP & c) : conv(c.conv) {}
+    void operator=(const ConvP & c) { conv = c.conv; }
+    PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, 
+                         Normalize norm)
+    {
+      delete conv;
+      conv = 0;
+      PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm);
+      if (pe.has_err()) return pe;
+      conv = pe.data;
+      return no_err;
+    }
+    char * operator() (char * str, size_t sz)
+    {
+      if (conv) {
+        buf.clear();
+        conv->convert(str, sz, buf, buf0);
+        return buf.mstr();
+      } else {
+        return str;
+      }
+    }
+    const char * operator() (const char * str, size_t sz)
+    {
+      if (conv) {
+        buf.clear();
+        conv->convert(str, sz, buf, buf0);
+        return buf.str();
+      } else {
+        return str;
+      }
+    }
+    char * operator() (MutableString str)
+    {
+      return operator()(str.str, str.size);
+    }
+    char * operator() (char * str)
+    {
+      if (conv) {
+        buf.clear();
+        conv->convert(str, -1, buf, buf0);
+        return buf.mstr();
+      } else {
+        return str;
+      }
+    }
+    const char * operator() (ParmStr str)
+    {
+      if (conv) {
+        buf.clear();
+        conv->convert(str, -1, buf, buf0);
+        return buf.mstr();
+      } else {
+        return str;
+      }
+    }
+    char * operator() (char c)
+    {
+      buf.clear();
+      if (conv) {
+        char str[2] = {c, 0};
+        conv->convert(str, 1, buf, buf0);
+      } else {
+        buf.append(c);
+      }
+      return buf.mstr();
+    }
+  };
+
+  struct Conv : public ConvP
+  {
+    ConvObj conv_obj;
+    Conv(Convert * c = 0) : ConvP(c), conv_obj(c) {}
+    PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm)
+    {
+      RET_ON_ERR(conv_obj.setup(c,from,to,norm));
+      conv = conv_obj.ptr;
+      return no_err;
+    }
+  };
+
+  struct ConvECP {
+    const Convert * conv;
+    ConvertBuffer buf0;
+    CharVector buf;
+    operator bool() const {return conv;}
+    ConvECP(const Convert * c = 0) : conv(c) {}
+    ConvECP(const ConvObj & c) : conv(c.ptr) {}
+    ConvECP(const ConvECP & c) : conv(c.conv) {}
+    void operator=(const ConvECP & c) { conv = c.conv; }
+    PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm)
+    {
+      delete conv;
+      conv = 0;
+      PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm);
+      if (pe.has_err()) return pe;
+      conv = pe.data;
+      return no_err;
+    }
+    PosibErr<char *> operator() (char * str, size_t sz)
+    {
+      if (conv) {
+        buf.clear();
+        RET_ON_ERR(conv->convert_ec(str, sz, buf, buf0, str));
+        return buf.mstr();
+      } else {
+        return str;
+      }
+    }
+    PosibErr<char *> operator() (MutableString str)
+    {
+      return operator()(str.str, str.size);
+    }
+    PosibErr<char *> operator() (char * str)
+    {
+      if (conv) {
+        buf.clear();
+        RET_ON_ERR(conv->convert_ec(str, -1, buf, buf0, str));
+        return buf.mstr();
+      } else {
+        return str;
+      }
+    }
+
+    PosibErr<const char *> operator() (ParmStr str)
+    {
+      if (conv) {
+        buf.clear();
+        RET_ON_ERR(conv->convert_ec(str, -1, buf, buf0, str));
+        return buf.mstr();
+      } else {
+        return str.str();
+      }
+    }
+    PosibErr<const char *> operator() (char c)
+    {
+      char buf2[2] = {c, 0};
+      return operator()(ParmString(buf2,1));
+    }
+  };
+
+  struct ConvEC : public ConvECP
+  {
+    ConvObj conv_obj;
+    ConvEC(Convert * c = 0) : ConvECP(c), conv_obj(c) {}
+    PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm)
+    {
+      RET_ON_ERR(conv_obj.setup(c,from,to,norm));
+      conv = conv_obj.ptr;
+      return no_err;
+    }
+  };
+
+  struct MBLen 
+  {
+    enum Encoding {Other, UTF8, UCS2, UCS4} encoding;
+    MBLen() : encoding(Other) {}
+    PosibErr<void> setup(const Config &, ParmStr enc);
+    unsigned operator()(const char * str, const char * stop);
+    unsigned operator()(const char * str, unsigned byte_size) {
+      return operator()(str, str + byte_size);}
+  };
+
+}
+
+#endif
diff --git a/common/copy_ptr.hpp b/common/copy_ptr.hpp
new file mode 100644 (file)
index 0000000..f7e2335
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef autil__copy_ptr
+#define autil__copy_ptr
+
+#include "generic_copy_ptr-t.hpp"
+
+namespace acommon {
+
+  template <typename T>
+  class CopyPtr 
+  {
+    struct Parms {
+      T * clone(const T * ptr) const
+               { return new T(*ptr);}
+      void assign(T * & rhs, const T * lhs) const
+               { *rhs = *lhs; }
+      void del(T * ptr)
+               { delete ptr; }
+
+    };
+    GenericCopyPtr<T, Parms> impl;
+
+  public:
+
+    explicit CopyPtr(T * p = 0) : impl(p) {}
+    CopyPtr(const CopyPtr & other) : impl(other.impl) {}
+
+    CopyPtr & operator=(const CopyPtr & other) {
+      impl = other.impl; 
+      return *this;
+    }
+
+    void assign(const T * other) {impl.assign(other);}
+    void reset(T * other = 0)    {impl.reset(other);}
+    
+    T & operator*  () const {return *impl;}
+    T * operator-> () const {return impl;}
+    T * get()         const {return impl;}
+    operator T * ()   const {return impl;}
+
+    T * release() {return impl.release();}
+  };
+  
+}
+
+#endif
+
diff --git a/common/document_checker.cpp b/common/document_checker.cpp
new file mode 100644 (file)
index 0000000..5e510c4
--- /dev/null
@@ -0,0 +1,77 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "document_checker.hpp"
+#include "tokenizer.hpp"
+#include "convert.hpp"
+#include "speller.hpp"
+#include "config.hpp"
+
+namespace acommon {
+
+  DocumentChecker::DocumentChecker() 
+    : status_fun_(0), speller_(0) {}
+  DocumentChecker::~DocumentChecker() 
+  {
+  }
+
+  PosibErr<void> DocumentChecker
+  ::setup(Tokenizer * tokenizer, Speller * speller, Filter * filter)
+  {
+    tokenizer_.reset(tokenizer);
+    filter_.reset(filter);
+    speller_ = speller;
+    conv_ = speller->to_internal_;
+    return no_err;
+  }
+
+  void DocumentChecker::set_status_fun(void (* sf)(void *, Token, int), 
+                                      void * d)
+  {
+    status_fun_ = sf;
+    status_fun_data_ = d;
+  }
+
+  void DocumentChecker::reset()
+  {
+    if (filter_)
+      filter_->reset();
+  }
+
+  void DocumentChecker::process(const char * str, int size)
+  {
+    proc_str_.clear();
+    conv_->decode(str, size, proc_str_);
+    proc_str_.append(0);
+    FilterChar * begin = proc_str_.pbegin();
+    FilterChar * end   = proc_str_.pend() - 1;
+    if (filter_)
+      filter_->process(begin, end);
+    tokenizer_->reset(begin, end);
+  }
+
+  Token DocumentChecker::next_misspelling()
+  {
+    bool correct;
+    Token tok;
+    do {
+      if (!tokenizer_->advance()) {
+       tok.offset = proc_str_.size();
+       tok.len = 0;
+       return tok;
+      }
+      correct = speller_->check(MutableString(tokenizer_->word.data(),
+                                             tokenizer_->word.size() - 1));
+      tok.len  = tokenizer_->end_pos - tokenizer_->begin_pos;
+      tok.offset = tokenizer_->begin_pos;
+      if (status_fun_)
+       (*status_fun_)(status_fun_data_, tok, correct);
+    } while (correct);
+    return tok;
+  }
+
+}
+
diff --git a/common/document_checker.hpp b/common/document_checker.hpp
new file mode 100644 (file)
index 0000000..d35bb88
--- /dev/null
@@ -0,0 +1,62 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_DOCUMENT_CHECKER__HPP
+#define ASPELL_DOCUMENT_CHECKER__HPP
+
+#include "filter.hpp"
+#include "char_vector.hpp"
+#include "copy_ptr.hpp"
+#include "can_have_error.hpp"
+#include "filter_char.hpp"
+#include "filter_char_vector.hpp"
+
+namespace acommon {
+
+  class Config;
+  class Speller;
+  class Tokenizer;
+  class Convert;
+
+  struct Token {
+    unsigned int offset;
+    unsigned int len;
+    operator bool () const {return len != 0;}
+  };
+  
+  
+  class DocumentChecker : public CanHaveError {
+  public:
+    // will take ownership of tokenizer and filter (even if there is an error)
+    // config only used for this method.
+    // speller expected to stick around.
+    PosibErr<void> setup(Tokenizer *, Speller *, Filter *);
+    void reset();
+    void process(const char * str, int size);
+    Token next_misspelling();
+    
+    Filter * filter() {return filter_;}
+
+    void set_status_fun(void (*)(void *, Token, int), void *); 
+   
+    DocumentChecker();
+    ~DocumentChecker();
+    
+  private:
+    CopyPtr<Filter> filter_;
+    CopyPtr<Tokenizer> tokenizer_;
+    void (* status_fun_)(void *, Token, int);
+    void * status_fun_data_;
+    Speller * speller_;
+    Convert * conv_;
+    FilterCharVector proc_str_;
+  };
+
+  PosibErr<DocumentChecker *> new_document_checker(Speller *);
+
+}
+
+#endif /* ASPELL_DOCUMENT_CHECKER__HPP */
diff --git a/common/enumeration.hpp b/common/enumeration.hpp
new file mode 100644 (file)
index 0000000..b540291
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef __autil_enumeration__
+#define __autil_enumeration__
+
+#include "clone_ptr-t.hpp"
+
+// An enumeration is an efficient way to iterate through elements much
+// like a forward iterator.  The at_end method is a convince method
+// as enumerations will return a null pointer or some other sort of
+// special end state when they are at the end.
+// Unlike an iterator iterating through x elements on a list can be 
+// done in x function calls while an iterator will require 3*x.
+// function calls.
+// Example of emulator usage
+//   const char * word;
+//   while ( (word = elements->next()) != 0) { // one function call
+//     cout << word << endl;
+//   }
+// And an iterator
+//   iterator i = container->begin();
+//   iterator end = container->end();
+//   while (i != end) { // comparison, one function call
+//     cout << *i << endl; // deref, total of two function calls
+//     ++i;                // increment, total of three function calls.
+//   }
+// Normally all three calls are inline so it doesn't really matter
+// but when the container type is not visible there are not inline
+// and probably even virtual.
+// If you really love iterators you can very easily wrap an enumeration 
+// in a forward iterator.  
+
+namespace acommon {
+
+  template <typename Val>
+  class Enumeration {
+  public:
+    typedef Val Value;
+    typedef Enumeration Base;
+    virtual Enumeration * clone() const = 0;
+    virtual void assign(const Enumeration *) = 0;
+    virtual Value next() = 0;
+    virtual bool at_end() const = 0;
+    virtual ~Enumeration() {}
+  };
+
+  template <class Parms, class Enum = Enumeration<typename Parms::Value> > 
+  // Parms is expected to have the following members:
+  //   typename Value
+  //   typename Iterator;
+  //   bool endf(Iterator)  
+  //   Value end_state()
+  //   Value deref(Iterator)
+  class MakeEnumeration : public Enum {
+  public:
+    typedef typename Parms::Iterator Iterator;
+    typedef typename Parms::Value    Value;
+  private:
+    Iterator  i_;
+    Parms     parms_;
+  public:
+
+    MakeEnumeration(const Iterator i, const Parms & p = Parms()) 
+      : i_(i), parms_(p) {}
+
+    Enum * clone() const {
+      return new MakeEnumeration(*this);
+    }
+
+    void assign (const Enum * other) {
+      *this = *static_cast<const MakeEnumeration *>(other);
+    }
+
+    Value next() {
+      if (parms_.endf(i_))
+       return parms_.end_state();
+      Value temp = parms_.deref(i_);
+      ++i_;
+      return temp;
+    }
+
+    bool at_end() const {
+      return parms_.endf(i_);
+    }
+  };
+
+  template <class Value>
+  struct MakeAlwaysEndEnumerationParms {
+    Value end_state() const {return Value();}
+  };
+
+  template <class Value>
+  struct MakeAlwaysEndEnumerationParms<Value *> {
+    Value * end_state() const {return 0;}
+  };
+  
+  template <class Value> 
+  class MakeAlwaysEndEnumeration : public Enumeration<Value> {
+    MakeAlwaysEndEnumerationParms<Value> parms_;
+  public:
+    MakeAlwaysEndEnumeration * clone() const {
+      return new MakeAlwaysEndEnumeration(*this);
+    }
+    void assign(const Enumeration<Value> * that) {
+      *this = *static_cast<const MakeAlwaysEndEnumeration *>(that);
+    }
+    Value next() {return parms_.end_state();}
+    bool at_end() const {return true;}
+  };
+}
+
+#endif
+
diff --git a/common/error.cpp b/common/error.cpp
new file mode 100644 (file)
index 0000000..78b116a
--- /dev/null
@@ -0,0 +1,52 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "error.hpp"
+
+namespace acommon {
+
+  bool Error::is_a(ErrorInfo const * to_find) const 
+  {
+    const ErrorInfo * e = err;
+    while (e) {
+      if (e == to_find) return true;
+      e = e->isa;
+    }
+    return false;
+  }
+
+  Error::Error(const Error & other)
+  {
+    if (other.mesg) {
+      mesg = (char *)malloc(strlen(other.mesg) + 1);
+      strcpy(const_cast<char *>(mesg), other.mesg);
+    }
+    err = other.err;
+  }
+
+  Error & Error::operator=(const Error & other)
+  {
+    if (mesg)
+      free(const_cast<char *>(mesg));
+    if (other.mesg) {
+      unsigned int len = strlen(other.mesg) + 1;
+      mesg = (char *)malloc(len);
+      memcpy(const_cast<char *>(mesg), other.mesg, len);
+    }
+    err = other.err;
+    return *this;
+  }
+
+  Error::~Error()
+  {
+    if (mesg)
+      free(const_cast<char *>(mesg));
+  }
+
+}
diff --git a/common/error.hpp b/common/error.hpp
new file mode 100644 (file)
index 0000000..944fbb8
--- /dev/null
@@ -0,0 +1,37 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_ERROR__HPP
+#define ASPELL_ERROR__HPP
+
+namespace acommon {
+
+struct ErrorInfo;
+
+struct Error {
+  const char * mesg; // expected to be allocated with malloc
+  const ErrorInfo * err;
+
+  Error() : mesg(0), err(0) {}
+
+  Error(const Error &);
+  Error & operator=(const Error &);
+  ~Error();
+  
+  bool is_a(const ErrorInfo * e) const;
+};
+
+struct ErrorInfo {
+  const ErrorInfo * isa;
+  const char * mesg;
+  unsigned int num_parms;
+  const char * parms[3];
+};
+
+
+}
+
+#endif /* ASPELL_ERROR__HPP */
diff --git a/common/errors.cpp b/common/errors.cpp
new file mode 100644 (file)
index 0000000..792bbcf
--- /dev/null
@@ -0,0 +1,700 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "settings.h"
+#include "gettext.h"
+#include "error.hpp"
+#include "errors.hpp"
+
+namespace acommon {
+
+
+static const ErrorInfo aerror_other_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_other = &aerror_other_obj;
+
+static const ErrorInfo aerror_operation_not_supported_obj = {
+  0, // isa
+  N_("Operation Not Supported: %what:1"), // mesg
+  1, // num_parms
+  {"what"} // parms
+};
+extern "C" const ErrorInfo * const aerror_operation_not_supported = &aerror_operation_not_supported_obj;
+
+static const ErrorInfo aerror_cant_copy_obj = {
+  aerror_operation_not_supported, // isa
+  0, // mesg
+  1, // num_parms
+  {"what"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_copy = &aerror_cant_copy_obj;
+
+static const ErrorInfo aerror_unimplemented_method_obj = {
+  aerror_operation_not_supported, // isa
+  N_("The method \"%what:1\" is unimplemented in \"%where:2\"."), // mesg
+  2, // num_parms
+  {"what", "where"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unimplemented_method = &aerror_unimplemented_method_obj;
+
+static const ErrorInfo aerror_file_obj = {
+  0, // isa
+  N_("%file:1:"), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_file = &aerror_file_obj;
+
+static const ErrorInfo aerror_cant_open_file_obj = {
+  aerror_file, // isa
+  N_("The file \"%file:1\" can not be opened"), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_open_file = &aerror_cant_open_file_obj;
+
+static const ErrorInfo aerror_cant_read_file_obj = {
+  aerror_cant_open_file, // isa
+  N_("The file \"%file:1\" can not be opened for reading."), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_read_file = &aerror_cant_read_file_obj;
+
+static const ErrorInfo aerror_cant_write_file_obj = {
+  aerror_cant_open_file, // isa
+  N_("The file \"%file:1\" can not be opened for writing."), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_write_file = &aerror_cant_write_file_obj;
+
+static const ErrorInfo aerror_invalid_name_obj = {
+  aerror_file, // isa
+  N_("The file name \"%file:1\" is invalid."), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_name = &aerror_invalid_name_obj;
+
+static const ErrorInfo aerror_bad_file_format_obj = {
+  aerror_file, // isa
+  N_("The file \"%file:1\" is not in the proper format."), // mesg
+  1, // num_parms
+  {"file"} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_file_format = &aerror_bad_file_format_obj;
+
+static const ErrorInfo aerror_dir_obj = {
+  0, // isa
+  0, // mesg
+  1, // num_parms
+  {"dir"} // parms
+};
+extern "C" const ErrorInfo * const aerror_dir = &aerror_dir_obj;
+
+static const ErrorInfo aerror_cant_read_dir_obj = {
+  aerror_dir, // isa
+  N_("The directory \"%dir:1\" can not be opened for reading."), // mesg
+  1, // num_parms
+  {"dir"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_read_dir = &aerror_cant_read_dir_obj;
+
+static const ErrorInfo aerror_config_obj = {
+  0, // isa
+  0, // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_config = &aerror_config_obj;
+
+static const ErrorInfo aerror_unknown_key_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is unknown."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_key = &aerror_unknown_key_obj;
+
+static const ErrorInfo aerror_cant_change_value_obj = {
+  aerror_config, // isa
+  N_("The value for option \"%key:1\" can not be changed."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_change_value = &aerror_cant_change_value_obj;
+
+static const ErrorInfo aerror_bad_key_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is not %accepted:2 and is thus invalid."), // mesg
+  2, // num_parms
+  {"key", "accepted"} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_key = &aerror_bad_key_obj;
+
+static const ErrorInfo aerror_bad_value_obj = {
+  aerror_config, // isa
+  N_("The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%key:1\"."), // mesg
+  3, // num_parms
+  {"key", "value", "accepted"} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_value = &aerror_bad_value_obj;
+
+static const ErrorInfo aerror_duplicate_obj = {
+  aerror_config, // isa
+  0, // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_duplicate = &aerror_duplicate_obj;
+
+static const ErrorInfo aerror_key_not_string_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is not a string."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_key_not_string = &aerror_key_not_string_obj;
+
+static const ErrorInfo aerror_key_not_int_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is not an integer."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_key_not_int = &aerror_key_not_int_obj;
+
+static const ErrorInfo aerror_key_not_bool_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is not a boolean."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_key_not_bool = &aerror_key_not_bool_obj;
+
+static const ErrorInfo aerror_key_not_list_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" is not a list."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_key_not_list = &aerror_key_not_list_obj;
+
+static const ErrorInfo aerror_no_value_reset_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" does not take any parameters when prefixed by a \"reset-\"."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_value_reset = &aerror_no_value_reset_obj;
+
+static const ErrorInfo aerror_no_value_enable_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" does not take any parameters when prefixed by an \"enable-\"."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_value_enable = &aerror_no_value_enable_obj;
+
+static const ErrorInfo aerror_no_value_disable_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" or \"disable-\"."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_value_disable = &aerror_no_value_disable_obj;
+
+static const ErrorInfo aerror_no_value_clear_obj = {
+  aerror_config, // isa
+  N_("The key \"%key:1\" does not take any parameters when prefixed by a \"clear-\"."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_value_clear = &aerror_no_value_clear_obj;
+
+static const ErrorInfo aerror_language_related_obj = {
+  0, // isa
+  0, // mesg
+  1, // num_parms
+  {"lang"} // parms
+};
+extern "C" const ErrorInfo * const aerror_language_related = &aerror_language_related_obj;
+
+static const ErrorInfo aerror_unknown_language_obj = {
+  aerror_language_related, // isa
+  N_("The language \"%lang:1\" is not known."), // mesg
+  1, // num_parms
+  {"lang"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_language = &aerror_unknown_language_obj;
+
+static const ErrorInfo aerror_unknown_soundslike_obj = {
+  aerror_language_related, // isa
+  N_("The soundslike \"%sl:2\" is not known."), // mesg
+  2, // num_parms
+  {"lang", "sl"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_soundslike = &aerror_unknown_soundslike_obj;
+
+static const ErrorInfo aerror_language_not_supported_obj = {
+  aerror_language_related, // isa
+  N_("The language \"%lang:1\" is not supported."), // mesg
+  1, // num_parms
+  {"lang"} // parms
+};
+extern "C" const ErrorInfo * const aerror_language_not_supported = &aerror_language_not_supported_obj;
+
+static const ErrorInfo aerror_no_wordlist_for_lang_obj = {
+  aerror_language_related, // isa
+  N_("No word lists can be found for the language \"%lang:1\"."), // mesg
+  1, // num_parms
+  {"lang"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_wordlist_for_lang = &aerror_no_wordlist_for_lang_obj;
+
+static const ErrorInfo aerror_mismatched_language_obj = {
+  aerror_language_related, // isa
+  N_("Expected language \"%lang:1\" but got \"%prev:2\"."), // mesg
+  2, // num_parms
+  {"lang", "prev"} // parms
+};
+extern "C" const ErrorInfo * const aerror_mismatched_language = &aerror_mismatched_language_obj;
+
+static const ErrorInfo aerror_affix_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_affix = &aerror_affix_obj;
+
+static const ErrorInfo aerror_corrupt_affix_obj = {
+  aerror_affix, // isa
+  N_("Affix '%aff:1' is corrupt."), // mesg
+  1, // num_parms
+  {"aff"} // parms
+};
+extern "C" const ErrorInfo * const aerror_corrupt_affix = &aerror_corrupt_affix_obj;
+
+static const ErrorInfo aerror_invalid_cond_obj = {
+  aerror_affix, // isa
+  N_("The condition \"%cond:1\" is invalid."), // mesg
+  1, // num_parms
+  {"cond"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_cond = &aerror_invalid_cond_obj;
+
+static const ErrorInfo aerror_invalid_cond_strip_obj = {
+  aerror_affix, // isa
+  N_("The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be stripped."), // mesg
+  2, // num_parms
+  {"cond", "strip"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_cond_strip = &aerror_invalid_cond_strip_obj;
+
+static const ErrorInfo aerror_incorrect_encoding_obj = {
+  aerror_affix, // isa
+  N_("The file \"%file:1\" is not in the proper format. Expected the file to be in \"%exp:2\" not \"%got:3\"."), // mesg
+  3, // num_parms
+  {"file", "exp", "got"} // parms
+};
+extern "C" const ErrorInfo * const aerror_incorrect_encoding = &aerror_incorrect_encoding_obj;
+
+static const ErrorInfo aerror_encoding_obj = {
+  0, // isa
+  0, // mesg
+  1, // num_parms
+  {"encod"} // parms
+};
+extern "C" const ErrorInfo * const aerror_encoding = &aerror_encoding_obj;
+
+static const ErrorInfo aerror_unknown_encoding_obj = {
+  aerror_encoding, // isa
+  N_("The encoding \"%encod:1\" is not known."), // mesg
+  1, // num_parms
+  {"encod"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_encoding = &aerror_unknown_encoding_obj;
+
+static const ErrorInfo aerror_encoding_not_supported_obj = {
+  aerror_encoding, // isa
+  N_("The encoding \"%encod:1\" is not supported."), // mesg
+  1, // num_parms
+  {"encod"} // parms
+};
+extern "C" const ErrorInfo * const aerror_encoding_not_supported = &aerror_encoding_not_supported_obj;
+
+static const ErrorInfo aerror_conversion_not_supported_obj = {
+  aerror_encoding, // isa
+  N_("The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."), // mesg
+  2, // num_parms
+  {"encod", "encod2"} // parms
+};
+extern "C" const ErrorInfo * const aerror_conversion_not_supported = &aerror_conversion_not_supported_obj;
+
+static const ErrorInfo aerror_pipe_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_pipe = &aerror_pipe_obj;
+
+static const ErrorInfo aerror_cant_create_pipe_obj = {
+  aerror_pipe, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_create_pipe = &aerror_cant_create_pipe_obj;
+
+static const ErrorInfo aerror_process_died_obj = {
+  aerror_pipe, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_process_died = &aerror_process_died_obj;
+
+static const ErrorInfo aerror_bad_input_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_input = &aerror_bad_input_obj;
+
+static const ErrorInfo aerror_invalid_string_obj = {
+  aerror_bad_input, // isa
+  N_("The string \"%str:1\" is invalid."), // mesg
+  1, // num_parms
+  {"str"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_string = &aerror_invalid_string_obj;
+
+static const ErrorInfo aerror_invalid_word_obj = {
+  aerror_bad_input, // isa
+  N_("The word \"%word:1\" is invalid."), // mesg
+  1, // num_parms
+  {"word"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_word = &aerror_invalid_word_obj;
+
+static const ErrorInfo aerror_invalid_affix_obj = {
+  aerror_bad_input, // isa
+  N_("The affix flag '%aff:1' is invalid for word \"%word:2\"."), // mesg
+  2, // num_parms
+  {"aff", "word"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_affix = &aerror_invalid_affix_obj;
+
+static const ErrorInfo aerror_inapplicable_affix_obj = {
+  aerror_bad_input, // isa
+  N_("The affix flag '%aff:1' can not be applied to word \"%word:2\"."), // mesg
+  2, // num_parms
+  {"aff", "word"} // parms
+};
+extern "C" const ErrorInfo * const aerror_inapplicable_affix = &aerror_inapplicable_affix_obj;
+
+static const ErrorInfo aerror_unknown_unichar_obj = {
+  aerror_bad_input, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_unichar = &aerror_unknown_unichar_obj;
+
+static const ErrorInfo aerror_word_list_flags_obj = {
+  aerror_bad_input, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_word_list_flags = &aerror_word_list_flags_obj;
+
+static const ErrorInfo aerror_invalid_flag_obj = {
+  aerror_word_list_flags, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_flag = &aerror_invalid_flag_obj;
+
+static const ErrorInfo aerror_conflicting_flags_obj = {
+  aerror_word_list_flags, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_conflicting_flags = &aerror_conflicting_flags_obj;
+
+static const ErrorInfo aerror_version_control_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_version_control = &aerror_version_control_obj;
+
+static const ErrorInfo aerror_bad_version_string_obj = {
+  aerror_version_control, // isa
+  N_("not a version number"), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_version_string = &aerror_bad_version_string_obj;
+
+static const ErrorInfo aerror_filter_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_filter = &aerror_filter_obj;
+
+static const ErrorInfo aerror_cant_dlopen_file_obj = {
+  aerror_filter, // isa
+  N_("dlopen returned \"%return:1\"."), // mesg
+  1, // num_parms
+  {"return"} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_dlopen_file = &aerror_cant_dlopen_file_obj;
+
+static const ErrorInfo aerror_empty_filter_obj = {
+  aerror_filter, // isa
+  N_("The file \"%filter:1\" does not contain any filters."), // mesg
+  1, // num_parms
+  {"filter"} // parms
+};
+extern "C" const ErrorInfo * const aerror_empty_filter = &aerror_empty_filter_obj;
+
+static const ErrorInfo aerror_no_such_filter_obj = {
+  aerror_filter, // isa
+  N_("The filter \"%filter:1\" does not exist."), // mesg
+  1, // num_parms
+  {"filter"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_such_filter = &aerror_no_such_filter_obj;
+
+static const ErrorInfo aerror_confusing_version_obj = {
+  aerror_filter, // isa
+  N_("Confused by version control."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_confusing_version = &aerror_confusing_version_obj;
+
+static const ErrorInfo aerror_bad_version_obj = {
+  aerror_filter, // isa
+  N_("Aspell version does not match filter's requirement."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_version = &aerror_bad_version_obj;
+
+static const ErrorInfo aerror_identical_option_obj = {
+  aerror_filter, // isa
+  N_("Filter option already exists."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_identical_option = &aerror_identical_option_obj;
+
+static const ErrorInfo aerror_options_only_obj = {
+  aerror_filter, // isa
+  N_("Use option modifiers only within named option."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_options_only = &aerror_options_only_obj;
+
+static const ErrorInfo aerror_invalid_option_modifier_obj = {
+  aerror_filter, // isa
+  N_("Option modifier unknown."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_option_modifier = &aerror_invalid_option_modifier_obj;
+
+static const ErrorInfo aerror_cant_describe_filter_obj = {
+  aerror_filter, // isa
+  N_("Error setting filter description."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_cant_describe_filter = &aerror_cant_describe_filter_obj;
+
+static const ErrorInfo aerror_filter_mode_file_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_filter_mode_file = &aerror_filter_mode_file_obj;
+
+static const ErrorInfo aerror_mode_option_name_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Empty option specifier."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_mode_option_name = &aerror_mode_option_name_obj;
+
+static const ErrorInfo aerror_no_filter_to_option_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Option \"%option:1\" possibly specified prior to filter."), // mesg
+  1, // num_parms
+  {"option"} // parms
+};
+extern "C" const ErrorInfo * const aerror_no_filter_to_option = &aerror_no_filter_to_option_obj;
+
+static const ErrorInfo aerror_bad_mode_key_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Unknown mode description key \"%key:1\"."), // mesg
+  1, // num_parms
+  {"key"} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_mode_key = &aerror_bad_mode_key_obj;
+
+static const ErrorInfo aerror_expect_mode_key_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Expecting \"%modekey:1\" key."), // mesg
+  1, // num_parms
+  {"modekey"} // parms
+};
+extern "C" const ErrorInfo * const aerror_expect_mode_key = &aerror_expect_mode_key_obj;
+
+static const ErrorInfo aerror_mode_version_requirement_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Version specifier missing key: \"aspell\"."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_mode_version_requirement = &aerror_mode_version_requirement_obj;
+
+static const ErrorInfo aerror_confusing_mode_version_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Confused by version control."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_confusing_mode_version = &aerror_confusing_mode_version_obj;
+
+static const ErrorInfo aerror_bad_mode_version_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Aspell version does not match mode's requirement."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_mode_version = &aerror_bad_mode_version_obj;
+
+static const ErrorInfo aerror_missing_magic_expression_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Missing magic mode expression."), // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_missing_magic_expression = &aerror_missing_magic_expression_obj;
+
+static const ErrorInfo aerror_empty_file_ext_obj = {
+  aerror_filter_mode_file, // isa
+  N_("Empty extension at char %char:1."), // mesg
+  1, // num_parms
+  {"char"} // parms
+};
+extern "C" const ErrorInfo * const aerror_empty_file_ext = &aerror_empty_file_ext_obj;
+
+static const ErrorInfo aerror_filter_mode_expand_obj = {
+  0, // isa
+  N_("\"%mode:1\" error"), // mesg
+  1, // num_parms
+  {"mode"} // parms
+};
+extern "C" const ErrorInfo * const aerror_filter_mode_expand = &aerror_filter_mode_expand_obj;
+
+static const ErrorInfo aerror_unknown_mode_obj = {
+  aerror_filter_mode_expand, // isa
+  N_("Unknown mode: \"%mode:1\"."), // mesg
+  1, // num_parms
+  {"mode"} // parms
+};
+extern "C" const ErrorInfo * const aerror_unknown_mode = &aerror_unknown_mode_obj;
+
+static const ErrorInfo aerror_mode_extend_expand_obj = {
+  aerror_filter_mode_expand, // isa
+  N_("\"%mode:1\" error while extend Aspell modes. (out of memory?)"), // mesg
+  1, // num_parms
+  {"mode"} // parms
+};
+extern "C" const ErrorInfo * const aerror_mode_extend_expand = &aerror_mode_extend_expand_obj;
+
+static const ErrorInfo aerror_filter_mode_magic_obj = {
+  0, // isa
+  0, // mesg
+  2, // num_parms
+  {"mode", "magic"} // parms
+};
+extern "C" const ErrorInfo * const aerror_filter_mode_magic = &aerror_filter_mode_magic_obj;
+
+static const ErrorInfo aerror_file_magic_pos_obj = {
+  aerror_filter_mode_magic, // isa
+  N_("\"%mode:1\": no start for magic search given for magic \"%magic:2\"."), // mesg
+  2, // num_parms
+  {"mode", "magic"} // parms
+};
+extern "C" const ErrorInfo * const aerror_file_magic_pos = &aerror_file_magic_pos_obj;
+
+static const ErrorInfo aerror_file_magic_range_obj = {
+  aerror_filter_mode_magic, // isa
+  N_("\"%mode:1\": no range for magic search given for magic \"%magic:2\"."), // mesg
+  2, // num_parms
+  {"mode", "magic"} // parms
+};
+extern "C" const ErrorInfo * const aerror_file_magic_range = &aerror_file_magic_range_obj;
+
+static const ErrorInfo aerror_missing_magic_obj = {
+  aerror_filter_mode_magic, // isa
+  N_("\"%mode:1\": no magic expression available for magic \"%magic:2\"."), // mesg
+  2, // num_parms
+  {"mode", "magic"} // parms
+};
+extern "C" const ErrorInfo * const aerror_missing_magic = &aerror_missing_magic_obj;
+
+static const ErrorInfo aerror_bad_magic_obj = {
+  aerror_filter_mode_magic, // isa
+  N_("\"%mode:1\": Magic \"%magic:2\": bad regular expression after location specifier; regexp reports: \"%regerr:3\"."), // mesg
+  3, // num_parms
+  {"mode", "magic", "regerr"} // parms
+};
+extern "C" const ErrorInfo * const aerror_bad_magic = &aerror_bad_magic_obj;
+
+static const ErrorInfo aerror_expression_obj = {
+  0, // isa
+  0, // mesg
+  0, // num_parms
+  {""} // parms
+};
+extern "C" const ErrorInfo * const aerror_expression = &aerror_expression_obj;
+
+static const ErrorInfo aerror_invalid_expression_obj = {
+  aerror_expression, // isa
+  N_("\"%expression:1\" is not a valid regular expression."), // mesg
+  1, // num_parms
+  {"expression"} // parms
+};
+extern "C" const ErrorInfo * const aerror_invalid_expression = &aerror_invalid_expression_obj;
+
+
+
+}
+
diff --git a/common/errors.hpp b/common/errors.hpp
new file mode 100644 (file)
index 0000000..64dacc0
--- /dev/null
@@ -0,0 +1,193 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_ERRORS__HPP
+#define ASPELL_ERRORS__HPP
+
+
+namespace acommon {
+
+struct ErrorInfo;
+
+extern "C" const ErrorInfo * const aerror_other;
+extern "C" const ErrorInfo * const aerror_operation_not_supported;
+extern "C" const ErrorInfo * const   aerror_cant_copy;
+extern "C" const ErrorInfo * const   aerror_unimplemented_method;
+extern "C" const ErrorInfo * const aerror_file;
+extern "C" const ErrorInfo * const   aerror_cant_open_file;
+extern "C" const ErrorInfo * const     aerror_cant_read_file;
+extern "C" const ErrorInfo * const     aerror_cant_write_file;
+extern "C" const ErrorInfo * const   aerror_invalid_name;
+extern "C" const ErrorInfo * const   aerror_bad_file_format;
+extern "C" const ErrorInfo * const aerror_dir;
+extern "C" const ErrorInfo * const   aerror_cant_read_dir;
+extern "C" const ErrorInfo * const aerror_config;
+extern "C" const ErrorInfo * const   aerror_unknown_key;
+extern "C" const ErrorInfo * const   aerror_cant_change_value;
+extern "C" const ErrorInfo * const   aerror_bad_key;
+extern "C" const ErrorInfo * const   aerror_bad_value;
+extern "C" const ErrorInfo * const   aerror_duplicate;
+extern "C" const ErrorInfo * const   aerror_key_not_string;
+extern "C" const ErrorInfo * const   aerror_key_not_int;
+extern "C" const ErrorInfo * const   aerror_key_not_bool;
+extern "C" const ErrorInfo * const   aerror_key_not_list;
+extern "C" const ErrorInfo * const   aerror_no_value_reset;
+extern "C" const ErrorInfo * const   aerror_no_value_enable;
+extern "C" const ErrorInfo * const   aerror_no_value_disable;
+extern "C" const ErrorInfo * const   aerror_no_value_clear;
+extern "C" const ErrorInfo * const aerror_language_related;
+extern "C" const ErrorInfo * const   aerror_unknown_language;
+extern "C" const ErrorInfo * const   aerror_unknown_soundslike;
+extern "C" const ErrorInfo * const   aerror_language_not_supported;
+extern "C" const ErrorInfo * const   aerror_no_wordlist_for_lang;
+extern "C" const ErrorInfo * const   aerror_mismatched_language;
+extern "C" const ErrorInfo * const aerror_affix;
+extern "C" const ErrorInfo * const   aerror_corrupt_affix;
+extern "C" const ErrorInfo * const   aerror_invalid_cond;
+extern "C" const ErrorInfo * const   aerror_invalid_cond_strip;
+extern "C" const ErrorInfo * const   aerror_incorrect_encoding;
+extern "C" const ErrorInfo * const aerror_encoding;
+extern "C" const ErrorInfo * const   aerror_unknown_encoding;
+extern "C" const ErrorInfo * const   aerror_encoding_not_supported;
+extern "C" const ErrorInfo * const   aerror_conversion_not_supported;
+extern "C" const ErrorInfo * const aerror_pipe;
+extern "C" const ErrorInfo * const   aerror_cant_create_pipe;
+extern "C" const ErrorInfo * const   aerror_process_died;
+extern "C" const ErrorInfo * const aerror_bad_input;
+extern "C" const ErrorInfo * const   aerror_invalid_string;
+extern "C" const ErrorInfo * const   aerror_invalid_word;
+extern "C" const ErrorInfo * const   aerror_invalid_affix;
+extern "C" const ErrorInfo * const   aerror_inapplicable_affix;
+extern "C" const ErrorInfo * const   aerror_unknown_unichar;
+extern "C" const ErrorInfo * const   aerror_word_list_flags;
+extern "C" const ErrorInfo * const     aerror_invalid_flag;
+extern "C" const ErrorInfo * const     aerror_conflicting_flags;
+extern "C" const ErrorInfo * const aerror_version_control;
+extern "C" const ErrorInfo * const   aerror_bad_version_string;
+extern "C" const ErrorInfo * const aerror_filter;
+extern "C" const ErrorInfo * const   aerror_cant_dlopen_file;
+extern "C" const ErrorInfo * const   aerror_empty_filter;
+extern "C" const ErrorInfo * const   aerror_no_such_filter;
+extern "C" const ErrorInfo * const   aerror_confusing_version;
+extern "C" const ErrorInfo * const   aerror_bad_version;
+extern "C" const ErrorInfo * const   aerror_identical_option;
+extern "C" const ErrorInfo * const   aerror_options_only;
+extern "C" const ErrorInfo * const   aerror_invalid_option_modifier;
+extern "C" const ErrorInfo * const   aerror_cant_describe_filter;
+extern "C" const ErrorInfo * const aerror_filter_mode_file;
+extern "C" const ErrorInfo * const   aerror_mode_option_name;
+extern "C" const ErrorInfo * const   aerror_no_filter_to_option;
+extern "C" const ErrorInfo * const   aerror_bad_mode_key;
+extern "C" const ErrorInfo * const   aerror_expect_mode_key;
+extern "C" const ErrorInfo * const   aerror_mode_version_requirement;
+extern "C" const ErrorInfo * const   aerror_confusing_mode_version;
+extern "C" const ErrorInfo * const   aerror_bad_mode_version;
+extern "C" const ErrorInfo * const   aerror_missing_magic_expression;
+extern "C" const ErrorInfo * const   aerror_empty_file_ext;
+extern "C" const ErrorInfo * const aerror_filter_mode_expand;
+extern "C" const ErrorInfo * const   aerror_unknown_mode;
+extern "C" const ErrorInfo * const   aerror_mode_extend_expand;
+extern "C" const ErrorInfo * const aerror_filter_mode_magic;
+extern "C" const ErrorInfo * const   aerror_file_magic_pos;
+extern "C" const ErrorInfo * const   aerror_file_magic_range;
+extern "C" const ErrorInfo * const   aerror_missing_magic;
+extern "C" const ErrorInfo * const   aerror_bad_magic;
+extern "C" const ErrorInfo * const aerror_expression;
+extern "C" const ErrorInfo * const   aerror_invalid_expression;
+
+
+static const ErrorInfo * const other_error = aerror_other;
+static const ErrorInfo * const operation_not_supported_error = aerror_operation_not_supported;
+static const ErrorInfo * const   cant_copy = aerror_cant_copy;
+static const ErrorInfo * const   unimplemented_method = aerror_unimplemented_method;
+static const ErrorInfo * const file_error = aerror_file;
+static const ErrorInfo * const   cant_open_file_error = aerror_cant_open_file;
+static const ErrorInfo * const     cant_read_file = aerror_cant_read_file;
+static const ErrorInfo * const     cant_write_file = aerror_cant_write_file;
+static const ErrorInfo * const   invalid_name = aerror_invalid_name;
+static const ErrorInfo * const   bad_file_format = aerror_bad_file_format;
+static const ErrorInfo * const dir_error = aerror_dir;
+static const ErrorInfo * const   cant_read_dir = aerror_cant_read_dir;
+static const ErrorInfo * const config_error = aerror_config;
+static const ErrorInfo * const   unknown_key = aerror_unknown_key;
+static const ErrorInfo * const   cant_change_value = aerror_cant_change_value;
+static const ErrorInfo * const   bad_key = aerror_bad_key;
+static const ErrorInfo * const   bad_value = aerror_bad_value;
+static const ErrorInfo * const   duplicate = aerror_duplicate;
+static const ErrorInfo * const   key_not_string = aerror_key_not_string;
+static const ErrorInfo * const   key_not_int = aerror_key_not_int;
+static const ErrorInfo * const   key_not_bool = aerror_key_not_bool;
+static const ErrorInfo * const   key_not_list = aerror_key_not_list;
+static const ErrorInfo * const   no_value_reset = aerror_no_value_reset;
+static const ErrorInfo * const   no_value_enable = aerror_no_value_enable;
+static const ErrorInfo * const   no_value_disable = aerror_no_value_disable;
+static const ErrorInfo * const   no_value_clear = aerror_no_value_clear;
+static const ErrorInfo * const language_related_error = aerror_language_related;
+static const ErrorInfo * const   unknown_language = aerror_unknown_language;
+static const ErrorInfo * const   unknown_soundslike = aerror_unknown_soundslike;
+static const ErrorInfo * const   language_not_supported = aerror_language_not_supported;
+static const ErrorInfo * const   no_wordlist_for_lang = aerror_no_wordlist_for_lang;
+static const ErrorInfo * const   mismatched_language = aerror_mismatched_language;
+static const ErrorInfo * const affix_error = aerror_affix;
+static const ErrorInfo * const   corrupt_affix = aerror_corrupt_affix;
+static const ErrorInfo * const   invalid_cond = aerror_invalid_cond;
+static const ErrorInfo * const   invalid_cond_strip = aerror_invalid_cond_strip;
+static const ErrorInfo * const   incorrect_encoding = aerror_incorrect_encoding;
+static const ErrorInfo * const encoding_error = aerror_encoding;
+static const ErrorInfo * const   unknown_encoding = aerror_unknown_encoding;
+static const ErrorInfo * const   encoding_not_supported = aerror_encoding_not_supported;
+static const ErrorInfo * const   conversion_not_supported = aerror_conversion_not_supported;
+static const ErrorInfo * const pipe_error = aerror_pipe;
+static const ErrorInfo * const   cant_create_pipe = aerror_cant_create_pipe;
+static const ErrorInfo * const   process_died = aerror_process_died;
+static const ErrorInfo * const bad_input_error = aerror_bad_input;
+static const ErrorInfo * const   invalid_string = aerror_invalid_string;
+static const ErrorInfo * const   invalid_word = aerror_invalid_word;
+static const ErrorInfo * const   invalid_affix = aerror_invalid_affix;
+static const ErrorInfo * const   inapplicable_affix = aerror_inapplicable_affix;
+static const ErrorInfo * const   unknown_unichar = aerror_unknown_unichar;
+static const ErrorInfo * const   word_list_flags_error = aerror_word_list_flags;
+static const ErrorInfo * const     invalid_flag = aerror_invalid_flag;
+static const ErrorInfo * const     conflicting_flags = aerror_conflicting_flags;
+static const ErrorInfo * const version_control_error = aerror_version_control;
+static const ErrorInfo * const   bad_version_string = aerror_bad_version_string;
+static const ErrorInfo * const filter_error = aerror_filter;
+static const ErrorInfo * const   cant_dlopen_file = aerror_cant_dlopen_file;
+static const ErrorInfo * const   empty_filter = aerror_empty_filter;
+static const ErrorInfo * const   no_such_filter = aerror_no_such_filter;
+static const ErrorInfo * const   confusing_version = aerror_confusing_version;
+static const ErrorInfo * const   bad_version = aerror_bad_version;
+static const ErrorInfo * const   identical_option = aerror_identical_option;
+static const ErrorInfo * const   options_only = aerror_options_only;
+static const ErrorInfo * const   invalid_option_modifier = aerror_invalid_option_modifier;
+static const ErrorInfo * const   cant_describe_filter = aerror_cant_describe_filter;
+static const ErrorInfo * const filter_mode_file_error = aerror_filter_mode_file;
+static const ErrorInfo * const   mode_option_name = aerror_mode_option_name;
+static const ErrorInfo * const   no_filter_to_option = aerror_no_filter_to_option;
+static const ErrorInfo * const   bad_mode_key = aerror_bad_mode_key;
+static const ErrorInfo * const   expect_mode_key = aerror_expect_mode_key;
+static const ErrorInfo * const   mode_version_requirement = aerror_mode_version_requirement;
+static const ErrorInfo * const   confusing_mode_version = aerror_confusing_mode_version;
+static const ErrorInfo * const   bad_mode_version = aerror_bad_mode_version;
+static const ErrorInfo * const   missing_magic_expression = aerror_missing_magic_expression;
+static const ErrorInfo * const   empty_file_ext = aerror_empty_file_ext;
+static const ErrorInfo * const filter_mode_expand_error = aerror_filter_mode_expand;
+static const ErrorInfo * const   unknown_mode = aerror_unknown_mode;
+static const ErrorInfo * const   mode_extend_expand = aerror_mode_extend_expand;
+static const ErrorInfo * const filter_mode_magic_error = aerror_filter_mode_magic;
+static const ErrorInfo * const   file_magic_pos = aerror_file_magic_pos;
+static const ErrorInfo * const   file_magic_range = aerror_file_magic_range;
+static const ErrorInfo * const   missing_magic = aerror_missing_magic;
+static const ErrorInfo * const   bad_magic = aerror_bad_magic;
+static const ErrorInfo * const expression_error = aerror_expression;
+static const ErrorInfo * const   invalid_expression = aerror_invalid_expression;
+
+
+}
+
+#endif /* ASPELL_ERRORS__HPP */
diff --git a/common/file_data_util.cpp b/common/file_data_util.cpp
new file mode 100644 (file)
index 0000000..52adb8d
--- /dev/null
@@ -0,0 +1,75 @@
+#include "config.hpp"
+#include "file_util.hpp"
+#include "file_data_util.hpp"
+
+namespace acommon {
+  
+  // Fill in values for a local data directory and a system data directory
+  // The values are stored under the keys local-data-dir and data-dir.
+  // If the is no local-data-dir value, use the directory from master-path.
+  // If there is no directory in master-path, use the current working dir.
+  // FIXME: The case when there is no "/" in the master-path should not
+  //   happen since it is an internal option.  Unofficially, it can still
+  //   be set by the user.  This needs to eventually be fixed.
+  void fill_data_dir(const Config * config, String & dir1, String & dir2) {
+    if (config->have("local-data-dir")) {
+      dir1 = config->retrieve("local-data-dir");
+      if (dir1[dir1.size()-1] != '/') dir1 += '/';
+    } else {
+      dir1 = config->retrieve("master-path");
+      size_t pos = dir1.rfind('/');
+      if (pos != String::npos)
+        dir1.resize(pos + 1);
+      else
+        dir1 = "./";
+    }
+    dir2 = config->retrieve("data-dir");
+    if (dir2[dir2.size()-1] != '/') dir2 += '/';
+  }
+  
+  const String & find_file(String & file,
+                           const String & dir1, const String & dir2, 
+                           const String & name, const char * extension)
+  {
+    file = dir1 + name + extension;
+    if (file_exists(file)) return dir1;
+    file = dir2 + name + extension;
+    return dir2;
+  }
+
+  bool find_file(String & file,
+                 const String & dir1, const String & dir2, 
+                 const String & name, 
+                 ParmString preext, ParmString ext)
+  {
+    bool try_name_only = false;
+    if (name.size() > ext.size() 
+        && memcmp(name.c_str() + name.size() - ext.size(), 
+                  ext, ext.size()) == 0) try_name_only = true;
+    if (!try_name_only) {
+      String n = name; n += preext; n += ext;
+      file = dir1 + n;
+      if (file_exists(file)) return true;
+      file = dir2 + n;
+      if (file_exists(file)) return true;
+
+      n = name; n += ext;
+      file = dir1 + n;
+      if (file_exists(file)) return true;
+      file = dir2 + n;
+      if (file_exists(file)) return true;
+    }
+
+    file = dir1 + name;
+    if (file_exists(file)) return true;
+    file = dir2 + name;
+    if (file_exists(file)) return true;
+
+    if (try_name_only) {file = dir1 + name;}
+    else               {file = dir1 + name; file += preext; file += ext;}
+    
+    return false;
+  }
+  
+  
+}
diff --git a/common/file_data_util.hpp b/common/file_data_util.hpp
new file mode 100644 (file)
index 0000000..89beffe
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef aspeller_file_data_util__hh
+#define aspeller_file_data_util__hh
+
+#include "parm_string.hpp"
+
+namespace acommon {class Config;}
+
+namespace acommon {
+
+  void fill_data_dir(const Config *, String & dir1, String & dir2);
+  const String & find_file(String & path,
+                           const String & dir1, const String & dir2, 
+                           const String & name, const char * extension);
+  bool find_file(String & file,
+                 const String & dir1, const String & dir2, 
+                 const String & name, 
+                 ParmString preext, ParmString ext);
+}
+
+#endif
diff --git a/common/file_util.cpp b/common/file_util.cpp
new file mode 100644 (file)
index 0000000..8515832
--- /dev/null
@@ -0,0 +1,235 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "settings.h"
+
+//#include "iostream.hpp"
+
+#include "config.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "errors.hpp"
+#include "string_list.hpp"
+
+#ifdef USE_FILE_LOCKS
+#  include <fcntl.h>
+#  include <unistd.h>
+#  include <sys/types.h>
+#endif
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+#ifdef WIN32
+
+#  include <io.h>
+#  define ACCESS _access
+#  include <windows.h>
+#  include <winbase.h>
+
+#else
+
+#  include <unistd.h>
+#  define ACCESS access
+
+#endif
+
+
+namespace acommon {
+
+  // Return false if file is already an absolute path and does not need
+  // a directory prepended.
+  bool need_dir(ParmString file) {
+    if (file[0] == '/' || (file[0] == '.' && file[1] == '/')
+#ifdef WIN32
+        || (asc_isalpha(file[0]) && file[1] == ':')
+        || file[0] == '\\' || (file[0] == '.' && file[1] == '\\')
+#endif
+      )
+      return false;
+    else
+      return true;
+  }
+
+  String add_possible_dir(ParmString dir, ParmString file) {
+    if (need_dir(file)) {
+      String path;
+      path += dir;
+      path += '/';
+      path += file;
+      return path;
+    } else {
+      return file;
+    }
+  }
+
+  String figure_out_dir(ParmString dir, ParmString file)
+  {
+    String temp;
+    int s = file.size() - 1;
+    while (s != -1 && file[s] != '/') --s;
+    if (need_dir(file)) {
+      temp += dir;
+      temp += '/';
+    }
+    if (s != -1) {
+      temp.append(file, s);
+    }
+    return temp;
+  }
+
+  time_t get_modification_time(FStream & f) {
+    struct stat s;
+    fstat(f.file_no(), &s);
+    return s.st_mtime;
+  }
+
+  PosibErr<void> open_file_readlock(FStream & in, ParmString file) {
+    RET_ON_ERR(in.open(file, "r"));
+#ifdef USE_FILE_LOCKS
+    int fd = in.file_no();
+    struct flock fl;
+    fl.l_type   = F_RDLCK;
+    fl.l_whence = SEEK_SET;
+    fl.l_start  = 0;
+    fl.l_len    = 0;
+    fcntl(fd, F_SETLKW, &fl); // ignore errors
+#endif
+    return no_err;
+  }
+
+  PosibErr<bool> open_file_writelock(FStream & inout, ParmString file) {
+    typedef PosibErr<bool> Ret;
+#ifndef USE_FILE_LOCKS
+    bool exists = file_exists(file);
+#endif
+    {
+     Ret pe = inout.open(file, "r+");
+     if (pe.get_err() != 0)
+       pe = inout.open(file, "w+");
+     if (pe.has_err())
+       return pe;
+    }
+#ifdef USE_FILE_LOCKS
+    int fd = inout.file_no();
+    struct flock fl;
+    fl.l_type   = F_WRLCK;
+    fl.l_whence = SEEK_SET;
+    fl.l_start  = 0;
+    fl.l_len    = 0;
+    fcntl(fd, F_SETLKW, &fl); // ignore errors
+    struct stat s;
+    fstat(fd, &s);
+    return s.st_size != 0;
+#else
+    return exists;
+#endif
+  }
+
+  void truncate_file(FStream & f, ParmString name) {
+#ifdef USE_FILE_LOCKS
+    f.restart();
+    ftruncate(f.file_no(),0);
+#else
+    f.close();
+    f.open(name, "w+");
+#endif
+  }
+
+  bool remove_file(ParmString name) {
+    return remove(name) == 0;
+  }
+
+  bool file_exists(ParmString name) {
+    return ACCESS(name, F_OK) == 0;
+  }
+
+  bool rename_file(ParmString orig_name, ParmString new_name)
+  {
+    remove(new_name);
+    return rename(orig_name, new_name) == 0;
+  }
+  const char * get_file_name(const char * path) {
+    const char * file_name;
+    if (path != 0) {
+      file_name = strrchr(path,'/');
+      if (file_name == 0)
+        file_name = path;
+    } else {
+      file_name = 0;
+    }
+    return file_name;
+  }
+
+  unsigned find_file(const Config * config, const char * option, String & filename)
+  {
+    StringList sl;
+    config->retrieve_list(option, &sl);
+    return find_file(sl, filename);
+  }
+
+  unsigned find_file(const StringList & sl, String & filename)
+  {
+    StringListEnumeration els = sl.elements_obj();
+    const char * dir;
+    String path;
+    while ( (dir = els.next()) != 0 ) 
+    {
+      path = dir;
+      if (path.back() != '/') path += '/';
+      unsigned dir_len = path.size();
+      path += filename;
+      if (file_exists(path)) {
+        filename.swap(path);
+        return dir_len;
+      }
+    }
+    return 0;
+  }
+
+  PathBrowser::PathBrowser(const StringList & sl, const char * suf)
+    : dir_handle(0)
+  {
+    els = sl.elements();
+    suffix = suf;
+  }
+
+  PathBrowser::~PathBrowser() 
+  {
+    delete els;
+    if (dir_handle) closedir((DIR *)dir_handle);
+  }
+
+  const char * PathBrowser::next()
+  {
+    if (dir_handle == 0) goto get_next_dir;
+  begin: {
+      struct dirent * entry = readdir((DIR *)dir_handle);
+      if (entry == 0) goto try_again;
+      const char * name = entry->d_name;
+      unsigned name_len = strlen(name);
+      if (suffix.size() != 0 && 
+          !(name_len > suffix.size() 
+            && memcmp(name + name_len - suffix.size(), suffix.str(), suffix.size()) == 0))
+        goto begin;
+      path = dir;
+      if (path.back() != '/') path += '/';
+      path += name;
+    }
+    return path.str();
+  try_again:
+    if (dir_handle) closedir((DIR *)dir_handle);
+    dir_handle = 0;
+  get_next_dir:
+    dir = els->next();
+    if (!dir) return 0;
+    dir_handle = opendir(dir);
+    if (dir_handle == 0) goto try_again;
+    goto begin;
+  }
+}
diff --git a/common/file_util.hpp b/common/file_util.hpp
new file mode 100644 (file)
index 0000000..665e28a
--- /dev/null
@@ -0,0 +1,63 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_FILE_UTIL__HPP
+#define ASPELL_FILE_UTIL__HPP
+
+#include <time.h>
+
+#include "string.hpp"
+#include "posib_err.hpp"
+
+namespace acommon {
+
+  class FStream;
+  class Config;
+  class StringList;
+
+  bool need_dir(ParmString file);
+  String add_possible_dir(ParmString dir, ParmString file);
+  String figure_out_dir(ParmString dir, ParmString file);
+
+  // FIXME: Possible remove
+  //void open_file(FStream & in, const string & file,
+  //               ParmString mode = "r");
+  time_t get_modification_time(FStream & f);
+  PosibErr<void> open_file_readlock(FStream& in, ParmString file);
+  PosibErr<bool> open_file_writelock(FStream & in, ParmString file);
+  // returns true if the file already exists
+  void truncate_file(FStream & f, ParmString name);
+  bool remove_file(ParmString name);
+  bool file_exists(ParmString name);
+  bool rename_file(ParmString orig, ParmString new_name);
+  // will return NULL if path is NULL.
+  const char * get_file_name(const char * path);
+
+  // expands filename to the full path
+  // returns the length of the directory part or 0 if nothing found
+  unsigned find_file(const Config *, const char * option, String & filename);
+  unsigned find_file(const StringList &, String & filename);
+
+  class StringEnumeration;
+
+  class PathBrowser
+  {
+    String suffix;
+    String path;
+    StringEnumeration * els;
+    void * dir_handle;
+    const char * dir;
+    PathBrowser(const PathBrowser &);
+    void operator= (const PathBrowser &);
+  public:
+    PathBrowser(const StringList &, const char * suf = "");
+    ~PathBrowser();
+    const char * next();
+  };
+
+}
+
+#endif
diff --git a/common/filter.cpp b/common/filter.cpp
new file mode 100644 (file)
index 0000000..54c5bb9
--- /dev/null
@@ -0,0 +1,139 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "settings.h"
+
+#include "config.hpp"
+#include "filter.hpp"
+#include "speller.hpp"
+#include "indiv_filter.hpp"
+#include "strtonum.hpp"
+#include "errors.hpp"
+#include "asc_ctype.hpp"
+
+#ifdef HAVE_LIBDL
+#  include <dlfcn.h>
+#endif
+
+namespace acommon {
+
+  FilterHandle::~FilterHandle() 
+  {
+    //FIXME: This causes a seg fault
+    //if (handle) dlclose(handle);
+  } 
+
+  Filter::Filter() {}
+
+  void Filter::add_filter(IndividualFilter * filter)
+  {
+    Filters::iterator cur, end;
+    cur = filters_.begin();
+    end = filters_.end();
+    while ((cur != end) && (filter->order_num() > (*cur)->order_num())){
+      ++cur;
+    }
+    filters_.insert(cur, filter);
+  }
+
+  void Filter::reset()
+  {
+    Filters::iterator cur, end;
+    cur = filters_.begin();
+    end = filters_.end();
+    for (; cur != end; ++cur)
+      (*cur)->reset();
+  }
+
+  void Filter::process(FilterChar * & start, FilterChar * & stop)
+  {
+    Filters::iterator cur, end;
+    cur = filters_.begin();
+    end = filters_.end();
+    for (; cur != end; ++cur)
+      (*cur)->process(start, stop);
+  }
+
+  void Filter::clear()
+  {
+    Filters::iterator cur, end;
+    cur = filters_.begin();
+    end = filters_.end();
+    for (; cur != end; ++cur){
+      delete *cur;
+    }
+    filters_.clear();
+  }
+
+  Filter::~Filter() 
+  {
+    clear();
+  }
+
+  static PosibErr<int> version_compare(const char * x, const char * y)
+  {
+    do {
+      int xn = 0, yn = 0;
+      if (*x) {
+        if (!asc_isdigit(*x)) return make_err(bad_version_string);
+        xn = strtoi_c(x, &x);}
+      if (*y) {
+        if (!asc_isdigit(*y)) return make_err(bad_version_string);
+        yn = strtoi_c(y, &y);}
+      int diff = xn - yn;
+      if (diff != 0) return diff;
+      if (*x) {
+        if (*x != '.') return make_err(bad_version_string);
+        ++x;}
+      if (*y) {
+        if (*y != '.') return make_err(bad_version_string);
+        ++y;}
+    } while (*x || *y);
+    return 0;
+  }
+
+  PosibErr<bool> verify_version(const char * rel_op, 
+                                const char * actual, const char * required) 
+  {
+    assert(actual != NULL && required != NULL);
+
+    RET_ON_ERR_SET(version_compare(actual, required), int, cmp);
+
+    if (cmp == 0 && strchr(rel_op, '=')) return true;
+    if (cmp < 0  && strchr(rel_op, '<')) return true;
+    if (cmp > 0  && strchr(rel_op, '>')) return true;
+    return false;
+  }
+
+  PosibErr<void> check_version(const char * requirement)
+  {
+    const char * s = requirement;
+    
+    if (*s == '>' || *s == '<') s++;
+    if (*s == '=')              s++;
+
+    String rel_op(requirement, s - requirement);
+    String req_ver(s);
+    
+    char act_ver[] = PACKAGE_VERSION;
+
+    char * seek = act_ver;
+    while (*seek && *seek != '-') ++seek; // remove any part after the '-'
+    *seek = '\0';
+
+    PosibErr<bool> peb = verify_version(rel_op.str(), act_ver, req_ver.str());
+    
+    if (peb.has_err()) {
+      peb.ignore_err();
+      return make_err(confusing_version);
+    } else if ( peb == false ) {
+      return make_err(bad_version);
+    } else {
+      return no_err;
+    }
+  }
+}
+
diff --git a/common/filter.hpp b/common/filter.hpp
new file mode 100644 (file)
index 0000000..25f9dd9
--- /dev/null
@@ -0,0 +1,67 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_FILTER__HPP
+#define ASPELL_FILTER__HPP
+
+#include "can_have_error.hpp"
+#include "copy_ptr.hpp"
+#include "filter_char.hpp"
+#include "posib_err.hpp"
+#include "vector.hpp"
+#include "string_pair_enumeration.hpp"
+
+#include <stdio.h>
+
+namespace acommon {
+
+  class Config;
+  class Speller;
+  class IndividualFilter;
+  class StringList;
+  struct ConfigModule;
+
+  class Filter : public CanHaveError {
+  public:
+    
+    bool empty() const {return filters_.empty();}
+    void clear();
+    void reset();
+    void process(FilterChar * & start, FilterChar * & stop);
+    void add_filter(IndividualFilter * filter);
+    // setup the filter where the string list is the list of 
+    // filters to use.
+    Filter();
+    ~Filter();
+
+ private:
+    typedef Vector<IndividualFilter *> Filters;
+    Filters filters_;
+  };
+
+  PosibErr<void> set_mode_from_extension(Config * config,
+                                         ParmString filename,
+                                         FILE * in = NULL);
+  
+  PosibErr<void> setup_filter(Filter &, Config *, 
+                             bool use_decoder, 
+                             bool use_filter, 
+                             bool use_encoder);
+  void activate_dynamic_filteroptions(Config *c);
+  void activate_filter_modes(Config * config);
+
+  void load_all_filters(Config * config);
+
+  PosibErr<bool> verify_version(const char * relOp, 
+                                const char * actual, const char * required);
+  PosibErr<void> check_version(const char * requirement);
+
+  PosibErr<StringPairEnumeration *> available_filters(Config *);
+  PosibErr<StringPairEnumeration *> available_filter_modes(Config *);
+
+};
+
+#endif /* ASPELL_FILTER__HPP */
diff --git a/common/filter_char.hpp b/common/filter_char.hpp
new file mode 100644 (file)
index 0000000..0452ae4
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef acommon_filter_char_hh
+#define acommon_filter_char_hh
+
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+namespace acommon {
+
+  struct FilterChar {
+    unsigned int chr; 
+    unsigned int width; // width must always be < 256
+    typedef unsigned int Chr;
+    typedef unsigned int Width;
+    explicit FilterChar(Chr c = 0, Width w = 1) 
+      : chr(c), width(w) {}
+    FilterChar(Chr c, FilterChar o)
+      : chr(c), width(o.width) {}
+    static Width sum(const FilterChar * o, const FilterChar * stop) {
+      Width total = 0; 
+      for (; o != stop; ++o)
+       total += o->width;
+      return total;
+    }
+    static Width sum(const FilterChar * o, unsigned int size) {
+      return sum(o, o+size);
+    }
+    FilterChar(Chr c, const FilterChar * o, unsigned int size)
+      : chr(c), width(sum(o,size)) {}
+    FilterChar(Chr c, const FilterChar * o, const FilterChar * stop)
+      : chr(c), width(sum(o,stop)) {}
+    operator Chr () const {return chr;}
+    FilterChar & operator= (Chr c) {chr = c; return *this;}
+  };
+  
+  static inline bool operator==(FilterChar lhs, FilterChar rhs)
+  {
+    return lhs.chr == rhs.chr;
+  }
+  
+  static inline bool operator!=(FilterChar lhs, FilterChar rhs)
+  {
+    return lhs.chr != rhs.chr;
+  }
+
+}
+
+#endif
diff --git a/common/filter_char_vector.hpp b/common/filter_char_vector.hpp
new file mode 100644 (file)
index 0000000..4e14f55
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef acommon_filter_char_vector__hh
+#define acommon_filter_char_vector__hh
+
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "vector.hpp"
+#include "filter_char.hpp"
+
+namespace acommon {
+
+  class FilterCharVector : public Vector<FilterChar>
+  {
+    typedef Vector<FilterChar> Base;
+  public:
+    void append(const char * str, FilterChar::Width w) {
+      Base::append(FilterChar(*str, w));
+      ++str;
+      for (;*str; ++str)
+       Base::append(FilterChar(*str, 1));
+    }
+    void append(FilterChar::Chr c, FilterChar::Width w) {
+      Base::append(FilterChar(c, w));
+    }
+    void append(FilterChar t) {
+      Base::append(t);
+    }
+    void append(FilterChar::Chr t) {
+      Base::append(FilterChar(t));
+    }
+    void append(const FilterChar * begin, unsigned int size) {
+      Base::append(begin, size);
+    }
+  };
+
+}
+
+#endif
diff --git a/common/filter_debug.hpp b/common/filter_debug.hpp
new file mode 100644 (file)
index 0000000..b054539
--- /dev/null
@@ -0,0 +1,41 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Christoph Hintermüller under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+//
+// Added by Christoph Hintermüller
+// renamed from loadable-filter-API.hpp
+
+#ifndef ASPELL_FILTER_DEBUG__HPP
+#define ASPELL_FILTER_DEBUG__HPP
+
+#include <stdio.h>
+
+#ifdef FILTER_PROGRESS_CONTROL
+static FILE * controllout=stderr;
+#define FDEBUGCLOSE do {\
+  if ((controllout != stdout) && (controllout != stderr)) {\
+    fclose(controllout);\
+    controllout=stderr;\
+  } } while (false)
+
+#define FDEBUGNOTOPEN do {\
+  if ((controllout == stdout) || (controllout == stderr)) {\
+    FDEBUGOPEN; \
+  } } while (false)
+
+#define FDEBUGOPEN do {\
+  FDEBUGCLOSE; \
+  if ((controllout=fopen(FILTER_PROGRESS_CONTROL,"w")) == NULL) {\
+    controllout=stderr;\
+  }\
+  setbuf(controllout,NULL);\
+  fprintf(controllout,"Debug Destination %s\n",FILTER_PROGRESS_CONTROL);\
+  } while (false)
+
+#define FDEBUG fprintf(controllout,"File: %s(%i)\n",__FILE__,__LINE__)
+#define FDEBUGPRINTF(a) fprintf(controllout,a)
+#endif // FILTER_PROGRESS_CONTROL
+
+#endif
diff --git a/common/fstream.cpp b/common/fstream.cpp
new file mode 100644 (file)
index 0000000..efc2e33
--- /dev/null
@@ -0,0 +1,149 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "iostream.hpp"
+
+#include "asc_ctype.hpp"
+#include "string.hpp"
+#include "fstream.hpp"
+#include "errors.hpp"
+
+namespace acommon {
+
+  PosibErr<void> FStream::open(ParmStr name, const char * mode)
+  {
+    assert (file_ == 0);
+    file_ = fopen(name,mode);
+    if (file_ == 0) {
+      if (strpbrk(mode, "wa+") != 0)
+       return make_err(cant_write_file, name);
+      else
+       return make_err(cant_read_file, name);
+    } else {
+      return no_err;
+    }
+  }
+
+  void FStream::close()
+  {
+    if (file_ != 0 && own_)
+      fclose(file_);
+    file_ = 0;
+  }
+
+  int FStream::file_no() 
+  {
+    return fileno(file_);
+  }
+
+  FILE * FStream::c_stream() 
+  {
+    return file_;
+  }
+
+  void FStream::restart()
+  {
+    flush();
+    fseek(file_,0,SEEK_SET);
+  }
+
+  void FStream::skipws() 
+  {
+    int c;
+    while (c = getc(file_), c != EOF && asc_isspace(c));
+    ungetc(c, file_);
+  }
+
+  FStream & FStream::operator>> (String & str)
+  {
+    skipws();
+    int c;
+    str = "";
+    while (c = getc(file_), c != EOF && !asc_isspace(c))
+      str += static_cast<char>(c);
+    ungetc(c, file_);
+    return *this;
+  }
+
+  FStream & FStream::operator<< (ParmStr str)
+  {
+    fputs(str, file_);
+    return *this;
+  }
+
+  bool FStream::append_line(String & str, char d)
+  {
+    int c;
+    c = getc(file_);
+    if (c == EOF) return false;
+    if (c == (int)d) return true;
+    str.append(c);
+    while (c = getc(file_), c != EOF && c != (int)d) 
+      str.append(c);
+    return true;
+  }
+
+  bool FStream::read(void * str, unsigned int n)
+  {
+    fread(str,1,n,file_);
+    return operator bool();
+  }
+
+  void FStream::write(char c)
+  {
+    putc(c, file_);
+  }
+
+  void FStream::write(ParmStr str) 
+  {
+    fputs(str, file_);
+  }
+
+  void FStream::write(const void * str, unsigned int n)
+  {
+    fwrite(str,1,n,file_);
+  }
+
+  FStream & FStream::operator>> (unsigned int & num)
+  {
+    int r = fscanf(file_, " %u", &num);
+    if (r != 1)
+      close();
+    return *this;
+  }
+
+
+  FStream & FStream::operator<< (unsigned int num)
+  {
+    fprintf(file_, "%u", num);
+    return *this;
+  }
+
+  FStream & FStream::operator>> (int & num)
+  {
+    int r = fscanf(file_, " %i", &num);
+    if (r != 1)
+      close();
+    return *this;
+  }
+
+
+  FStream & FStream::operator<< (int num)
+  {
+    fprintf(file_, "%i", num);
+    return *this;
+  }
+
+  FStream & FStream::operator<< (double num)
+  {
+    fprintf(file_, "%g", num);
+    return *this;
+  }
+
+}
diff --git a/common/fstream.hpp b/common/fstream.hpp
new file mode 100644 (file)
index 0000000..bd98e0e
--- /dev/null
@@ -0,0 +1,101 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_FSTREAM__HPP
+#define ASPELL_FSTREAM__HPP
+
+#include <stdio.h>
+
+#include "string.hpp"
+#include "istream.hpp"
+#include "ostream.hpp"
+#include "posib_err.hpp"
+
+// NOTE: See iostream.hpp for the standard stream (ie standard input,
+//       output, error)
+
+namespace acommon {
+  class String;
+
+  class FStream : public IStream, public OStream
+  {
+  private:
+    FILE * file_;
+    bool   own_;
+
+  public:
+    FStream(char d = '\n') 
+      : IStream(d), file_(0), own_(true) {}
+    FStream(FILE * f, bool own = true) 
+      : IStream('\n'), file_(f), own_(own) {}
+    ~FStream() {close();}
+
+    PosibErr<void> open(ParmStr, const char *);
+    void close();
+    operator bool() {return file_ != 0 && !feof(file_) && !ferror(file_);}
+
+    int get() {return getc(file_);}
+    void ignore() {getc(file_);}
+    int peek() {int c = getc(file_); ungetc(c, file_); return c;}
+
+    FILE * c_stream();
+    int file_no();
+    
+    int vprintf(const char * format, va_list ap)
+    {
+      return vfprintf(file_, format, ap);
+    }
+
+    void flush() {fflush(file_);}
+
+    // flushes the stream and goes to the beginning of the file
+    void restart();
+
+    void skipws();
+
+    // Will return false if there is no more data
+    bool append_line(String &, char d);
+
+    // These perform raw io with any sort of formating
+    bool read(void *, unsigned int i);
+    void write(ParmStr);
+    void write(char c);
+    void write(const void *, unsigned int i);
+
+    long int tell() {return ftell(file_);}
+    bool seek(long int offset, int whence = SEEK_SET) {
+      return fseek(file_, offset, whence) == 0;
+    }
+    
+
+    // The << >> operators are designed to work about they same
+    // as they would with A C++ stream.
+    FStream & operator>> (char & c)
+    {
+      skipws();
+      c = getc(file_);
+      return *this;
+    }
+    
+    FStream & operator<< (char c)
+    {
+      putc(c, file_);
+      return *this;
+    }
+
+    FStream & operator>> (String &);
+    FStream & operator>> (unsigned int &);
+    FStream & operator>> (int &);
+    FStream & operator<< (ParmStr);
+    FStream & operator<< (unsigned int);
+    FStream & operator<< (int);
+    FStream & operator<< (double);
+
+  };
+}
+
+#endif
diff --git a/common/generic_copy_ptr-t.hpp b/common/generic_copy_ptr-t.hpp
new file mode 100644 (file)
index 0000000..1f5622e
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef autil__generic_copy_ptr_t
+#define autil__generic_copy_ptr_t
+
+#include "generic_copy_ptr.hpp"
+
+namespace acommon {
+
+  template <typename T, typename Parms> 
+  GenericCopyPtr<T,Parms>::GenericCopyPtr(const GenericCopyPtr & other) 
+  {
+    if (other.ptr_ != 0) 
+      ptr_ = parms_.clone(other.ptr_);
+    else
+      ptr_ = 0;
+    parms_  = other.parms_;
+  }
+  
+  template <typename T, typename Parms>
+  void GenericCopyPtr<T,Parms>::assign(const T * other_ptr, 
+                                      const Parms & other_parms) 
+  {
+    if (other_ptr == 0) {
+      if (ptr_ != 0) parms_.del(ptr_);
+      ptr_ = 0;
+    } else if (ptr_ == 0) {
+      ptr_ = parms_.clone(other_ptr);
+    } else {
+      parms_.assign(ptr_, other_ptr);
+    }
+    parms_ = other_parms;
+  }
+
+  template <typename T, typename Parms>
+  void GenericCopyPtr<T,Parms>::reset (T * other, const Parms & other_parms) 
+  {
+    if (ptr_ != 0) 
+      parms_.del(ptr_);
+    ptr_ = other;
+    parms_ = other_parms;
+  }
+
+  template <typename T, typename Parms>
+  GenericCopyPtr<T,Parms>::~GenericCopyPtr() 
+  {
+    if (ptr_ != 0)
+      parms_.del(ptr_);
+  }
+  
+}
+
+#endif
diff --git a/common/generic_copy_ptr.hpp b/common/generic_copy_ptr.hpp
new file mode 100644 (file)
index 0000000..40c8869
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef autil__generic_copy_ptr
+#define autil__generic_copy_ptr
+
+namespace acommon {
+
+  // Parms is expected to have the following members
+  //   T * Parms::clone(const T *);
+  //   void Parms::assign(T * &, const T *);
+  //   void Parms::del(T *);
+  // All members can assume that all pointers are not null
+
+  template <typename T, typename Parms> 
+  class GenericCopyPtr {
+
+    T *   ptr_;
+    Parms parms_;
+
+  public:
+
+    explicit GenericCopyPtr(T * p = 0, const Parms & parms = Parms()) 
+      : ptr_(p), parms_(parms) {}
+
+    GenericCopyPtr(const GenericCopyPtr & other);
+    GenericCopyPtr & operator= (const GenericCopyPtr & other) {
+      assign(other.ptr_, parms_);
+      return *this;
+    }
+
+    // assign makes a copy of other
+    void assign(const T * other, const Parms & parms = Parms());
+
+    // reset takes ownership of other
+    void reset(T * other = 0, const Parms & parms = Parms());
+
+    T & operator*  () const {return *ptr_;}
+    T * operator-> () const {return ptr_;}
+    T * get() const {return ptr_;}
+    operator T * () const {return ptr_;}
+    
+    T * release() {T * tmp = ptr_; ptr_ = 0; return tmp;}
+
+    const Parms & parms() {return parms_;}
+    const Parms & parms() const {return parms_;}
+
+    ~GenericCopyPtr();
+  };
+
+}
+
+#endif
+
diff --git a/common/getdata.cpp b/common/getdata.cpp
new file mode 100644 (file)
index 0000000..7e822c9
--- /dev/null
@@ -0,0 +1,193 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <string.h>
+
+#include "getdata.hpp"
+#include "string.hpp"
+#include "asc_ctype.hpp"
+
+#include "iostream.hpp"
+
+namespace acommon {
+  unsigned int linenumber = 0 ;
+
+  bool getdata_pair(IStream & in, DataPair & d, String & buf)
+  {
+    char * p;
+
+    // get first non blank line and count all read ones
+    do {
+      buf.clear();
+      buf.append('\0'); // to avoid some special cases
+      if (!in.append_line(buf)) return false;
+      d.line_num++;
+      p = buf.mstr() + 1;
+      while (*p == ' ' || *p == '\t') ++p;
+    } while (*p == '#' || *p == '\0');
+
+    // get key
+    d.key.str = p;
+    while (*p != '\0' &&
+           ((*p != ' ' && *p != '\t' && *p != '#') || *(p-1) == '\\')) ++p;
+    d.key.size = p - d.key.str;
+
+    // figure out if there is a value and add terminate key
+    d.value.str = p; // in case there is no value
+    d.value.size = 0;
+    if (*p == '#' || *p == '\0') {*p = '\0'; return true;}
+    *p = '\0';
+
+    // skip any whitespace
+    ++p;
+    while (*p == ' ' || *p == '\t') ++p;
+    if (*p == '\0' || *p == '#') {return true;}
+
+    // get value
+    d.value.str = p;
+    while (*p != '\0' && (*p != '#' || *(p-1) == '\\')) ++p;
+    
+    // remove trailing white space and terminate value
+    --p;
+    while (*p == ' ' || *p == '\t') --p;
+    if (*p == '\\' && *(p + 1) != '\0') ++p;
+    ++p;
+    d.value.size = p - d.value.str;
+    *p = '\0';
+
+    return true;
+  }
+
+  char * unescape(char * dest, const char * src)
+  {
+    while (*src) {
+      if (*src == '\\') {
+       ++src;
+       switch (*src) {
+       case 'n': *dest = '\n'; break;
+       case 'r': *dest = '\r'; break;
+       case 't': *dest = '\t'; break;
+       case 'f': *dest = '\f'; break;
+       case 'v': *dest = '\v'; break;
+       default: *dest = *src;
+       }
+      } else {
+       *dest = *src;
+      }
+      ++src;
+      ++dest;
+    }
+    *dest = '\0';
+    return dest;
+  }
+
+  bool escape(char * dest, const char * src, size_t limit, const char * others)
+  {
+    const char * begin = src;
+    const char * end = dest + limit;
+    if (asc_isspace(*src)) {
+      if (dest == end) return false;
+      *dest++ = '\\';
+      if (dest == end) return false;
+      *dest++ = *src++;
+    }
+    while (*src) {
+      if (dest == end) return false;
+      switch (*src) {
+      case '\n': *dest++ = '\\'; *dest = 'n'; break;
+      case '\r': *dest++ = '\\'; *dest = 'r'; break;
+      case '\t': *dest++ = '\\'; *dest = 't'; break;
+      case '\f': *dest++ = '\\'; *dest = 'f'; break;
+      case '\v': *dest++ = '\\'; *dest = 'v'; break;
+      case '\\': *dest++ = '\\'; *dest = '\\'; break;
+      case '#' : *dest++ = '\\'; *dest = '#'; break;
+      default:
+       if (others && strchr(others, *src)) *dest++ = '\\';
+       *dest = *src;
+      }
+      ++src;
+      ++dest;
+    }
+    if (src > begin + 1 && asc_isspace(src[-1])) {
+      --dest;
+      *dest++ = '\\';
+      if (dest == end) return false;
+      *dest++ = src[-1];
+    }
+    *dest = '\0';
+    return true;
+  }
+
+  void to_lower(char * str)
+  {
+    for (; *str; str++) *str = asc_tolower(*str);
+  }
+
+  void to_lower(String & res, const char * str)
+  {
+    for (; *str; str++) res += asc_tolower(*str);
+  }
+
+  bool split(DataPair & d)
+  {
+    char * p   = d.value;
+    char * end = p + d.value.size;
+    d.key.str = p;
+    while (p != end) {
+      ++p;
+      if ((*p == ' ' || *p == '\t') && *(p-1) != '\\') break;
+    }
+    d.key.size = p - d.key.str;
+    *p = 0;
+    if (p != end) {
+      ++p;
+      while (p != end && (*p == ' ' || *p == '\t')) ++p;
+    }
+    d.value.str = p;
+    d.value.size = end - p;
+    return d.key.size != 0;
+  }
+
+  void init(ParmString str, DataPair & d, String & buf)
+  {
+    const char * s = str;
+    while (*s == ' ' || *s == '\t') ++s;
+    size_t l = str.size() - (s - str);
+    buf.assign(s, l);
+    d.value.str  = buf.mstr();
+    d.value.size = l;
+  }
+
+  bool getline(IStream & in, DataPair & d, String & buf)
+  {
+    if (!in.getline(buf)) return false;
+    d.value.str  = buf.mstr();
+    d.value.size = buf.size();
+    return true;
+  }
+
+  char * get_nb_line(IStream & in, String & buf)
+  {
+    char * p;
+    // get first non blank line
+    do {
+      if (!in.getline(buf)) return 0;
+      p = buf.mstr();
+      while (*p == ' ' || *p == '\t') ++p;
+    } while (*p == '#' || *p == '\0');
+    return p;
+  }
+
+  void remove_comments(String & buf)
+  {
+    char * p = buf.mstr();
+    char * b = p;
+    while (*p && *p != '#') ++p;
+    if (*p == '#') {--p; while (p >= b && asc_isspace(*p)) --p; ++p;}
+    buf.resize(p - b);
+  }
+
+}
diff --git a/common/getdata.hpp b/common/getdata.hpp
new file mode 100644 (file)
index 0000000..74b57b5
--- /dev/null
@@ -0,0 +1,68 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_GET_DATA__HPP
+#define ASPELL_GET_DATA__HPP
+
+#include <stddef.h>
+#include <limits.h>
+#include "string.hpp"
+#include "mutable_string.hpp"
+
+namespace acommon {
+
+  class IStream;
+  class String;
+
+  // NOTE: getdata_pair WILL NOT unescape a string
+
+  struct DataPair {
+    MutableString key;
+    MutableString value;
+    size_t line_num;
+    DataPair() : line_num(0) {}
+  };
+
+  bool getdata_pair(IStream & in, DataPair & d, String & buf);
+
+  char * unescape(char * dest, const char * src);
+  static inline char * unescape(char * dest) {return unescape(dest, dest);}
+  static inline void unescape(MutableString & d) {
+    char * e = unescape(d.str, d.str);
+    d.size = e - d.str;
+  }
+  static inline void unescape(String & d) {
+    d.ensure_null_end();
+    char * e = unescape(d.data(), d.data());
+    d.resize(e - d.data());
+  }
+
+  // if limit is not given than dest should have enough space for 
+  // twice the number of characters of src
+  bool escape(char * dest, const char * src, 
+             size_t limit = INT_MAX, const char * others = 0);
+
+  void to_lower(char *);
+  void to_lower(String &, const char *);
+
+  // extract the first whitespace delimited word from d.value and put
+  // it in d.key.  d.value is expected not to have any leading
+  // whitespace. The string is modified in place so that d.key will be
+  // null terminated.  d.value is modified to point to any additional
+  // data after key with any leading white space removed.  Returns
+  // false when there are no more words to extract
+  bool split(DataPair & d);
+
+  // preps a string for split
+  void init(ParmString str, DataPair & d, String & buf);
+
+  bool getline(IStream & in, DataPair & d, String & buf);
+
+  char * get_nb_line(IStream & in, String & buf);
+  void remove_comments(String & buf);
+
+}
+#endif
diff --git a/common/gettext.h b/common/gettext.h
new file mode 100644 (file)
index 0000000..20dac05
--- /dev/null
@@ -0,0 +1,100 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+// NOTE: This file MUST be the last file included to avoid problems
+//       with system header files that might include libintl.h
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# undef  gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef  dgettext
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# undef  dcgettext
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# undef  ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# undef  dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# undef  dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# undef  textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef  bindtextdomain
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# undef  bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+/* short cut macros */
+
+/* I use dgettext so that the right domain will be looked at when
+   Aspell is used as a library */
+#define _(String) dgettext ("aspell", String)
+#define N_(String) gettext_noop (String)
+
+/* use gt_ when there is the possibility that str will be the empty
+   string.  gettext in this case is not guaranteed to return an
+   empty string */
+static inline const char * gt_(const char * str) {
+  return str[0] == '\0' ? str : _(str);
+}
+
+extern "C" void aspell_gettext_init();
+
+/* NOTE: DO NOT USE "gettext", ALWAYS USE "_" BECAUSE WHEN ASPELL IS USED
+   AS A LIBRARY THE DOMAIN IS NOT GUARANTEED TO BE ASPELL */
+
+#endif /* _LIBGETTEXT_H */
diff --git a/common/gettext_init.cpp b/common/gettext_init.cpp
new file mode 100644 (file)
index 0000000..02afb47
--- /dev/null
@@ -0,0 +1,28 @@
+
+#include "gettext.h"
+
+#if ENABLE_NLS
+
+#include "lock.hpp"
+
+static acommon::Mutex lock;
+
+static bool did_init = false;
+
+extern "C" void aspell_gettext_init()
+{
+  {
+    acommon::Lock l(&lock);
+    if (did_init) return;
+    did_init = true;
+  }
+  bindtextdomain("aspell", LOCALEDIR);
+}
+
+#else
+
+extern "C" void aspell_gettext_init()
+{
+}
+
+#endif
diff --git a/common/hash-t.hpp b/common/hash-t.hpp
new file mode 100644 (file)
index 0000000..2bcfeff
--- /dev/null
@@ -0,0 +1,234 @@
+// Copyright (c) 2001,2011
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation.  Silicon Graphics makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied warranty.
+
+// prime list taken from SGI STL with the following copyright
+
+/*
+ * Copyright (c) 1996-1998
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef autil__hash_t_hh
+#define autil__hash_t_hh
+
+#include <cstdlib>
+#include <new>
+
+#include "hash.hpp"
+#include "block_slist-t.hpp"
+
+namespace acommon {
+  
+  static const unsigned int primes[] =
+  {
+    53,         97,         193,       389,       769,
+    1543,       3079,       6151,      12289,     24593,
+    49157,      98317,      196613,    393241,    786433,
+    1572869,    3145739,    6291469,   12582917,  25165843,
+    50331653,   100663319,  201326611, 402653189, 805306457, 
+    static_cast<unsigned int>(-1)
+  };
+
+  template <class P>
+  typename HashTable<P>::PrimeIndex HashTable<P>::next_largest(Size s) 
+  {
+    PrimeIndex i = prime_index_;
+    while (assert(primes[i] != static_cast<PrimeIndex>(-1)), primes[i] < s) ++i;
+    return i;
+  }
+
+  template <class P>
+  void HashTable<P>::create_table(PrimeIndex i) {
+    prime_index_ = i;
+    table_size_ = primes[prime_index_];
+    table_ = reinterpret_cast<Node * *>(calloc(table_size_+1,sizeof(Node *)));
+    table_end_ = table_ + table_size_;
+    *table_end_ = reinterpret_cast<Node *>(table_end_);
+  }
+
+  template <class P>
+  void HashTable<P>::init(PrimeIndex i)
+  {
+    size_ = 0;
+    create_table(i);
+    node_pool_.add_block(primes[i]);
+  }
+
+  template <class P>
+  std::pair<typename HashTable<P>::iterator,bool> HashTable<P>::insert(const Value & to_insert)
+  {
+    bool have;
+    iterator put_me_here = find_i(parms_.key(to_insert), have);
+    if (have && !parms_.is_multi) 
+      return std::pair<iterator,bool>(put_me_here,false);
+    Node * new_node = node_pool_.new_node();
+    if (new_node == 0) {
+      resize_i(prime_index_+1);
+      return insert(to_insert);
+    }
+    new 
+      (const_cast<void *>(reinterpret_cast<const void *>(&new_node->data))) 
+      Value(to_insert);
+    new_node->next = *put_me_here.n;
+    *put_me_here.n = new_node;
+    ++size_;
+    return std::pair<iterator,bool>(put_me_here,true);
+  }
+  
+  template <class P>
+  void HashTable<P>::erase(iterator to_erase) 
+  {
+    (*to_erase.n)->data.~Value();
+    Node * tmp = *to_erase.n;
+    *to_erase.n = (*to_erase.n)->next;
+    node_pool_.remove_node(tmp);
+    --size_;
+  }
+
+  template <class P>
+  typename HashTable<P>::Size HashTable<P>::erase(const Key & k)
+  {
+    Size num_erased = 0;
+    bool irrelevant;
+    Node * * first = find_i(k,irrelevant).n;
+    Node * n = *first;
+    while (n != 0 && parms_.equal(parms_.key(n->data), k)) {
+      Node * tmp = n;
+      n->data.~Value();
+      n = n->next;
+      node_pool_.remove_node(tmp);
+      ++num_erased;
+    }
+    *first = n;
+    size_ -= num_erased;
+    return num_erased;
+  }
+  
+  template <class P>
+  typename HashTable<P>::iterator HashTable<P>::find_i(const Key & to_find, bool & have)
+  {
+    Size pos = parms_.hash(to_find) % table_size_;
+    Node * * n = table_ + pos;
+    have = false;
+    while (true) {
+      if (*n == 0) {
+       break;
+      } else if (parms_.equal(parms_.key((*n)->data),to_find)) {
+       have = true;
+       break;
+      }
+      n = &(*n)->next;
+    }
+    return iterator(table_ + pos, n);
+  }
+
+  template <class P>
+  std::pair<typename HashTable<P>::iterator, typename HashTable<P>::iterator>
+  HashTable<P>::equal_range_i(const Key & to_find, int & c)
+  {
+    c = 0;
+    bool have;
+    iterator first = find_i(to_find,have);
+    if (!have)
+      return std::pair<iterator,iterator>(end(),end());
+    iterator last = first;
+    c = 1;
+    ++last;
+    iterator e = end();
+    while (!(last == e) && parms_.equal(parms_.key(*last), to_find)) {
+      ++c;
+      ++last;
+    }
+    return std::pair<iterator,iterator>(first,last);
+  }
+
+  template <class P>
+  void HashTable<P>::del() 
+  {
+    for (Node * * i = table_; i != table_end_; ++i) {
+      Node * n = *i;
+      while (n != 0) {
+       n->data.~Value();
+       n = n->next;
+      }
+    }
+    free (table_);
+    size_ = 0;
+    node_pool_.clear();
+    table_ = 0;
+    table_size_ = 0;
+    prime_index_ = 0;
+  }
+
+  template <class P>
+  void HashTable<P>::resize_i(PrimeIndex new_prime_index) 
+  {
+    Node * * old_table = table_;
+    Node * * old_end = table_end_;
+    Size old_size = table_size_;
+    create_table(new_prime_index);
+    for (Node * * i = old_table; i != old_end; ++i) {
+      Node * n = *i;
+      while (n != 0) {
+       Node * * put_me_here = table_ + (parms_.hash(parms_.key(n->data)) % table_size_);
+       Node * tmp = n;
+       n = n->next;
+       tmp->next = *put_me_here;
+       *put_me_here = tmp;
+      }
+    }
+    free(old_table);
+    node_pool_.add_block(table_size_ - old_size);
+  }
+
+  template <class P>
+  void HashTable<P>::copy(const HashTable & other) 
+  {
+    init(other.prime_index_);
+    size_  = other.size_;
+    parms_ = other.parms_;
+    for (unsigned int i = 0; i != other.table_size_; ++i) {
+      for (Node * j = other.table_[i]; j != 0; j = j->next) {
+       Node * n = node_pool_.new_node();
+       new 
+         (const_cast<void *>(reinterpret_cast<const void *>(&n->data))) 
+         Value(j->data);
+       n->next = table_[i];
+       table_[i] = n;
+      }
+    }
+  }
+
+}
+
+
+#endif
diff --git a/common/hash.hpp b/common/hash.hpp
new file mode 100644 (file)
index 0000000..949aa42
--- /dev/null
@@ -0,0 +1,337 @@
+// Copyright (c) 2001,2011
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation.  No representations about the
+// suitability of this software for any purpose.  It is provided "as
+// is" without express or implied warranty.
+
+#ifndef autil__hash_hh
+#define autil__hash_hh
+
+#include <utility>
+#include <functional>
+
+#include "settings.h"
+
+#include "hash_fun.hpp"
+#include "block_slist.hpp"
+
+// This file provided implementation for hash_set, hash_multiset, hash_map
+//   and hash_multimap which are very similar to SGI STL's implementation
+//   with a few notable exceptions.  The main one is that while 
+//   const_iterator is never invalided until the actual element is removed
+//   iterator is invalided my most all non-const member functions.  This
+//   is to simply the implementation slightly and allow the removal 
+//   of an element in guaranteed constant time when a non-const iterator
+//   is provided rather that normally constant time.
+
+// All of the hash_* implementations are derived from the HashTable class
+
+namespace acommon {
+
+  // Parms is expected to have the following methods
+  //   typename Value
+  //   typename Key
+  //   bool is_multi;
+  //   Size hash(Key)
+  //   bool equal(Key, Key)
+  //   Key key(Value)
+
+  template <class Value>
+  class HT_ConstIterator;
+
+  template <class Value>
+  class HT_Iterator {
+  public: // but don't use
+    typedef typename BlockSList<Value>::Node Node;
+    Node * * t;
+    Node * * n;
+    void adv() {while (*t == 0) ++t; n = t;}
+    void inc() {n = &(*n)->next; if (*n == 0) {++t; adv();}}
+    HT_Iterator(Node * * t0) : t(t0) {adv();}
+    HT_Iterator(Node * * t0, Node * * n0) : t(t0), n(n0) {}
+  public:
+    HT_Iterator() : t(0), n(0) {}
+    explicit HT_Iterator(const HT_ConstIterator<Value> & other);
+    Value & operator*() const {return (*n)->data;}
+    Value * operator->() const {return &(*n)->data;}
+    HT_Iterator & operator++() {inc(); return *this;}
+    HT_Iterator operator++(int) {HT_Iterator tmp(*this); inc(); return tmp;}
+  };
+
+  template <class Value>
+  class HT_ConstIterator
+  {
+  public: // but don't use
+    typedef typename BlockSList<Value>::Node Node;
+    Node * * t;
+    Node * n;
+    void adv() {while (*t == 0) ++t; n = *t;}
+    void inc() {n = n->next; if (n == 0) {++t; adv();}}
+    HT_ConstIterator(Node * * t0) : t(t0) {adv();}
+    HT_ConstIterator(Node * * t0, Node * n0) : t(t0), n(n0) {}
+  public:
+    HT_ConstIterator() : t(0), n(0) {}
+    HT_ConstIterator(const HT_Iterator<Value> & other) : t(other.t), n(*other.n) {}
+    Value & operator*() const {return n->data;}
+    Value * operator->() const {return &n->data;}
+    HT_ConstIterator & operator++() {inc(); return *this;}
+    HT_ConstIterator operator++(int) {HT_ConstIterator tmp(*this); inc(); return tmp;}
+  };
+  
+  template <typename P>
+  class HashTable 
+  {
+  public:
+    typedef P                     parms_type;
+    typedef parms_type            Parms;
+
+    typedef typename Parms::Value value_type;
+    typedef value_type            Value;
+
+    typedef typename Parms::Key  key_type;
+    typedef key_type              Key;
+
+    typedef unsigned int          size_type;
+    typedef size_type             Size;
+
+  public: // but don't use
+    typedef BlockSList<Value>       NodePool;
+    typedef typename NodePool::Node Node;
+
+  private:
+    typedef unsigned int      PrimeIndex;
+
+    Size              size_;
+    Node * *          table_;     // always one larger than table_size_;
+    Node * *          table_end_; // always at true table_end - 1
+    Size              table_size_;
+    PrimeIndex        prime_index_;
+    NodePool          node_pool_;
+    Parms             parms_;
+
+  public:
+
+    typedef HT_Iterator<Value>      iterator;
+    typedef HT_ConstIterator<Value> const_iterator;
+
+  private:
+    void del();
+    void init(PrimeIndex);
+    void copy(const HashTable & other);
+    PrimeIndex next_largest(Size);
+    void resize_i(PrimeIndex);
+    void create_table(PrimeIndex);
+    iterator find_i(const Key &, bool & have);
+    std::pair<iterator, iterator> equal_range_i(const Key & to_find, int & c);
+    
+  public:
+    
+    HashTable() {init(0);}
+    HashTable(const Parms & p) : parms_(p) {init(0);}
+    HashTable(int size) : prime_index_(0) {init(next_largest(size));}
+    HashTable(int size, const Parms & p) 
+      : prime_index_(0), parms_(p) {init(next_largest(size));}
+
+    HashTable(const HashTable & other) {copy(other);}
+    HashTable& operator=(const HashTable & other) {del(); copy(other); return *this;}
+    ~HashTable() {del();}
+    iterator begin() {return iterator(table_);}
+    iterator end()   {return iterator(table_end_, table_end_);}
+    const_iterator begin() const {return const_iterator(table_);}
+    const_iterator end()   const {return const_iterator(table_end_,*table_end_);}
+    size_type size() const  {return size_;}
+    bool      empty() const {return size_ + 1;}
+    std::pair<iterator,bool> insert(const value_type &); 
+    void erase(iterator);
+    size_type erase(const key_type &);
+    void clear() {del(), init(0);}
+    iterator find(const key_type & to_find) {
+      bool h; 
+      iterator i = find_i(to_find,h);
+      return h ? i : end();
+    }
+    bool have(const key_type & to_find) const {
+      bool h; 
+      const_cast<HashTable *>(this)->find_i(to_find,h);
+      return h;
+    }
+    const_iterator find(const key_type & to_find) const {
+      return const_cast<HashTable *>(this)->find(to_find);
+    }
+
+    std::pair<iterator,iterator> equal_range(const key_type & to_find) 
+    {
+      int irrelevant;
+      return equal_range_i(to_find, irrelevant);
+    }
+
+    std::pair<const_iterator,const_iterator> 
+    equal_range(const key_type & to_find) const
+    {
+      int irrelevant;
+      std::pair<iterator,iterator> range 
+       = const_cast<HashTable *>(this)->equal_range_i(to_find, irrelevant);
+      return std::pair<const_iterator,const_iterator>
+       (range.first,range.second);
+    }
+        
+    void resize(Size s) {resize_i(next_largest(s));}
+
+    //other niceties: swap, copy, equal
+
+  };
+
+  template <class V>
+  inline HT_Iterator<V>::HT_Iterator(const HT_ConstIterator<V> & other)
+    : t(other.t), n(other.t)
+  {
+    while (*n != other.n) n = &(*n)->next;
+  }
+  
+  template <class V>
+  inline bool operator== (HT_Iterator<V> rhs,
+                         HT_Iterator<V> lhs) 
+  {
+    return rhs.n == lhs.n;
+  }
+
+  template <class V>
+  inline bool operator== (HT_ConstIterator<V> rhs,
+                         HT_Iterator<V> lhs) 
+  {
+    return rhs.n == *lhs.n;
+  }
+
+  template <class V>
+  inline bool operator== (HT_Iterator<V> rhs,
+                         HT_ConstIterator<V> lhs) 
+  {
+    return *rhs.n == lhs.n;
+  }
+
+  template <class V>
+  inline bool operator== (HT_ConstIterator<V> rhs, 
+                         HT_ConstIterator<V> lhs) 
+  {
+    return rhs.n == lhs.n;
+  }
+
+#ifndef REL_OPS_POLLUTION
+
+  template <class V>
+  inline bool operator!= (HT_Iterator<V> rhs,
+                         HT_Iterator<V> lhs) 
+  {
+    return rhs.n != lhs.n;
+  }
+
+  template <class V>
+  inline bool operator!= (HT_ConstIterator<V> rhs,
+                         HT_Iterator<V> lhs) 
+  {
+    return rhs.n != *lhs.n;
+  }
+
+  template <class V>
+  inline bool operator!= (HT_Iterator<V> rhs,
+                         HT_ConstIterator<V> lhs) 
+  {
+    return *rhs.n != lhs.n;
+  }
+
+  template <class V>
+  inline bool operator!= (HT_ConstIterator<V> rhs, 
+                         HT_ConstIterator<V> lhs) 
+  {
+    return rhs.n != lhs.n;
+  }
+
+#endif
+
+  template <typename K, typename HF, typename E, bool m>
+  struct HashSetParms 
+  {
+    typedef K Value;
+    typedef const K Key;
+    static const bool is_multi = m;
+    HF hash;
+    E  equal;
+    const K & key(const K & v) {return v;}
+    HashSetParms(const HF & h = HF(), const E & e = E()) : hash(h), equal(e) {}
+  };
+
+  template <typename K, typename HF = hash<K>, typename E = std::equal_to<K> >
+  class hash_set : public HashTable<HashSetParms<K,HF,E,false> >
+  {
+  public:
+    typedef HashTable<HashSetParms<K,HF,E,false> > Base;
+    typedef typename Base::size_type               size_type;
+    typedef typename Base::Parms                   Parms;
+    hash_set(size_type s = 0, const HF & h = HF(), const E & e = E()) 
+      : Base(s, Parms(h,e)) {}
+  };
+
+  template <typename K, typename HF = hash<K>, typename E = std::equal_to<K> >
+  class hash_multiset : public HashTable<HashSetParms<K,HF,E,true> >
+  {
+  public:
+    typedef HashTable<HashSetParms<K,HF,E,true> > Base;
+    typedef typename Base::size_type              size_type;
+    typedef typename Base::Parms                  Parms;
+    hash_multiset(size_type s = 0, const HF & h = HF(), const E & e = E()) 
+      : Base(s, Parms(h,e)) {}
+  };
+
+  template <typename K, typename V, typename HF, typename E, bool m>
+  struct HashMapParms 
+  {
+    typedef std::pair<const K,V> Value;
+    typedef const K         Key;
+    static const bool is_multi = m;
+    HF hash;
+    E  equal;
+    const K & key(const Value & v) {return v.first;}
+    HashMapParms() {}
+    HashMapParms(const HF & h) : hash(h) {}
+    HashMapParms(const HF & h, const E & e) : hash(h), equal(e) {}
+  };
+
+  template <typename K, typename V, typename HF = hash<K>, typename E = std::equal_to<K> >
+  class hash_map : public HashTable<HashMapParms<K,V,HF,E,false> >
+  {
+  public:
+    typedef V         data_type;
+    typedef data_type Data;
+    
+    typedef HashTable<HashMapParms<K,V,HF,E,false> > Base;
+    typedef typename Base::size_type                 size_type;
+    typedef typename Base::key_type                  key_type;
+    typedef typename Base::value_type                value_type;
+    typedef typename Base::Parms                     Parms;
+
+    hash_map(size_type s = 0, const HF & h = HF(), const E & e = E()) 
+      : Base(s, Parms(h,e)) {}
+    data_type & operator[](const key_type & k) 
+    {
+      return (*((this->insert(value_type(k, data_type()))).first)).second;
+    }
+  };
+
+  template <typename K, typename V, typename HF = hash<K>, typename E = std::equal_to<K> >
+  class hash_multimap : public HashTable<HashMapParms<K,V,HF,E,true> >
+  {
+  public:
+    typedef HashTable<HashMapParms<K,V,HF,E,true> > Base;
+    typedef typename Base::size_type                size_type;
+    typedef typename Base::Parms                    Parms;
+    hash_multimap(size_type s = 0, const HF & h = HF(), const E & e = E()) 
+      : Base(s, Parms(h,e)) {}
+  };
+}
+
+#endif
diff --git a/common/hash_fun.hpp b/common/hash_fun.hpp
new file mode 100644 (file)
index 0000000..1c4b247
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright (c) 2001
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef acommon_hash_fun__hpp
+#define acommon_hash_fun__hpp
+
+namespace acommon {
+  
+  template <typename K> struct hash {};
+
+  template <> struct hash<char>  {unsigned long operator()(char  v) const {return v;}};
+  template <> struct hash<short> {unsigned long operator()(short v) const {return v;}};
+  template <> struct hash<int>   {unsigned long operator()(int   v) const {return v;}};
+  template <> struct hash<long>  {unsigned long operator()(long  v) const {return v;}};
+  template <> struct hash<unsigned char>  {unsigned long operator()(unsigned char  v) const {return v;}};
+  template <> struct hash<unsigned short> {unsigned long operator()(unsigned short v) const {return v;}};
+  template <> struct hash<unsigned int>   {unsigned long operator()(unsigned int   v) const {return v;}};
+  template <> struct hash<unsigned long>  {unsigned long operator()(unsigned long  v) const {return v;}};
+
+  template <> struct hash<const char *> {
+    inline unsigned long operator() (const char * s) const {
+      unsigned long h = 0;
+      for (; *s; ++s)
+       h=5*h + *s;
+      return h;
+    }
+  };
+
+  template<class Str>
+  struct HashString {
+    inline unsigned long operator() (const Str &str) const {
+      unsigned long h = 0;
+      typename Str::const_iterator end = str.end();
+      for (typename Str::const_iterator s = str.begin(); 
+          s != end; 
+          ++s)
+       h=5*h + *s;
+      return h;
+    }
+  };
+  
+}
+
+#endif
diff --git a/common/indiv_filter.hpp b/common/indiv_filter.hpp
new file mode 100644 (file)
index 0000000..2898c2e
--- /dev/null
@@ -0,0 +1,100 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ACOMMON_FILTER__HPP
+#define ACOMMON_FILTER__HPP
+
+#include <assert.h>
+
+#include "string.hpp"
+#include "posib_err.hpp"
+#include "filter_char.hpp"
+
+namespace acommon {
+
+  class Config;
+
+  class FilterHandle {
+  public:
+    FilterHandle() : handle(0) {}
+    ~FilterHandle();
+    void * release() {
+      void * tmp = handle;
+      handle = NULL;
+      return tmp;
+    }
+    operator bool() {return handle != NULL;}
+    void * get() {return handle;}
+
+    // The direct interface usually when new_filter ... functions are coded
+    // manually
+    FilterHandle & operator= (void * h) {
+      assert(handle == NULL);
+      handle = h; 
+      return *this;
+    }
+  private:
+    FilterHandle(const FilterHandle &);
+    void operator = (const FilterHandle &);
+    void * handle;
+  };  
+
+  class IndividualFilter {
+  public:
+
+    // sets up the filter 
+    //
+    // any options effecting this filter should start with the filter
+    // name followed by a dash
+    // should return true if the filter should be used false otherwise
+    // (in which case it will be deleted)
+    virtual PosibErr<bool> setup(Config *) = 0;
+
+    // reset the internal state of the filter
+    //
+    // should be called whenever a new document is being filtered
+    virtual void reset() = 0;
+
+    // process the string
+    //
+    // The filter may either modify the string passed in or use its
+    // own buffer for the output.  If the string uses its own buffer
+    //  start and stop should be set to the beginning and one past the
+    // end of its buffer respectfully.
+    //
+    // The string passed in should only be split on white space
+    // characters.  Furthermore, between calls to reset, each string
+    // should be passed in exactly once and in the order they appeared
+    // in the document.  Passing in stings out of order, skipping
+    // strings or passing them in more than once may lead to undefined
+    // results.
+    //
+    // The following properties are guaranteed to be true and must
+    // stay true:
+    //   *stop  == '\0';
+    //   strlen == stop - start;
+    // this way it is always safe to look one character ahead.
+    //
+    virtual void process(FilterChar * & start, FilterChar * & stop) = 0;
+
+    virtual ~IndividualFilter() {}
+
+    const char * name() const {return name_.str();}
+    double order_num() const {return order_num_;}
+
+    FilterHandle handle;
+
+  protected:
+
+    IndividualFilter() : name_(0), order_num_(0.50) {}
+    
+    String name_; // must consist of 'a-z|0-9'
+    double order_num_; // between 0 and 1 exclusive
+  };
+
+}
+
+#endif
diff --git a/common/info.cpp b/common/info.cpp
new file mode 100644 (file)
index 0000000..8291cc7
--- /dev/null
@@ -0,0 +1,781 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <dirent.h>
+
+// POSIX includes
+#ifdef __bsdi__
+ /* BSDi defines u_intXX_t types in machine/types.h */
+#include <machine/types.h>
+#endif
+#ifdef WIN32
+#  include <windows.h>
+#  include <winbase.h>
+#endif
+
+#include "iostream.hpp"
+
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "errors.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "info.hpp"
+#include "itemize.hpp"
+#include "string.hpp"
+#include "string_list.hpp"
+#include "vector.hpp"
+#include "stack_ptr.hpp"
+#include "strtonum.hpp"
+#include "lock.hpp"
+#include "string_map.hpp"
+
+#include "gettext.h"
+
+namespace acommon {
+
+  class Dir {
+    DIR * d_;
+    Dir(const Dir &);
+    Dir & operator=(const Dir &);
+  public:
+    operator DIR * () {return d_;}
+    Dir(DIR * d) : d_(d) {}
+    ~Dir() {if (d_) closedir(d_);}
+  };
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // Lists of Info Lists
+  //
+
+  static void get_data_dirs (Config *,
+                            StringList &);
+
+  struct DictExt
+  {
+    static const size_t max_ext_size = 15;
+    const ModuleInfo * module;
+    size_t ext_size;
+    char ext[max_ext_size + 1];
+    DictExt(ModuleInfo * m, const char * e);
+  };
+
+  typedef Vector<DictExt> DictExtList;
+
+  struct MDInfoListAll
+  // this is in an invalid state if some of the lists
+  // has data but others don't
+  {
+    StringList key;
+    StringList for_dirs;
+    ModuleInfoList module_info_list;
+    StringList dict_dirs;
+    DictExtList    dict_exts;
+    DictInfoList   dict_info_list;
+    StringMap      dict_aliases;
+    void clear();
+    PosibErr<void> fill(Config *, StringList &);
+    bool has_data() const {return module_info_list.head_ != 0;}
+    void fill_helper_lists(const StringList &);
+    PosibErr<void> fill_dict_aliases(Config *);
+  };
+
+  class MDInfoListofLists
+  {
+    Mutex lock;
+
+    MDInfoListAll * data;
+  
+    int       offset;
+    int       size;
+  
+    int valid_pos(int pos) {return offset <= pos && pos < size + offset;}
+
+    void clear(Config * c);
+    int find(const StringList &);
+
+  public:
+
+    MDInfoListofLists();
+    ~MDInfoListofLists();
+
+    PosibErr<const MDInfoListAll *> get_lists(Config * c);
+
+    void flush() {} // unimplemented
+  };
+
+  static MDInfoListofLists md_info_list_of_lists;
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // Utility functions declaration
+  //
+
+  static const char * strnchr(const char * i, char c, unsigned int size);
+  static const char * strnrchr(const char * stop, char c, unsigned int size);
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // Built in modules
+  //
+
+  struct ModuleInfoDefItem {
+    const char * name;
+    const char * data;
+  };
+
+  static const ModuleInfoDefItem module_info_list_def_list[] = {
+    {"default", 
+     "order-num 0.50;" 
+     "dict-exts .multi,.alias"}
+  };
+  
+  /////////////////////////////////////////////////////////////////
+  //
+  // ModuleInfoList Impl
+  //
+
+  struct ModuleInfoNode
+  {
+    ModuleInfo c_struct;
+    ModuleInfoNode * next;
+    ModuleInfoNode(ModuleInfoNode * n = 0) : next(n) {}
+    String name;
+    String lib_dir;
+    StringList dict_exts;
+    StringList dict_dirs;
+  };
+
+  void ModuleInfoList::clear() 
+  {
+    while (head_ != 0) {
+      ModuleInfoNode * to_del = head_;
+      head_ = head_->next;
+      delete to_del;
+    }
+  }
+
+  PosibErr<void> ModuleInfoList::fill(MDInfoListAll & list_all,
+                                     Config * config)
+  {
+    const ModuleInfoDefItem * i   = module_info_list_def_list;
+    const ModuleInfoDefItem * end = module_info_list_def_list
+      + sizeof(module_info_list_def_list)/sizeof(ModuleInfoDefItem);
+    for (; i != end; ++i)
+    {
+      StringIStream in(i->data);
+      proc_info(list_all, config, i->name, strlen(i->name), in);
+    }
+
+    StringListEnumeration els = list_all.for_dirs.elements_obj();
+    const char * dir;
+    while ( (dir = els.next()) != 0) {
+      Dir d(opendir(dir));
+      if (d==0) continue;
+    
+      struct dirent * entry;
+      while ( (entry = readdir(d)) != 0) {
+       const char * name = entry->d_name;
+       const char * dot_loc = strrchr(name, '.');
+       unsigned int name_size = dot_loc == 0 ? strlen(name) :  dot_loc - name;
+      
+       // check if it ends in suffix
+       if (strcmp(name + name_size, ".asmi") != 0)
+         continue;
+      
+       String path;
+       path += dir;
+       path += '/';
+       path += name;
+       FStream in;
+       RET_ON_ERR(in.open(path, "r"));
+       RET_ON_ERR(proc_info(list_all, config, name, name_size, in));
+      }
+    }
+    return no_err;
+  }
+
+  PosibErr<void> ModuleInfoList::proc_info(MDInfoListAll &,
+                                          Config * config,
+                                          const char * name,
+                                          unsigned int name_size,
+                                          IStream & in)
+  {
+    ModuleInfoNode * * prev = &head_;
+    ModuleInfoNode * to_add = new ModuleInfoNode();
+    to_add->c_struct.name = 0;
+    to_add->c_struct.order_num = -1;
+    to_add->c_struct.lib_dir = 0;
+    to_add->c_struct.dict_dirs = 0;
+
+    to_add->name.assign(name, name_size);
+    to_add->c_struct.name = to_add->name.c_str();
+    
+    PosibErr<void> err;
+
+    String buf; DataPair d;
+    while (getdata_pair(in, d, buf)) {
+      if (d.key == "order-num") {
+       to_add->c_struct.order_num = strtod_c(d.value.str, NULL);
+       if (!(0 < to_add->c_struct.order_num && 
+             to_add->c_struct.order_num < 1)) 
+         {
+           err.prim_err(bad_value, d.key, d.value,
+                        _("a number between 0 and 1"));
+           goto RETURN_ERROR;
+         }
+      } else if (d.key == "lib-dir") {
+       to_add->lib_dir = d.value.str;
+       to_add->c_struct.lib_dir = to_add->lib_dir.c_str();
+      } else if (d.key == "dict-dir" || d.key == "dict-dirs") {
+       to_add->c_struct.dict_dirs = &(to_add->dict_dirs);
+       itemize(d.value, to_add->dict_dirs);
+      } else if (d.key == "dict-exts") {
+       to_add->c_struct.dict_dirs = &(to_add->dict_exts);
+       itemize(d.value, to_add->dict_exts);
+      } else {
+       err.prim_err(unknown_key, d.key);
+       goto RETURN_ERROR;
+      }
+    }
+  
+    while (*prev != 0 && 
+          (*prev)->c_struct.order_num < to_add->c_struct.order_num)
+      prev = &(*prev)->next;
+    to_add->next = *prev;
+    *prev = to_add;
+    return err;
+
+  RETURN_ERROR:
+    delete to_add;
+    return err;
+  }
+
+  ModuleInfoNode * ModuleInfoList::find(const char * to_find, 
+                                       unsigned int to_find_len)
+  {
+    for (ModuleInfoNode * n = head_; 
+        n != 0; 
+        n = n->next)
+    {
+      if (n->name.size() == to_find_len 
+         && strncmp(n->name.c_str(), to_find, to_find_len) == 0) return n;
+    }
+    return 0;
+  }
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // DictInfoList Impl
+  //
+
+  struct DictInfoNode
+  {
+    DictInfo c_struct;
+    DictInfoNode * next;
+    DictInfoNode(DictInfoNode * n = 0) : next(n) {}
+    String name;
+    String code;
+    String variety;
+    String size_str;
+    String info_file;
+    bool direct;
+  };
+
+  bool operator< (const DictInfoNode & r, const DictInfoNode & l);
+
+  void DictInfoList::clear() 
+  {
+    while (head_ != 0) {
+      DictInfoNode * to_del = head_;
+      head_ = head_->next;
+      delete to_del;
+    }
+  }
+
+  const DictExt * find_dict_ext(const DictExtList & l, ParmStr name)
+  {
+    DictExtList::const_iterator   i = l.begin();
+    DictExtList::const_iterator end = l.end();
+    for (; i != end; ++i) 
+    {
+      if (i->ext_size <= name.size() 
+          && strncmp(name + (name.size() - i->ext_size),
+                     i->ext, i->ext_size) == 0)
+        break;
+    }
+    
+    if (i == end) // does not end in one of the extensions in list
+      return 0;
+    else
+      return &*i;
+  }
+
+
+  PosibErr<void> DictInfoList::fill(MDInfoListAll & list_all,
+                                   Config * config)
+  {
+    StringList aliases;
+    config->retrieve_list("dict-alias", &aliases);
+    StringListEnumeration els = aliases.elements_obj();
+    const char * str;
+    while ( (str = els.next()) != 0) {
+      const char * end = strchr(str, ' ');
+      assert(end != 0); // FIXME: Return error
+      String name(str, end - str);
+      RET_ON_ERR(proc_file(list_all, config,
+                           0, name.str(), name.size(), 
+                           find_dict_ext(list_all.dict_exts, ".alias")->module));
+    }
+
+    els = list_all.dict_dirs.elements_obj();
+    const char * dir;
+    while ( (dir = els.next()) != 0) {
+      Dir d(opendir(dir));
+      if (d==0) continue;
+    
+      struct dirent * entry;
+      while ( (entry = readdir(d)) != 0) {
+       const char * name = entry->d_name;
+       unsigned int name_size = strlen(name);
+
+       const DictExt * i = find_dict_ext(list_all.dict_exts, 
+                                          ParmString(name, name_size));
+       if (i == 0) // does not end in one of the extensions in list
+         continue;
+
+       name_size -= i->ext_size;
+      
+       RET_ON_ERR(proc_file(list_all, config, 
+                            dir, name, name_size, i->module));
+      }
+    }
+    return no_err;
+  }
+
+  PosibErr<void> DictInfoList::proc_file(MDInfoListAll & list_all,
+                                        Config * config,
+                                        const char * dir,
+                                        const char * name,
+                                        unsigned int name_size,
+                                        const ModuleInfo * module)
+  {
+    DictInfoNode * * prev = &head_;
+    StackPtr<DictInfoNode> to_add(new DictInfoNode());
+    const char * p0;
+    const char * p1;
+    const char * p2;
+    p0 = strnchr(name, '-', name_size);
+    if (!module)
+      p2 = strnrchr(name, '-', name_size);
+    else
+      p2 = name + name_size;
+    if (p0 == 0)
+      p0 = p2;
+    p1 = p2;
+    if (p0 + 2 < p1 && asc_isdigit(p1[-1]) && asc_isdigit(p1[-2]) && p1[-3] == '-')
+      p1 -= 2;
+
+    to_add->name.assign(name, p2-name);
+    to_add->c_struct.name = to_add->name.c_str();
+  
+    to_add->code.assign(name, p0-name);
+    to_add->c_struct.code = to_add->code.c_str();
+
+    // check if the code is in a valid form and normalize entry.  
+    // If its not in a valid form than ignore this entry
+
+    if (to_add->code.size() >= 2 
+       && asc_isalpha(to_add->code[0]) && asc_isalpha(to_add->code[1])) 
+    {
+      unsigned s = strcspn(to_add->code.str(), "_");
+      if (s > 3) return no_err;
+      unsigned i = 0;
+      for (; i != s; ++i)
+        to_add->name[i] = to_add->code[i] = asc_tolower(to_add->code[i]);
+      i++;
+      for (; i < to_add->code.size(); ++i)
+        to_add->name[i] = to_add->code[i] = asc_toupper(to_add->code[i]);
+    } else {
+      return no_err;
+    }
+    
+    // Need to do it here as module is about to get a value
+    // if it is null
+    to_add->direct = module == 0 ? false : true;
+
+    if (!module) {
+      assert(p2 != 0); //FIXME: return error
+      ModuleInfoNode * mod 
+       = list_all.module_info_list.find(p2+1, name_size - (p2+1-name));
+      //FIXME: Check for null and return an error on an unknown module
+      module = &(mod->c_struct);
+    }
+    to_add->c_struct.module = module;
+  
+    if (p0 + 1 < p1)
+      to_add->variety.assign(p0+1, p1 - p0 - 1);
+    to_add->c_struct.variety = to_add->variety.c_str();
+  
+    if (p1 != p2) 
+      to_add->size_str.assign(p1, 2);
+    else
+      to_add->size_str = "60";
+    to_add->c_struct.size_str = to_add->size_str.c_str();
+    to_add->c_struct.size = atoi(to_add->c_struct.size_str);
+
+    if (dir) {
+      to_add->info_file  = dir;
+      to_add->info_file += '/';
+    }
+    to_add->info_file += name;
+  
+    while (*prev != 0 && *(DictInfoNode *)*prev < *to_add)
+      prev = &(*prev)->next;
+    to_add->next = *prev;
+    *prev = to_add.release();
+
+    return no_err;
+  }
+
+  bool operator< (const DictInfoNode & r, const DictInfoNode & l)
+  {
+    const DictInfo & rhs = r.c_struct;
+    const DictInfo & lhs = l.c_struct;
+    int res = strcmp(rhs.code, lhs.code);
+    if (res < 0) return true;
+    if (res > 0) return false;
+    res = strcmp(rhs.variety,lhs.variety);
+    if (res < 0) return true;
+    if (res > 0) return false;
+    if (rhs.size < lhs.size) return true;
+    if (rhs.size > lhs.size) return false;
+    res = strcmp(rhs.module->name,lhs.module->name);
+    if (res < 0) return true;
+    return false;
+  }
+
+  PosibErr<void> get_dict_file_name(const DictInfo * mi, 
+                                   String & main_wl, String & flags)
+  {
+    const DictInfoNode * node = reinterpret_cast<const DictInfoNode *>(mi);
+    if (node->direct) {
+      main_wl = node->info_file;
+      flags   = "";
+      return no_err;
+    } else {
+      FStream f;
+      RET_ON_ERR(f.open(node->info_file, "r"));
+      String buf; DataPair dp;
+      bool res = getdata_pair(f, dp, buf);
+      main_wl = dp.key; flags = dp.value;
+      f.close();
+      if (!res)
+       return make_err(bad_file_format,  node->info_file, "");
+      return no_err;
+    }
+  }
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // Lists of Info Lists Impl
+  //
+
+  void get_data_dirs (Config * config,
+                     StringList & lst)
+  {
+    lst.clear();
+    lst.add(config->retrieve("data-dir"));
+    lst.add(config->retrieve("dict-dir"));
+  }
+
+  DictExt::DictExt(ModuleInfo * m, const char * e)
+  {
+    module = m;
+    ext_size = strlen(e);
+    assert(ext_size <= max_ext_size);
+    memcpy(ext, e, ext_size + 1);
+  }
+
+  void MDInfoListAll::clear()
+  {
+    module_info_list.clear();
+    dict_dirs.clear();
+    dict_exts.clear();
+    dict_info_list.clear();
+  }
+
+  PosibErr<void> MDInfoListAll::fill(Config * c, 
+                                     StringList & dirs)
+  {
+    PosibErr<void> err;
+
+    err = fill_dict_aliases(c);
+    if (err.has_err()) goto RETURN_ERROR;
+
+    for_dirs = dirs;
+    err = module_info_list.fill(*this, c);
+    if (err.has_err()) goto RETURN_ERROR;
+
+    fill_helper_lists(dirs);
+    err = dict_info_list.fill(*this, c);
+    if (err.has_err()) goto RETURN_ERROR;
+
+    return err;
+
+  RETURN_ERROR:
+    clear();
+    return err;
+  }
+
+  void MDInfoListAll::fill_helper_lists(const StringList & def_dirs)
+  {
+    dict_dirs = def_dirs;
+    dict_exts.append(DictExt(0, ".awli"));
+
+    for (ModuleInfoNode * n = module_info_list.head_; n != 0; n = n->next) 
+    {
+      {
+       StringListEnumeration e = n->dict_dirs.elements_obj();
+       const char * item;
+       while ( (item = e.next()) != 0 )
+         dict_dirs.add(item);
+      }{
+       StringListEnumeration e = n->dict_exts.elements_obj();
+       const char * item;
+       while ( (item = e.next()) != 0 )
+         dict_exts.append(DictExt(&n->c_struct, item));
+      }
+    }
+  }
+
+  PosibErr<void> MDInfoListAll::fill_dict_aliases(Config * c)
+  {
+    StringList aliases;
+    c->retrieve_list("dict-alias", &aliases);
+    StringListEnumeration els = aliases.elements_obj();
+    const char * str;
+    while ( (str = els.next()) != 0) {
+      const char * end = strchr(str, ' ');
+      if (!end) return make_err(bad_value, "dict-alias", str, 
+                                _("in the form \"<name> <value>\""));
+      String name(str, end - str);
+      while (asc_isspace(*end)) ++end;
+      dict_aliases.insert(name.str(), end);
+    }
+    return no_err;
+  }
+
+
+  MDInfoListofLists::MDInfoListofLists()
+    : data(0), offset(0), size(0)
+  {
+  }
+
+  MDInfoListofLists::~MDInfoListofLists() {
+    for (int i = offset; i != offset + size; ++i)
+      data[i].clear();
+    delete[] data;
+  }
+
+  void MDInfoListofLists::clear(Config * c)
+  {
+    StringList dirs;
+    get_data_dirs(c, dirs);
+    int pos = find(dirs);
+    if (pos == -1) {
+      data[pos - offset].clear();
+    }
+  }
+
+  int MDInfoListofLists::find(const StringList & key)
+  {
+    for (int i = 0; i != size; ++i) {
+      if (data[i].key == key)
+       return i + offset;
+    }
+    return -1;
+  }
+
+  PosibErr<const MDInfoListAll *>
+  MDInfoListofLists::get_lists(Config * c)
+  {
+    LOCK(&lock);
+    Config * config = (Config *)c; // FIXME: WHY?
+    int & pos = config->md_info_list_index;
+    StringList dirs;
+    StringList key;
+    if (!valid_pos(pos)) {
+      get_data_dirs(config, dirs);
+      key = dirs;
+      key.add("////////");
+      config->retrieve_list("dict-alias", &key);
+      pos = find(key);
+    }
+    if (!valid_pos(pos)) {
+      MDInfoListAll * new_data = new MDInfoListAll[size + 1];
+      for (int i = 0; i != size; ++i) {
+       new_data[i] = data[i];
+      }
+      ++size;
+      delete[] data;
+      data = new_data;
+      pos = size - 1 + offset;
+    }
+    MDInfoListAll & list_all = data[pos - offset];
+    if (list_all.has_data())
+      return &list_all;
+
+    list_all.key = key;
+    RET_ON_ERR(list_all.fill(config, dirs));
+
+    return &list_all;
+  }
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // utility functions
+  //
+
+  static const char * strnchr(const char * i, char c, unsigned int size)
+  {
+    const char * stop = i + size;
+    while (i != stop) {
+      if (*i == c)
+       return i;
+      ++i;
+    }
+    return 0;
+  }
+
+  static const char * strnrchr(const char * stop, char c, unsigned int size)
+  {
+    const char * i = stop + size - 1;
+    --stop;
+    while (i != stop) {
+      if (*i == c)
+       return i;
+      --i;
+    }
+    return 0;
+  }
+
+  /////////////////////////////////////////////////////////////////
+  //
+  // user visible functions and enumeration impl
+  //
+
+  //
+  // ModuleInfo
+  //
+
+  const ModuleInfoList * get_module_info_list(Config * c)
+  {
+    const MDInfoListAll * la = md_info_list_of_lists.get_lists(c);
+    if (la == 0) return 0;
+    else return &la->module_info_list;
+  }
+
+  ModuleInfoEnumeration * ModuleInfoList::elements() const
+  {
+    return new ModuleInfoEnumeration((ModuleInfoNode *)head_);
+  }
+
+  unsigned int ModuleInfoList::size() const
+  {
+    return size_;
+  }
+
+  bool ModuleInfoList::empty() const
+  {
+    return size_ != 0;
+  }
+
+  ModuleInfoEnumeration * ModuleInfoEnumeration::clone () const
+  {
+    return new ModuleInfoEnumeration(*this);
+  }
+
+  void ModuleInfoEnumeration::assign(const ModuleInfoEnumeration * other)
+  {
+    *this = *other;
+  }
+  
+  bool ModuleInfoEnumeration::at_end () const
+  {
+    return node_ == 0;
+  }
+
+  const ModuleInfo * ModuleInfoEnumeration::next ()
+  {
+    if (node_ == 0) return 0;
+    const ModuleInfo * data = &(node_->c_struct);
+    node_ = (ModuleInfoNode *)(node_->next);
+    return data;
+  }
+
+  //
+  // DictInfo
+  //
+
+  const DictInfoList * get_dict_info_list(Config * c)
+  {
+    const MDInfoListAll * la = md_info_list_of_lists.get_lists(c);
+    if (la == 0) return 0;
+    else return &la->dict_info_list;
+  }
+
+  const StringMap * get_dict_aliases(Config * c)
+  {
+    const MDInfoListAll * la = md_info_list_of_lists.get_lists(c);
+    if (la == 0) return 0;
+    else return &la->dict_aliases;
+  }
+
+  DictInfoEnumeration * DictInfoList::elements() const
+  {
+    return new DictInfoEnumeration(static_cast<DictInfoNode *>(head_));
+  }
+
+  unsigned int DictInfoList::size() const
+  {
+    return size_;
+  }
+
+  bool DictInfoList::empty() const
+  {
+    return size_ != 0;
+  }
+
+  DictInfoEnumeration * DictInfoEnumeration::clone() const
+  {
+    return new DictInfoEnumeration(*this);
+  }
+
+  void DictInfoEnumeration::assign(const DictInfoEnumeration * other)
+  {
+    *this = *other;
+  }
+
+  bool DictInfoEnumeration::at_end() const
+  {
+    return node_ == 0;
+  }
+
+  const DictInfo * DictInfoEnumeration::next ()
+  {
+    if (node_ == 0) return 0;
+    const DictInfo * data = &(node_->c_struct);
+    node_ = (DictInfoNode *)(node_->next);
+    return data;
+  }
+
+}
diff --git a/common/info.hpp b/common/info.hpp
new file mode 100644 (file)
index 0000000..59f986f
--- /dev/null
@@ -0,0 +1,147 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_INFO__HPP
+#define ASPELL_INFO__HPP
+
+#include "posib_err.hpp"
+#include "type_id.hpp"
+
+namespace acommon {
+
+  typedef int c_boolean;
+
+  class Config;
+  struct DictInfo;
+  class DictInfoEnumeration;
+  class DictInfoList;
+  struct ModuleInfo;
+  class ModuleInfoEnumeration;
+  class ModuleInfoList;
+  class StringList;
+  struct StringListImpl;
+  class FStream;
+  class StringMap;
+
+  struct ModuleInfo {
+    const char * name;
+    double order_num;
+    const char * lib_dir;
+    StringList * dict_exts;
+    StringList * dict_dirs;
+  };
+
+  PosibErr<void> get_dict_file_name(const DictInfo *, 
+                                   String & main_wl, String & flags);
+  
+  struct DictInfo {
+    const char * name;
+    const char * code;
+    const char * variety;
+    int size;
+    const char * size_str;
+    const ModuleInfo * module;
+  };
+
+  struct MDInfoListAll;
+  
+  struct ModuleInfoNode;
+  
+  class ModuleInfoList {
+  public:
+    ModuleInfoList() : size_(0), head_(0) {}
+    void clear();
+    PosibErr<void> fill(MDInfoListAll &, Config *);
+    bool empty() const;
+    unsigned int size() const;
+    ModuleInfoEnumeration * elements() const;
+    PosibErr<void> proc_info(MDInfoListAll &,
+                            Config *,
+                            const char * name,
+                            unsigned int name_size,
+                            IStream &);
+    ModuleInfoNode * find(const char * to_find, 
+                         unsigned int to_find_len);
+  public: // but don't use
+    unsigned int size_;
+    ModuleInfoNode * head_;
+  };
+  
+  const ModuleInfoList * get_module_info_list(Config *);
+
+  struct DictInfoNode;
+
+  class DictInfoList {
+  public:
+    DictInfoList() : size_(0), head_(0) {}
+    void clear();
+    PosibErr<void> fill(MDInfoListAll &, Config *);
+    bool empty() const;
+    unsigned int size() const;
+    DictInfoEnumeration * elements() const;
+    PosibErr<void> proc_file(MDInfoListAll &,
+                            Config *,
+                            const char * dir,
+                            const char * name,
+                            unsigned int name_size,
+                            const ModuleInfo *);
+  public: // but don't use
+    unsigned int size_;
+    DictInfoNode * head_;
+  };
+
+  const DictInfoList * get_dict_info_list(Config *);
+
+  const StringMap * get_dict_aliases(Config *);
+
+  class ModuleInfoEnumeration {
+  public:
+    typedef const ModuleInfo * Value;
+
+    const ModuleInfoNode * node_;
+    ModuleInfoEnumeration(const ModuleInfoNode * n) : node_(n) {}
+
+    bool at_end() const;
+    const ModuleInfo * next();
+    int ref_count_;
+    TypeId type_id_;
+    unsigned int type_id() { return type_id_.num; }
+    int copyable_;
+    int copyable() { return copyable_; }
+    ModuleInfoEnumeration * clone() const;
+    void assign(const ModuleInfoEnumeration * other);
+    ModuleInfoEnumeration() : ref_count_(0), copyable_(2) {}
+    virtual ~ModuleInfoEnumeration() {}
+  };
+
+  struct DictInfoNode;
+
+  class DictInfoEnumeration {
+  public:
+    const DictInfoNode * node_;
+    DictInfoEnumeration(const DictInfoNode * n) : node_(n) {}
+
+    typedef const DictInfo * Value;
+
+    bool at_end() const;
+    const DictInfo * next();
+    int ref_count_;
+    TypeId type_id_;
+    unsigned int type_id() { return type_id_.num; }
+    int copyable_;
+    int copyable() { return copyable_; }
+    DictInfoEnumeration * clone() const;
+    void assign(const DictInfoEnumeration * other);
+    DictInfoEnumeration() : ref_count_(0), copyable_(2) {}
+    virtual ~DictInfoEnumeration() {}
+  };
+
+
+
+
+}
+
+#endif /* ASPELL_INFO__HPP */
diff --git a/common/iostream.cpp b/common/iostream.cpp
new file mode 100644 (file)
index 0000000..f0fc3e5
--- /dev/null
@@ -0,0 +1,13 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "iostream.hpp"
+
+namespace acommon {
+  FStream CIN(stdin, false);
+  FStream COUT(stdout, false);
+  FStream CERR(stderr, false);
+}
diff --git a/common/iostream.hpp b/common/iostream.hpp
new file mode 100644 (file)
index 0000000..5937f0f
--- /dev/null
@@ -0,0 +1,24 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_IOSTREAM__HPP
+#define ASPELL_IOSTREAM__HPP
+
+#include "fstream.hpp"
+
+namespace acommon {
+
+  // These streams for the time being will be based on stdin, stdout,
+  // and stderr respectfully.  So it is safe to use the standard C
+  // functions.  It is also safe to assume that modifications to the
+  // state of the standard streams will effect these.
+
+  extern FStream CIN;
+  extern FStream COUT;
+  extern FStream CERR;
+}
+
+#endif
diff --git a/common/istream.hpp b/common/istream.hpp
new file mode 100644 (file)
index 0000000..e3c9d0d
--- /dev/null
@@ -0,0 +1,35 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_ISTREAM__HPP
+#define ASPELL_ISTREAM__HPP
+
+namespace acommon {
+
+  class String;
+
+  class IStream {
+  private:
+    char delem;
+  public:
+    IStream(char d = '\n') : delem(d) {}
+    
+    char delim() const {return delem;}
+
+    // getline will read until delem
+    virtual bool append_line(String &, char c) = 0;
+    bool append_line(String & str) {return append_line(str, delem);}
+    bool getline(String & str, char c);
+    bool getline(String & str);
+
+    virtual bool read(void *, unsigned int) = 0;
+
+    virtual ~IStream() {}
+  };
+  
+}
+
+#endif
diff --git a/common/itemize.cpp b/common/itemize.cpp
new file mode 100644 (file)
index 0000000..2abc848
--- /dev/null
@@ -0,0 +1,106 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "asc_ctype.hpp"
+#include "itemize.hpp"
+#include "mutable_container.hpp"
+#include <stdio.h>
+#include <cstdio>
+
+//FIXME: it should be possible to escape ',' '+' '-' '!' so that they can
+//       appear in values
+//       If '\' is used than what about when the option file is parsed
+//         as it strips away all '\' escapes.
+
+namespace acommon {
+
+  struct ItemizeItem {
+    char   action;
+    const char * name;
+    ItemizeItem() : action('\0'), name(0) {}
+  };
+
+  class ItemizeTokenizer {
+  private:
+    char * list;
+    char * i;
+  public:
+    ItemizeTokenizer(const char * l);
+    ~ItemizeTokenizer();
+  private:
+    ItemizeTokenizer(const ItemizeTokenizer & other) ;
+    ItemizeTokenizer & operator=(const ItemizeTokenizer & other);
+  public:
+    ItemizeItem next();
+  };
+
+  ItemizeTokenizer::ItemizeTokenizer(const char * l) 
+  {
+    size_t size = strlen(l) + 1;
+    list = new char[size];
+    i = list;
+    strncpy(list, l, size);
+  }
+
+  ItemizeTokenizer::~ItemizeTokenizer() 
+  {
+    delete[] list;
+  }
+
+
+  ItemizeItem ItemizeTokenizer::next() 
+  {
+    ItemizeItem li;
+    while (*i != '\0' && (asc_isspace(*i) || *i == ',')) ++i;
+    if (*i == '\0') return li;
+    li.action = *i;
+    if (*i == '+' || *i == '-') {
+      ++i;
+    } else if (*i == '!') {
+      li.name = "";
+      ++i;
+      return li;
+    } else {
+      li.action = '+';
+    }
+    while (*i != '\0' && *i != ',' && asc_isspace(*i)) ++i;
+    if (*i == '\0' || *i == ',') return next();
+    li.name = i;
+    while (*i != '\0' && *i != ',') ++i;
+    while (i != list && asc_isspace(*(i-1))) --i;
+    if (*i != '\0') {
+      *i = '\0';
+      ++i;
+    }
+    return li;
+  }
+
+
+  PosibErr<void> itemize (ParmString s, MutableContainer & d) {
+    ItemizeTokenizer els(s);
+    ItemizeItem li;
+    while (li = els.next(), li.name != 0) {
+      switch (li.action) {
+      case '+':
+       RET_ON_ERR(d.add(li.name));
+       break;
+      case '-':
+       RET_ON_ERR(d.remove(li.name));
+       break;
+      case '!':
+       RET_ON_ERR(d.clear());
+       break;
+      default:
+       abort();
+      }
+    }
+    return no_err;
+  }
+
+}
diff --git a/common/itemize.hpp b/common/itemize.hpp
new file mode 100644 (file)
index 0000000..7c36576
--- /dev/null
@@ -0,0 +1,20 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ITEMIZE__HPP
+#define ITEMIZE__HPP
+
+#include "parm_string.hpp"
+#include "posib_err.hpp"
+
+namespace acommon {
+
+  class MutableContainer;
+  PosibErr<void> itemize(ParmString, MutableContainer &);
+
+}
+
+#endif
diff --git a/common/key_info.hpp b/common/key_info.hpp
new file mode 100644 (file)
index 0000000..f209820
--- /dev/null
@@ -0,0 +1,30 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_KEY_INFO__HPP
+#define ASPELL_KEY_INFO__HPP
+
+#include "key_info.hpp"
+
+namespace acommon {
+
+
+enum KeyInfoType {KeyInfoString,KeyInfoInt,KeyInfoBool,KeyInfoList};
+struct KeyInfo {
+  const char * name;
+  KeyInfoType type;
+  const char * def;
+  const char * desc;
+  int flags;
+  int other_data;
+};
+
+
+}
+
+#endif /* ASPELL_KEY_INFO__HPP */
diff --git a/common/lock.hpp b/common/lock.hpp
new file mode 100644 (file)
index 0000000..1090f5a
--- /dev/null
@@ -0,0 +1,68 @@
+// File: lock.hpp
+//
+// Copyright (c) 2002,2003,2011
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation.  Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef DISTRIBNET_LOCK__HPP
+#define DISTRIBNET_LOCK__HPP
+
+#include <assert.h>
+
+#include "settings.h"
+
+#ifdef USE_POSIX_MUTEX
+#  include <pthread.h>
+#endif
+
+namespace acommon {
+
+#define LOCK(l) const Lock the_lock(l);
+
+#ifdef USE_POSIX_MUTEX
+  class Mutex {
+    pthread_mutex_t l_;
+  private:
+    Mutex(const Mutex &);
+    void operator=(const Mutex &);
+  public:
+    Mutex() {pthread_mutex_init(&l_, 0);}
+    ~Mutex() {pthread_mutex_destroy(&l_);}
+    void lock() {pthread_mutex_lock(&l_);}
+    void unlock() {pthread_mutex_unlock(&l_);}
+  };
+#else
+  class Mutex {
+  private:
+    Mutex(const Mutex &);
+    void operator=(const Mutex &);
+  public:
+    Mutex() {}
+    ~Mutex() {}
+    void lock() {}
+    void unlock() {}
+  };
+#endif
+
+  class Lock {
+  private:
+    Lock(const Lock &);
+    void operator= (const Lock &);
+    Mutex * lock_;
+  public:
+    Lock(Mutex * l) : lock_(l) {if (lock_) lock_->lock();}
+    void set(Mutex * l) {assert(!lock_); lock_ = l; if (lock_) lock_->lock();}
+    void release() {if (lock_) lock_->unlock(); lock_ = NULL;}
+    ~Lock() {if (lock_) lock_->unlock();}
+  };
+};
+
+#endif
diff --git a/common/lsort.hpp b/common/lsort.hpp
new file mode 100644 (file)
index 0000000..495c999
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2004
+ * Kevin Atkinson
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation. I make no representations about
+ * the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * This code was originally adopted from the slist implementation
+ * found in the SGI STL under the following copyright:
+ *
+ * Copyright (c) 1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef ACOMMON_LSORT__HPP
+#define ACOMMON_LSORT__HPP
+
+namespace acommon {
+
+using std::swap;
+
+template <class N>
+struct Next {
+  N * & operator() (N * n) const {return n->next;}
+};
+template <class N>
+struct Less {
+  bool operator() (N * x, N * y) const {return x->data < y->data;}
+};
+
+
+template <class N, class LT, class NX>
+static inline N * merge(N * x, N * y, const LT & lt, const NX & nx)
+{
+  if (lt(y,x)) swap(x,y);
+  N * first = x;
+  while (nx(x) && y) {
+    if (lt(y,nx(x))) {
+      N * xn = nx(x);
+      N * yn = nx(y);
+      nx(x) = y;
+      nx(y) = xn;
+      y = yn;
+    }
+    x = nx(x);
+  }
+  if (y) {
+    nx(x) = y;
+  }
+  return first;
+}
+
+// THIS is SLOWER!!!
+//  and even slower when condational move is used!!!!
+template <class N, class LT, class NX>
+static inline N * merge1(N * x, N * y, const LT & lt, const NX & nx)
+{
+  N * * cur = lt(x,y) ? &x : &y;
+  N * first = *cur;
+  N * last = *cur;
+  *cur = nx(*cur);
+  while (x && y) {
+    cur = lt(x,y) ? &x : &y;
+    nx(last) = *cur;
+    last = *cur;
+    *cur = nx(*cur);
+  }
+  if (x) {nx(last) = x;}
+  else if (y) {nx(last) = y;}
+  return first;
+}
+
+template <class N, class LT>
+static inline N * merge(N * x, N * y, const LT & lt)
+{
+  return sort(x, y, lt, Next<N>());
+}
+
+template <class N>
+static inline N * merge(N * x, N * y)
+{
+  return sort(x, y, Less<N>(), Next<N>());
+}
+
+template <class N, class LT, class NX>
+N * sort(N * first, const LT & lt, const NX & nx)
+{
+  if (!first) return first;
+
+  N * carry = 0;
+  N * counter[sizeof(void *)*8] = {0};
+  int fill = 0;
+
+  while (first) {
+
+    N * tmp = nx(first);
+    nx(first) = carry;
+    carry = first;
+    first = tmp;
+
+    int i = 0;
+    while (i < fill && counter[i]) {
+      carry = merge(counter[i], carry, lt, nx);
+      counter[i] = 0;
+      ++i;
+    }
+
+    swap(carry, counter[i]);
+
+    if (i == fill) {
+      ++fill;
+    }
+  }
+
+  for (int i = 1; i < fill; ++i) {
+    if (!counter[i]) counter[i] = counter[i-1];
+    else if (counter[i-1]) counter[i] = merge(counter[i], counter[i-1], lt, nx);
+  }
+
+  return counter[fill-1];
+}
+
+template <class N, class LT>
+static inline N * sort(N * first, const LT & lt)
+{
+  return sort(first, lt, Next<N>());
+}
+
+template <class N>
+static inline N * sort(N * first)
+{
+  return sort(first, Less<N>(), Next<N>());
+}
+
+
+template <class N>
+static inline N * fix_links(N * cur)
+{
+  N * prev = 0;
+  while (cur) {
+    cur->prev = prev;
+    prev = cur;
+    cur = cur->next;
+  }
+}
+
+}
+
+#endif
+
diff --git a/common/mutable_container.hpp b/common/mutable_container.hpp
new file mode 100644 (file)
index 0000000..27d7b15
--- /dev/null
@@ -0,0 +1,30 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_MUTABLE_CONTAINER__HPP
+#define ASPELL_MUTABLE_CONTAINER__HPP
+
+#include "parm_string.hpp"
+
+namespace acommon {
+
+class AddableContainer {
+public:
+  virtual PosibErr<bool> add(ParmStr to_add) = 0;
+  virtual ~AddableContainer() {}
+};
+
+
+class MutableContainer : public AddableContainer {
+public:
+  virtual PosibErr<bool> remove(ParmStr to_rem) = 0;
+  virtual PosibErr<void> clear() = 0;
+};
+
+
+}
+
+#endif /* ASPELL_MUTABLE_CONTAINER__HPP */
diff --git a/common/mutable_string.hpp b/common/mutable_string.hpp
new file mode 100644 (file)
index 0000000..bbbf829
--- /dev/null
@@ -0,0 +1,76 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_MUTABLE_STRING__HPP
+#define ASPELL_MUTABLE_STRING__HPP
+
+#include <string.h>
+
+#include "parm_string.hpp"
+
+namespace acommon {
+
+  struct MutableString {
+    char * str;
+    unsigned int size;
+
+    MutableString() : str(0), size(0) {}
+    MutableString(char * str0) : str(str0), size(strlen(str)) {}
+    MutableString(char * str0, unsigned int sz) : str(str0), size(sz) {}
+
+    bool empty() const {return size == 0;}
+    operator char * () const {return str;}
+    operator ParmString () const {return ParmString(str, size);}
+    char * begin() const {return str;}
+    char * end() const {return str + size;}
+  };
+
+  static inline bool operator==(MutableString s1, MutableString s2)
+  {
+    if (s1.size != s2.size)
+      return false;
+    else
+      return memcmp(s1,s2,s1.size) == 0;
+  }
+  static inline bool operator==(const char * s1, MutableString s2)
+  {
+    if ( s1 == NULL ) {
+      return s2.size == 0;
+    }
+    return strcmp(s1,s2) == 0;
+  }
+  static inline bool operator==(MutableString s1, const char * s2)
+  {
+    if ( s2 == NULL ) {
+      return s1.size == 0;
+    }
+    return strcmp(s1,s2) == 0;
+  }
+
+  static inline bool operator!=(MutableString s1, MutableString s2)
+  {
+    if (s1.size != s2.size)
+      return true;
+    else
+      return memcmp(s1,s2,s1.size) != 0;
+  }
+  static inline bool operator!=(const char * s1, MutableString s2)
+  {
+    if ( s1 == NULL ) {
+      return s2.size != 0;
+    }
+    return strcmp(s1,s2) != 0;
+  }
+  static inline bool operator!=(MutableString s1, const char * s2)
+  {
+    if ( s2 == NULL ) {
+      return s1.size != 0;
+    }
+    return strcmp(s1,s2) != 0;
+  }
+}
+
+#endif
diff --git a/common/ndebug.hpp b/common/ndebug.hpp
new file mode 100644 (file)
index 0000000..aee7a5c
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef NDEBUG__HPP
+#define NDEBUG__HPP
+
+#ifdef NDEBUG
+#warning "Binaries compiled with NDEBUG defined are unsupported see http://aspell.net/ndebug.html."
+#endif
+
+#endif
diff --git a/common/objstack.cpp b/common/objstack.cpp
new file mode 100644 (file)
index 0000000..b33c0a5
--- /dev/null
@@ -0,0 +1,80 @@
+
+#include "objstack.hpp"
+
+namespace acommon {
+
+using namespace std;
+
+void ObjStack::setup_chunk()
+{
+  bottom = first_free->data;
+  align_bottom(min_align);
+  top    = (byte *)first_free + chunk_size;
+  align_top(min_align);
+}
+
+
+ObjStack::ObjStack(size_t chunk_s, size_t align)
+  : chunk_size(chunk_s), min_align(align), temp_end(0)
+{
+  first_free = first = (Node *)malloc(chunk_size);
+  first->next = 0;
+  reserve = 0;
+  setup_chunk();
+}
+
+ObjStack::~ObjStack()
+{
+  while (first) {
+    Node * tmp = first->next;
+    free(first);
+    first = tmp;
+  }
+  trim();
+}
+
+size_t ObjStack::calc_size()
+{
+  size_t size = 0;
+  for (Node * p = first; p; p = p->next)
+    size += chunk_size;
+  return size;
+}
+
+void ObjStack::new_chunk()
+{
+  if (reserve) {
+    first_free->next = reserve;
+    reserve = reserve->next;
+    first_free = first_free->next;
+    first_free->next = 0;
+  } else {
+    first_free->next = (Node *)malloc(chunk_size);
+    first_free = first_free->next;
+  }
+  first_free->next = 0;
+  setup_chunk();
+}
+
+void ObjStack::reset()
+{
+  assert(first_free->next == 0);
+  if (first->next) {
+    first_free->next = reserve;
+    reserve = first->next;
+    first->next = 0;
+  } 
+  first_free = first;
+  setup_chunk();
+}
+
+void ObjStack::trim()
+{
+  while (reserve) {
+    Node * tmp = reserve->next;
+    free(reserve);
+    reserve = tmp;
+  }
+}
+
+}
diff --git a/common/objstack.hpp b/common/objstack.hpp
new file mode 100644 (file)
index 0000000..d98ff61
--- /dev/null
@@ -0,0 +1,171 @@
+
+#ifndef ACOMMON_OBJSTACK__HPP
+#define ACOMMON_OBJSTACK__HPP
+
+#include "parm_string.hpp"
+#include <stdlib.h>
+#include <assert.h>
+
+namespace acommon {
+
+class ObjStack
+{
+  typedef unsigned char byte;
+  struct Node
+  {
+    Node * next;
+    byte data[1]; // hack for data[]
+  };
+  size_t chunk_size;
+  size_t min_align;
+  Node * first;
+  Node * first_free;
+  Node * reserve;
+  byte * top;
+  byte * bottom;
+  byte * temp_end;
+  void setup_chunk();
+  void new_chunk();
+
+  ObjStack(const ObjStack &);
+  void operator=(const ObjStack &);
+
+  void align_bottom(size_t align) {
+    size_t a = (size_t)bottom % align;
+    if (a != 0) bottom += align - a;
+  }
+  void align_top(size_t align) {
+    top -= (size_t)top % align;
+  }
+public:
+  // The alignment here is the guaranteed alignment that memory in
+  // new chunks will be aligned to.   It does NOT guarantee that
+  // every object is aligned as such unless all objects inserted
+  // are a multiple of align.
+  ObjStack(size_t chunk_s = 1024, size_t align = sizeof(void *));
+  ~ObjStack();
+
+  size_t calc_size();
+
+  void reset();
+  void trim();
+  
+  // This alloc_bottom does NOT check alignment.  However, if you always
+  // insert objects with a multiple of min_align than it will always
+  // me aligned as such.
+  void * alloc_bottom(size_t size)  {
+    byte * tmp = bottom;
+    bottom += size;
+    if (bottom > top) {new_chunk(); tmp = bottom; bottom += size;}
+    return tmp;
+  }
+  // This alloc_bottom will insure that the object is aligned based on the
+  // alignment given.
+  void * alloc_bottom(size_t size, size_t align) 
+  {loop:
+    align_bottom(align);
+    byte * tmp = bottom;
+    bottom += size;
+    if (bottom > top) {new_chunk(); goto loop;}
+    return tmp;
+  }
+  char * dup_bottom(ParmString str) {
+    return (char *)memcpy(alloc_bottom(str.size() + 1), 
+                          str.str(), str.size() + 1);
+  }
+
+  // This alloc_bottom does NOT check alignment.  However, if you
+  // always insert objects with a multiple of min_align than it will
+  // always be aligned as such.
+  void * alloc_top(size_t size) {
+    top -= size;
+    if (top < bottom) {new_chunk(); top -= size;}
+    return top;
+  }
+  // This alloc_top will insure that the object is aligned based on
+  // the alignment given.
+  void * alloc_top(size_t size, size_t align) 
+  {loop:
+    top -= size;
+    align_top(align);
+    if (top < bottom) {new_chunk(); goto loop;}
+    return top;
+  }
+  char * dup_top(ParmString str) {
+    return (char *)memcpy(alloc_top(str.size() + 1), 
+                          str.str(), str.size() + 1);
+  }
+
+  // By default objects are allocated from the top since that is sligtly
+  // more efficient
+  void * alloc(size_t size) {return alloc_top(size);}
+  void * alloc(size_t size, size_t align) {return alloc_top(size,align);}
+  char * dup(ParmString str) {return dup_top(str);}
+
+  // alloc_temp allocates an object from the bottom which can be
+  // resized untill it is commited.  If the resizing will involve
+  // moving the object than the data will be copied in the same way
+  // realloc does.  Any previously allocated objects are aborted when
+  // alloc_temp is called.
+  void * temp_ptr() {
+    if (temp_end) return bottom;
+    else return 0;
+  }
+  unsigned temp_size() {
+    return temp_end - bottom;
+  }
+  void * alloc_temp(size_t size) {
+    temp_end = bottom + size;
+    if (temp_end > top) {
+      new_chunk();
+      temp_end = bottom + size;
+    }
+    return bottom;
+  }
+  // returns a pointer the the new beginning of the temp memory
+  void * resize_temp(size_t size) {
+    if (temp_end == 0)
+      return alloc_temp(size);
+    if (bottom + size <= top) {
+      temp_end = bottom + size;
+    } else {
+      size_t s = temp_end - bottom;
+      byte * p = bottom;
+      new_chunk();
+      memcpy(bottom, p, s);
+      temp_end = bottom + size;
+    }
+    return bottom;
+  }
+  // returns a pointer to the beginning of the new memory (in
+  // otherwords the END of the temp memory BEFORE the call to grow
+  // temp) NOT the beginning if the temp memory
+  void * grow_temp(size_t s) {
+    if (temp_end == 0)
+      return alloc_temp(s);
+    unsigned old_size = temp_end - bottom;
+    unsigned size = old_size + s;
+    if (bottom + size <= top) {
+      temp_end = bottom + size;
+    } else {
+      size_t s = temp_end - bottom;
+      byte * p = bottom;
+      new_chunk();
+      memcpy(bottom, p, s);
+      temp_end = bottom + size;
+    }
+    return bottom + old_size;
+  }
+  void abort_temp() {
+    temp_end = 0;}
+  void commit_temp() {
+    bottom = temp_end;
+    temp_end = 0;}
+
+};
+
+typedef ObjStack StringBuffer;
+
+}
+
+#endif
diff --git a/common/ostream.hpp b/common/ostream.hpp
new file mode 100644 (file)
index 0000000..66becd4
--- /dev/null
@@ -0,0 +1,67 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_OSTREAM__HPP
+#define ASPELL_OSTREAM__HPP
+
+#include <stdarg.h>
+
+#include "parm_string.hpp"
+
+namespace acommon {
+
+  // FIXME: Add Print Method compatible with printf and friends.
+  //   Than avoid code bloat by using it in many places instead of
+  //   out << "Bla " << something << " djdkdk " << something else << "\n"
+
+  class OStream {
+  public:
+    virtual void write (char c) = 0;
+    virtual void write (ParmStr) = 0;
+    virtual void write (const void *, unsigned int) = 0;
+
+    virtual int vprintf(const char *format, va_list ap) = 0;
+
+#ifdef __GNUC__
+    __attribute__ ((format (printf,2,3)))
+#endif
+      int printf(const char * format, ...)
+    {
+      va_list ap;
+      va_start(ap, format);
+      int res = vprintf(format, ap);
+      va_end(ap);
+      return res;
+    }
+
+    void put (char c) {write(c);}
+    void put (ParmStr str) {write(str);}
+
+    virtual void printl(ParmStr l) 
+    {
+      write(l);
+      write('\n');
+    }
+
+    void write16(unsigned short v) {write(&v, 2);}
+    void write32(unsigned int v) {write(&v, 4);}
+
+    OStream & operator << (char c) {
+      write(c);
+      return *this;
+    }
+
+    OStream & operator << (ParmStr in) {
+      write(in);
+      return *this;
+    }
+
+    virtual ~OStream() {}
+  };
+  
+}
+
+#endif
diff --git a/common/parm_string.hpp b/common/parm_string.hpp
new file mode 100644 (file)
index 0000000..129c91e
--- /dev/null
@@ -0,0 +1,116 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_PARM_STRING__HPP
+#define ASPELL_PARM_STRING__HPP
+
+#include <string.h>
+#include <limits.h>
+
+//
+// ParmString is a special string class that is designed to be used as
+// a parameter for a function that is expecting a string It will allow
+// either a "const char *" or "String" class to be passed in.  It will
+// automatically convert to a "const char *".  The string can also be
+// accesses via the "str" method.  Usage example:
+//
+// void foo(ParmString s1, s2) {
+//   const char *  str0 = s1;
+//   unsigned int size0 = s2.size()
+//   if (s1 == s2 || s2 == "bar") {
+//     ...
+//   }
+// }
+// ...
+// String s1 = "...";
+// foo(s1);
+// const char * s2 = "...";
+// foo(s2);
+//
+// The string is expected to be null terminated, even if size is give
+// during construction.
+//
+
+namespace acommon {
+
+  template<typename Ret> class PosibErr;
+
+  class String;
+
+  class ParmString {
+  public:
+    ParmString() : str_(0) {}
+    ParmString(const char * str, unsigned int sz = UINT_MAX) 
+      : str_(str), size_(sz) {}
+    inline ParmString(const String &);
+    inline ParmString(const PosibErr<const char *> &);
+    inline ParmString(const PosibErr<String> &);
+
+    void set(const char * str, unsigned int sz = UINT_MAX) {
+      str_ = str, size_ = sz;
+    }
+
+    bool empty() const {
+      return str_ == 0 || str_[0] == '\0';
+    }
+    unsigned int size() const {
+      if (size_ != UINT_MAX) return size_;
+      else return size_ = strlen(str_);
+    }
+    bool have_size() const {return size_ != UINT_MAX;}
+    operator const char * () const {
+      return str_;
+    }
+    const char * str () const {
+      return str_;
+    }
+  public: // but don't use unless you have to
+    const char * str_;
+    mutable unsigned int size_;
+  };
+
+  typedef const ParmString & ParmStr;
+
+  static inline bool operator== (ParmStr s1, ParmStr s2)
+  {
+    if (s1.str() == 0 || s2.str() == 0)
+      return s1.str() == s2.str();
+    return strcmp(s1,s2) == 0;
+  }
+  static inline bool operator== (const char * s1, ParmStr s2)
+  {
+    if (s1 == 0 || s2.str() == 0)
+      return s1 == s2.str();
+    return strcmp(s1,s2) == 0;
+  }
+  static inline bool operator== (ParmStr s1, const char * s2)
+  {
+    if (s1.str() == 0 || s2 == 0)
+      return s1.str() == s2;
+    return strcmp(s1,s2) == 0;
+  }
+  static inline bool operator!= (ParmStr s1, ParmStr s2)
+  {
+    if (s1.str() == 0 || s2.str() == 0)
+      return s1.str() != s2.str();
+    return strcmp(s1,s2) != 0;
+  }
+  static inline bool operator!= (const char * s1, ParmStr s2)
+  {
+    if (s1 == 0 || s2.str() == 0)
+      return s1 != s2.str();
+    return strcmp(s1,s2) != 0;
+  }
+  static inline bool operator!= (ParmStr s1, const char * s2)
+  {
+    if (s1.str() == 0 || s2 == 0)
+      return s1.str() != s2;
+    return strcmp(s1,s2) != 0;
+  }
+
+}
+
+#endif
diff --git a/common/posib_err.cpp b/common/posib_err.cpp
new file mode 100644 (file)
index 0000000..2d33d5a
--- /dev/null
@@ -0,0 +1,128 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+//#include "iostream.hpp"
+
+#include "posib_err.hpp"
+
+#include "gettext.h"
+
+
+namespace acommon {
+
+  String & String::operator= (const PosibErr<String> & s)
+  {
+    operator=(s.data);
+    return *this;
+  }
+
+  struct StrSize {
+    const char * str; 
+    unsigned int size; 
+    StrSize() : str(0), size(0) {}
+    void operator= (ParmString s) {str = s; size = s.size();}
+  };
+
+  PosibErrBase & PosibErrBase::set(const ErrorInfo * inf,
+                                  ParmString p1, ParmString p2, 
+                                  ParmString p3, ParmString p4)
+  {
+    const char * s0 = inf->mesg ? _(inf->mesg) : "";
+    const char * s;
+    ParmString p[4] = {p1,p2,p3,p4};
+    StrSize m[10];
+    unsigned int i = 0;
+    while (i != 4 && p[i] != 0) 
+      ++i;
+    assert(i == inf->num_parms || i == inf->num_parms + 1);
+    i = 0;
+    while (true) {
+      s = s0 + strcspn(s0, "%");
+      m[i].str = s0;
+      m[i].size = s - s0;
+      if (*s == '\0') break;
+      ++i;
+      s = strchr(s, ':') + 1;
+      unsigned int ip = *s - '0' - 1;
+      assert(0 <= ip && ip < inf->num_parms);
+      m[i] = p[ip];
+          ++i;
+      s0 = s+1;
+    }
+    if (!p[inf->num_parms].empty()) {
+      m[++i] = " ";
+      m[++i] = p[inf->num_parms];
+    }
+    unsigned int size = 0;
+    for (i = 0; m[i].str != 0; ++i)
+      size += m[i].size;
+    char * str = (char *)malloc(size + 1);
+    s0 = str;
+    for (i = 0; m[i].str != 0; str+=m[i].size, ++i)
+      strncpy(str, m[i].str, m[i].size);
+    *str = '\0';
+    Error * e = new Error;
+    e->err = inf;
+    e->mesg = s0;
+    err_ = new ErrPtr(e);
+    
+    return *this;
+  }
+
+  PosibErrBase & PosibErrBase::with_file(ParmString fn, int line_num)
+  {
+    assert(err_ != 0);
+    assert(err_->refcount == 1);
+    char * m = const_cast<char *>(err_->err->mesg);
+    unsigned int orig_len = strlen(m);
+    unsigned int new_len = fn.size() + (line_num ? 10 : 0) + 2 + orig_len + 1;
+    char * s = (char *)malloc(new_len);
+    if (line_num)
+      snprintf(s, new_len, "%s:%d: %s", fn.str(), line_num, m);
+    else
+      snprintf(s, new_len, "%s: %s", fn.str(), m);
+    free(m);
+    const_cast<Error *>(err_->err)->mesg = s;
+    return *this;
+  }
+  
+#ifndef NDEBUG
+  void PosibErrBase::handle_err() const {
+    assert (err_);
+    assert (!err_->handled);
+    fputs(_("Unhandled Error: "), stderr);
+    fputs(err_->err->mesg, stderr);
+    fputs("\n", stderr);
+    abort();
+  }
+#endif
+
+  Error * PosibErrBase::release() {
+    assert (err_);
+    assert (err_->refcount <= 1);
+    --err_->refcount;
+    Error * tmp;
+    if (err_->refcount == 0) {
+      tmp = const_cast<Error *>(err_->err);
+      delete err_;
+    } else {
+      tmp = new Error(*err_->err);
+    }
+    err_ = 0;
+    return tmp;
+  }
+
+  void PosibErrBase::del() {
+    if (!err_) return;
+    delete const_cast<Error *>(err_->err);
+    delete err_;
+  }
+
+}
diff --git a/common/posib_err.hpp b/common/posib_err.hpp
new file mode 100644 (file)
index 0000000..6634624
--- /dev/null
@@ -0,0 +1,249 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef PCOMMON_POSIB_ERR__HPP
+#define PCOMMON_POSIB_ERR__HPP
+
+#include "string.hpp"
+#include "error.hpp"
+
+#include "errors.hpp"
+
+#include "ndebug.hpp"
+
+namespace acommon {
+
+  // PosibErr<type> is a special Error handling device that will make
+  // sure that an error is properly handled.  It is expected to be
+  // used as the return type of the function It will automatically
+  // convert to the "normal" return type however if the normal
+  // returned type is accessed and there is an "unhandled" error
+  // condition it will abort It will also abort if the object is
+  // destroyed with an "unhandled" error condition.  This includes
+  // ignoring the return type of a function returning an error
+  // condition.  An error condition is handled by simply checking for
+  // the presence of an error, calling ignore, or taking ownership of
+  // the error.
+
+  enum WhichErr { PrimErr, SecErr };
+
+  extern "C" const ErrorInfo * const perror_bad_file_format;
+
+  template <typename Ret> class PosibErr;
+  
+  class PosibErrBase {
+  private:
+    struct ErrPtr {
+      const Error * err;
+#ifndef NDEBUG
+      bool handled;
+#endif
+      int refcount;
+      ErrPtr(const Error * e) : err(e), 
+#ifndef NDEBUG
+                                handled(false), 
+#endif
+                                refcount(1) {}
+    };
+    ErrPtr * err_;
+
+  protected:
+
+    void posib_handle_err() const {
+#ifndef NDEBUG
+      if (err_ && !err_->handled)
+       handle_err();
+#endif
+    }
+
+    void copy(const PosibErrBase & other) {
+      err_ = other.err_;
+      if (err_) {
+       ++ err_->refcount;
+      }
+    }
+    void destroy() {
+      if (err_ == 0) return;
+      -- err_->refcount;
+      if (err_->refcount == 0) {
+#ifndef NDEBUG
+       if (!err_->handled)
+         handle_err();
+#endif
+       del();
+      }
+    }
+
+  public:
+    PosibErrBase() 
+      : err_(0) {}
+    PosibErrBase(const PosibErrBase & other) 
+    {
+      copy(other);
+    }
+    PosibErrBase& operator= (const PosibErrBase & other) {
+      destroy();
+      copy(other);
+      return *this;
+    }
+    ~PosibErrBase() {
+      destroy();
+    }
+
+    Error * release_err() {
+      if (err_ == 0)
+       return 0;
+      else
+       return release();
+    }
+    void ignore_err() {
+#ifndef NDEBUG
+      if (err_ != 0)
+       err_->handled = true;
+#endif
+    }
+    const Error * get_err() const {
+      if (err_ == 0) {
+       return 0;
+      } else {
+#ifndef NDEBUG
+       err_->handled = true;
+#endif
+       return err_->err;
+      }
+    }
+    const Error * prvw_err() const {
+      if (err_ == 0)
+       return 0;
+      else
+       return err_->err;
+    }
+    bool has_err() const {
+      return err_ != 0;
+    }
+    bool has_err(const ErrorInfo * e) const {
+      if (err_ == 0) {
+       return false;
+      } else {
+       if (err_->err->is_a(e)) {
+#ifndef NDEBUG
+         err_->handled = true;
+#endif
+         return true;
+       } else {
+         return false;
+       }
+      }
+    }
+    PosibErrBase & prim_err(const ErrorInfo * inf, ParmString p1 = 0,
+                           ParmString p2 = 0, ParmString p3 = 0, 
+                           ParmString p4 = 0)
+    {
+      return set(inf, p1, p2, p3, p4);
+    }
+
+    // This should only be called _after_ set is called
+    PosibErrBase & with_file(ParmString fn, int lineno = 0);
+    
+    PosibErrBase & set(const ErrorInfo *, 
+                      ParmString, ParmString, ParmString, ParmString);
+
+  private:
+
+#ifndef NDEBUG
+    void handle_err() const;
+#endif
+    Error * release();
+    void del();
+  };
+
+  template <>
+  class PosibErr<void> : public PosibErrBase
+  {
+  public:
+    PosibErr(const PosibErrBase & other) 
+      : PosibErrBase(other) {}
+
+    PosibErr() {}
+  };
+
+  template <typename Ret>
+  class PosibErr : public PosibErrBase
+  {
+  public:
+    PosibErr() {}
+
+    PosibErr(const PosibErrBase & other) 
+      : PosibErrBase(other) {}
+
+    template <typename T>
+    PosibErr(const PosibErr<T> & other)
+      : PosibErrBase(other), data(other.data) {}
+
+    PosibErr(const PosibErr<void> & other)
+      : PosibErrBase(other) {}
+
+    PosibErr& operator= (const PosibErr & other) {
+      data = other.data;
+      PosibErrBase::destroy();
+      PosibErrBase::copy(other);
+      return *this;
+    }
+    PosibErr(const Ret & d) : data(d) {}
+    operator const Ret & () const {posib_handle_err(); return data;}
+
+    Ret data;
+  };
+
+//
+//
+//
+#define RET_ON_ERR_SET(command, type, var) \
+  type var;do{PosibErr< type > pe(command);if(pe.has_err())return PosibErrBase(pe);var=pe.data;} while(false)
+#define RET_ON_ERR(command) \
+  do{PosibErrBase pe(command);if(pe.has_err())return PosibErrBase(pe);}while(false)
+
+  
+  //
+  //
+  //
+
+  static inline PosibErrBase make_err(const ErrorInfo * inf, 
+                                     ParmString p1 = 0, ParmString p2 = 0,
+                                     ParmString p3 = 0, ParmString p4 = 0)
+  {
+    return PosibErrBase().prim_err(inf, p1, p2, p3, p4);
+  }
+
+  static const PosibErr<void> no_err;
+
+  //
+  //
+  //
+  inline String & String::operator= (const PosibErr<const char *> & s)
+  {
+    *this = s.data;
+    return *this;
+  }
+
+  inline bool operator== (const PosibErr<String> & x, const char * y)
+  {
+    return x.data == y;
+  }
+  inline bool operator!= (const PosibErr<String> & x, const char * y)
+  {
+    return x.data != y;
+  }
+
+  inline ParmString::ParmString(const PosibErr<const char *> & s)
+    : str_(s.data), size_(UINT_MAX) {}
+
+  inline ParmString::ParmString(const PosibErr<String> & s)
+    : str_(s.data.c_str()), size_(s.data.size()) {}
+
+}
+
+#endif
diff --git a/common/simple_string.hpp b/common/simple_string.hpp
new file mode 100644 (file)
index 0000000..697289b
--- /dev/null
@@ -0,0 +1,65 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_SIMPLE_STRING__HPP
+#define ASPELL_SIMPLE_STRING__HPP
+
+#include <string.h>
+
+#include "parm_string.hpp"
+
+namespace acommon {
+
+  struct SimpleString {
+    const char * str;
+    unsigned int size;
+
+    SimpleString() : str(0), size(0) {}
+    SimpleString(const char * str0) : str(str0), size(strlen(str)) {}
+    SimpleString(const char * str0, unsigned int sz) : str(str0), size(sz) {}
+    SimpleString(ParmString str0) : str(str0), size(str0.size()) {}
+
+    bool empty() const {return size == 0;}
+    operator const char * () const {return str;}
+    operator ParmString () const {return ParmString(str, size);}
+    const char * begin() const {return str;}
+    const char * end() const {return str + size;}
+  };
+
+  static inline bool operator==(SimpleString s1, SimpleString s2)
+  {
+    if (s1.size != s2.size)
+      return false;
+    else
+      return memcmp(s1,s2,s1.size) == 0;
+  }
+  static inline bool operator==(const char * s1, SimpleString s2)
+  {
+    return strcmp(s1,s2) == 0;
+  }
+  static inline bool operator==(SimpleString s1, const char * s2)
+  {
+    return strcmp(s1,s2) == 0;
+  }
+
+  static inline bool operator!=(SimpleString s1, SimpleString s2)
+  {
+    if (s1.size != s2.size)
+      return true;
+    else
+      return memcmp(s1,s2,s1.size) != 0;
+  }
+  static inline bool operator!=(const char * s1, SimpleString s2)
+  {
+    return strcmp(s1,s2) != 0;
+  }
+  static inline bool operator!=(SimpleString s1, const char * s2)
+  {
+    return strcmp(s1,s2) != 0;
+  }
+}
+
+#endif
diff --git a/common/speller.cpp b/common/speller.cpp
new file mode 100644 (file)
index 0000000..e0a9fc8
--- /dev/null
@@ -0,0 +1,18 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "speller.hpp"
+#include "convert.hpp"
+#include "clone_ptr-t.hpp"
+#include "config.hpp"
+
+namespace acommon {
+
+  Speller::Speller(SpellerLtHandle h) : lt_handle_(h) {}
+
+  Speller::~Speller() {}
+}
+
diff --git a/common/speller.hpp b/common/speller.hpp
new file mode 100644 (file)
index 0000000..031299c
--- /dev/null
@@ -0,0 +1,131 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+// Aspell implementation header file.
+// Applications that just use the Aspell library should not include 
+// these files as they are subject to change.
+// Aspell Modules MUST include some of the implementation files and
+// spell checkers MAY include some of these files.
+// If ANY of the implementation files are included you also link with
+// libaspell-impl to protect you from changes in these files.
+
+#ifndef ASPELL_SPELLER__HPP
+#define ASPELL_SPELLER__HPP
+
+#include "can_have_error.hpp"
+#include "copy_ptr.hpp"
+#include "clone_ptr.hpp"
+#include "mutable_string.hpp"
+#include "posib_err.hpp"
+#include "parm_string.hpp"
+#include "char_vector.hpp"
+
+namespace acommon {
+
+  typedef void * SpellerLtHandle;
+
+  class Config;
+  class WordList;
+  class Convert;
+  class Tokenizer;
+  class Filter;
+  class DocumentChecker;
+
+  struct CheckInfo {
+    const CheckInfo * next;
+    ParmString word; // generally the root
+    short pre_strip_len;
+    short pre_add_len;
+    const char * pre_add;
+    short suf_strip_len;
+    short suf_add_len;
+    const char * suf_add;
+    short pre_flag;
+    short suf_flag;
+    short guess;
+    short compound;
+  };
+
+  class Speller : public CanHaveError
+  {
+  private:
+    SpellerLtHandle lt_handle_;
+    Speller(const Speller &);
+    Speller & operator= (const Speller &);
+  public:
+    String temp_str_0;
+    String temp_str_1;
+    ClonePtr<Convert> to_internal_;
+    ClonePtr<Convert> from_internal_;
+  protected:
+    CopyPtr<Config> config_;
+    Speller(SpellerLtHandle h);
+  public:
+    SpellerLtHandle lt_handle() const {return lt_handle_;}
+
+    Config * config() {return config_;}
+    const Config * config() const {return config_;}
+
+    // utility functions
+
+    virtual char * to_lower(char *) = 0;
+
+    // the setup class will take over for config
+    virtual PosibErr<void> setup(Config *) = 0;
+
+    // sets up the tokenizer class
+    // should be called only after this class is setup
+    virtual void setup_tokenizer(Tokenizer *) = 0;
+
+    ////////////////////////////////////////////////////////////////
+    // 
+    // Strings from this point on are expected to be in the 
+    // encoding specified by encoding()
+    //
+
+    virtual PosibErr<bool> check(MutableString) = 0;
+
+    // these functions return information about the last word checked
+    virtual const CheckInfo * check_info() = 0;
+  
+    virtual PosibErr<void> add_to_personal(MutableString) = 0;
+    virtual PosibErr<void> add_to_session (MutableString) = 0;
+    
+    // because the word lists may potently have to convert from one
+    // encoding to another the pointer returned by the enumeration is only
+    // valid to the next call.
+
+    virtual PosibErr<const WordList *> personal_word_list() const = 0;
+    virtual PosibErr<const WordList *> session_word_list () const = 0;
+    virtual PosibErr<const WordList *> main_word_list () const = 0;
+  
+    virtual PosibErr<void> save_all_word_lists() = 0;
+  
+    virtual PosibErr<void> clear_session() = 0;
+
+    virtual PosibErr<const WordList *> suggest(MutableString) = 0;
+    // return null on error
+    // the word list returned by suggest is only valid until the next
+    // call to suggest
+  
+    virtual PosibErr<void> store_replacement(MutableString, 
+                                            MutableString) = 0;
+
+    virtual ~Speller();
+
+  };
+
+
+  // This function is current a hack to reload the filters in the
+  // speller class.  I hope to eventually find a better way.
+  PosibErr<void> reload_filters(Speller * m);
+
+
+  PosibErr<Speller *> new_speller(Config * c);
+
+}
+
+#endif
diff --git a/common/stack_ptr.hpp b/common/stack_ptr.hpp
new file mode 100644 (file)
index 0000000..f7548b9
--- /dev/null
@@ -0,0 +1,54 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef stack_ptr
+#define stack_ptr
+
+#include <assert.h>
+
+namespace acommon {
+  
+  template <typename T>
+  class StackPtr {
+    T * ptr;
+
+    // to avoid operator* being used unexpectedly.  for example 
+    // without this the following will compile
+    //   PosibErr<T> fun(); 
+    //   PosibErr<StackPtr<T > > pe = fun();
+    // and operator* and StackPtr(T *) will be used.  The explicit
+    // doesn't protect us here due to PosibErr
+    StackPtr(const StackPtr & other);
+    // becuase I am paranoid
+    StackPtr & operator=(const StackPtr & other);
+
+  public:
+
+    explicit StackPtr(T * p = 0) : ptr(p) {}
+
+    StackPtr(StackPtr & other) : ptr (other.release()) {}
+
+    ~StackPtr() {del();}
+
+    StackPtr & operator=(StackPtr & other) 
+      {reset(other.release()); return *this;}
+
+    T & operator*  () const {return *ptr;}
+    T * operator-> () const {return ptr;}
+    T * get()         const {return ptr;}
+    operator T * ()   const {return ptr;}
+
+    T * release () {T * p = ptr; ptr = 0; return p;}
+
+    void del() {delete ptr; ptr = 0;}
+    void reset(T * p) {assert(ptr==0); ptr = p;}
+    StackPtr & operator=(T * p) {reset(p); return *this;}
+    
+  };
+}
+
+#endif
+
diff --git a/common/string.cpp b/common/string.cpp
new file mode 100644 (file)
index 0000000..5dffbc8
--- /dev/null
@@ -0,0 +1,86 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#ifndef va_copy
+#  ifdef __va_copy
+#    define va_copy __va_copy
+#  else
+#    define va_copy(dst, src) memcpy(&dst, &src, sizeof(va_list))
+#  endif
+#endif
+
+#include "string.hpp"
+#include "asc_ctype.hpp"
+
+namespace acommon {
+  
+  // reserve space for at least s+1 characters
+  void String::reserve_i(size_t s)
+  {
+    size_t old_size = end_ - begin_;
+    size_t new_size = (storage_end_ - begin_) * 3 / 2;
+    if (new_size < 64) new_size = 64;
+    if (new_size < s + 1) new_size = s + 1;
+    if (old_size == 0) {
+      if (begin_) free(begin_);
+      begin_ = (char *)malloc(new_size);
+    } else {
+      begin_ = (char *)realloc(begin_, new_size);
+    }
+    end_ = begin_ + old_size;
+    storage_end_ = begin_ + new_size;
+  }
+
+  int String::vprintf(const char * format, va_list ap0)
+  {
+    reserve(size() + 64);
+    int res = 0;
+    va_list ap;
+  loop: {
+      int avail = storage_end_ - end_;
+      if (res < 0 && avail > 1024*1024) 
+        return -1; // to avoid an infinite loop in case a neg result
+                   // really means an error and not just "not enough
+                   // space"
+      va_copy(ap,ap0);
+      res = vsnprintf(end_, avail, format, ap);
+      va_end(ap);
+      if (res < 0) {
+        reserve_i(); goto loop;
+      } else if (res > avail) {
+        reserve_i(size() + res); goto loop;
+      }
+    }
+    end_ += res;
+    return res;
+  }
+  
+  bool StringIStream::append_line(String & str, char d)
+  {
+    if (in_str[0] == '\0') return false;
+    const char * end = in_str;
+    while (*end != d && *end != '\0') ++end;
+    str.append(in_str, end - in_str);
+    in_str = end;
+    if (*in_str == d) ++in_str;
+    return true;
+  }
+
+  bool StringIStream::read(void * data, unsigned int size)
+  {
+    char * str = static_cast<char *>(data);
+    while (*in_str != '\0' && size != 0) {
+      *str = *in_str;
+      ++in_str;
+      ++str;
+      ++size;
+    }
+    return size == 0;
+  }
+}
diff --git a/common/string.hpp b/common/string.hpp
new file mode 100644 (file)
index 0000000..9e7f1d5
--- /dev/null
@@ -0,0 +1,498 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_STRING__HPP
+#define ASPELL_STRING__HPP
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <algorithm>
+
+#include "hash_fun.hpp"
+#include "parm_string.hpp"
+#include "mutable_string.hpp"
+#include "ostream.hpp"
+#include "istream.hpp"
+
+//
+// acommon::String is similar to std::string, but without many of the
+// extra non-stl like methods.  The string is guaranteed to be stored
+// in a continues areas of memory but is not guaranteed to be null
+// terminated.  However, space is always allocated for the null
+// characters.  Thus, the c_str() method will never invalided any
+// exiting pointers.  The string is also null terminated when accesed
+// via the str() and mstr() methods.  In addition the method
+// ensure_null_end() will null terminate the string.  Once null
+// terminated the string will remain as such until the length of the
+// string changes.
+//
+
+namespace acommon {
+
+  template <typename Ret> class PosibErr;
+  
+  class String : public OStream
+  {
+  public:
+    typedef const char * const_iterator;
+    typedef char *       iterator;
+    typedef size_t       size_type;
+
+  private:
+    // if begin_ != 0 than storage_end_ - begin_ > 1
+    char * begin_;
+    char * end_;
+    char * storage_end_;
+
+    void assign_only_nonnull(const char * b, unsigned size)
+    {
+      begin_ = (char *)malloc(size + 1);
+      memmove(begin_, b, size);
+      end_   = begin_ + size;
+      storage_end_ = end_ + 1;
+    }
+    void zero() 
+    {
+      begin_ = 0;
+      end_ = 0;
+      storage_end_ = 0;
+    }
+    void assign_only(const char * b)
+    {
+      if (b && *b) assign_only_nonnull(b, strlen(b));
+      else zero();
+    }
+    void assign_only(const char * b, unsigned size) 
+    {
+      if (b && size > 0) assign_only_nonnull(b, size);
+      else zero();
+    }
+    void reserve_i(size_t s = 0);
+  public:
+    void reserve(size_t s) 
+    {
+      if (storage_end_ - begin_ >= (int)s + 1) return;
+      reserve_i(s);
+    }
+
+    char * begin() {return begin_;}
+    char * end() {return end_;}
+
+    const char * begin() const {return begin_;}
+    const char * end()   const {return end_;}
+
+    char * pbegin() {return begin_;}
+    char * pend() {return end_;}
+
+    const char * pbegin() const {return begin_;}
+    const char * pend()   const {return end_;}
+
+    size_t size() const {return end_ - begin_;}
+    bool empty() const {return begin_ == end_;}
+    size_t max_size() const {return INT_MAX;}
+    size_t capacity() const {return storage_end_ ? storage_end_ - begin_ - 1 : 0;}
+
+    void ensure_null_end() const {
+      if (!begin_) const_cast<String *>(this)->reserve_i();
+      *end_ = '\0';
+    }
+
+    const char * c_str() const {
+      if (begin_) {ensure_null_end(); return begin_;}
+      else return "";
+    }
+    const char * str() const {return c_str();}
+    char * mstr() 
+    {
+      if (!begin_) reserve_i();
+      ensure_null_end();
+      return begin_;
+    }
+
+    char * data() {return begin_;}
+    const char * data() const {return begin_;}
+
+    char * data(int pos) {return begin_ + pos;}
+    char * data_end() {return end_;}
+
+    template <typename U>
+    U * datap() { 
+      return reinterpret_cast<U * >(begin_);
+    }
+    template <typename U>
+    U * datap(int pos) {
+      return reinterpret_cast<U * >(begin_ + pos);
+    }
+
+    char & operator[] (size_t pos) {return begin_[pos];}
+    char operator[] (size_t pos) const {return begin_[pos];}
+
+    char & back() {return end_[-1];}
+    char back() const {return end_[-1];}
+
+    void clear() {end_ = begin_;}
+
+    //
+    // constructors
+    //
+
+    String() : begin_(0), end_(0), storage_end_(0) {}
+    String(const char * s) {assign_only(s);}
+    String(const char * s, unsigned size) {assign_only(s, size);}
+    String(ParmStr s) {assign_only(s, s.size());}
+    String(MutableString s) {assign_only(s.str, s.size);}
+    String(const String & other) {assign_only(other.begin_, other.end_-other.begin_);}
+
+    //
+    // assign
+    //
+
+    void assign(const char * b, size_t size)
+    {
+      clear();
+      if (size != 0) {
+        reserve(size);
+        memmove(begin_, b, size);
+        end_   = begin_ + size;
+      } 
+    }
+    void assign(const char * b) 
+    {
+      if (b) assign(b, strlen(b));
+    }
+    String & operator= (const char * s) {
+      assign(s);
+      return *this;
+    }
+    inline String & operator= (const PosibErr<const char *> & s);
+    String & operator= (ParmStr s) {
+      assign(s, s.size());
+      return *this;
+    }
+    String & operator= (MutableString s) {
+      assign(s.str, s.size);
+      return *this;
+    }
+    String & operator= (const String & s) {
+      assign(s.begin_, s.end_ - s.begin_);
+      return *this;
+    }
+    /*inline*/ String & operator= (const PosibErr<String> & s);
+
+    //
+    // append
+    //
+
+    String & append(const void * str, unsigned int sz)
+    {
+      reserve(size() + sz);
+      if (sz > 0) memcpy(end_, str, sz);
+      end_ += sz;
+      return *this;
+    }
+    String & append(const void * d, const void * e)
+    {
+      append(d, (const char *)e - (const char *)d);
+      return *this;
+    }
+    String & append(String & str, unsigned int sz)
+    {
+      append(str.begin_, sz);
+      return *this;
+    }
+    String & append(const char * str)
+    {
+      if (!end_) reserve_i();
+      for (; *str && end_ != storage_end_ - 1; ++str, ++end_)
+        *end_ = *str;
+      if (end_ == storage_end_ - 1) append(str, strlen(str));
+      return *this;
+    }
+    String & append(char c)
+    {
+      reserve(size() + 1);
+      *end_ = c;
+      ++end_;
+      return *this;
+    }
+
+    String & operator+= (const char * s) {
+      append(s);
+      return *this;
+    }
+    String & operator+= (char c) {
+      append(c);
+      return *this;
+    }
+    String & operator+= (ParmStr s) {
+      if (s.have_size())
+        append(s, s.size());
+      else
+        append(s);
+      return *this;
+    }
+    String & operator+= (MutableString s) {
+      append(s.str, s.size);
+      return *this;
+    }
+    String & operator+= (const String & s) {
+      append(s.begin_, s.end_ - s.begin_);
+      return *this;
+    }
+
+    //
+    //
+    //
+
+    ~String() {if (begin_) free(begin_);}
+
+    void swap(String & other) {
+      std::swap(begin_, other.begin_);
+      std::swap(end_, other.end_);
+      std::swap(storage_end_, other.storage_end_);
+    }
+
+    //
+    // 
+    //
+
+    int vprintf(const char * format, va_list ap);
+
+    //
+    //
+    //
+
+    void push_back(char c) {append(c);}
+
+    void pop_back(size_t p = 1) {end_ -= p;}
+
+    char * insert(size_t p, char c)
+    {
+      reserve(size() + 1);
+      char * pos = begin_ + p;
+      size_t to_move = end_ - pos;
+      if (to_move) memmove(pos + 1, pos, to_move);
+      *pos = c;
+      ++end_;
+      return pos;
+    }
+    char * insert(char * pos, char c) 
+    {
+      return insert(pos - begin_, c);
+    }
+    void insert(size_t p, const char * str, size_t sz)
+    {
+      reserve(size() + sz);
+      char * pos = begin_ + p;
+      size_t to_move = end_ - pos;
+      if (to_move) memmove(pos + sz, pos, to_move);
+      memcpy(pos, str, sz);
+      end_ += sz;
+    }
+    void insert(char * pos, const char * f, const char * l) 
+    {
+      insert(pos - begin_, f, l - f);
+    }
+
+    char * erase(char * pos)
+    {
+      size_t to_move = end_ - pos - 1;
+      if (to_move) memmove(pos, pos + 1, to_move);
+      --end_;
+      return pos;
+    }
+    char * erase(char * f, char * l)
+    {
+      if (l >= end_) {
+        end_ = f < end_ ? f : end_;
+      } else {
+        size_t sz = l - f;
+        memmove(f, f + sz, end_ - l);
+        end_ -= sz;
+      }
+      return f;
+    }
+    void erase(size_t pos, size_t s)
+    {
+      erase(begin_ + pos, begin_ + pos + s);
+    }
+
+    //FIXME: Make this more efficent by rewriting the implemenation
+    //       to work with raw memory rather than using vector<char>
+    template <typename Itr>
+    void replace(iterator start, iterator stop, Itr rstart, Itr rstop) 
+    {
+      iterator i = erase(start,stop);
+      insert(i, rstart, rstop);
+    }
+
+    void replace(size_t pos, size_t n, const char * with, size_t s)
+    {
+      replace(begin_ + pos, begin_ + pos + n, with, with + s);
+    }
+    void resize(size_t n)
+    {
+      reserve(n);
+      end_ = begin_ + n;
+    }
+    void resize(size_t n, char c)
+    {
+      size_t old_size = size();
+      reserve(n);
+      end_ = begin_ + n;
+      int diff = n - old_size;
+      if (diff > 0) memset(begin_ + old_size, c, diff);
+    }
+    int alloc(int s) {
+      int pos = size();
+      resize(pos + s);
+      return pos;
+    }
+
+    bool prefix(ParmStr str, size_t offset = 0) const
+    {
+      if (str.size() > size() - offset) return false;
+      return memcmp(begin_ + offset, str.str(), str.size()) == 0;
+    };
+    bool suffix(ParmStr str) const
+    {
+      if (str.size() > size()) return false;
+      return memcmp(end_ - str.size(), str.str(), str.size()) == 0;
+    }
+
+    // FIXME: Eventually remove
+    static const size_t npos = INT_MAX;
+    size_t find(char c, size_t pos = 0) const {
+      char * res = (char *)memchr(begin_ + pos, c, size() - pos);
+      if (res == 0) return npos;
+      else return res - begin_;
+    }
+    size_t rfind(char c) const {
+      for (int i = size() - 1; i >= 0; --i) {
+        if (begin_[i] == c) return i;
+      }
+      return npos;
+    }
+    String substr(size_t pos = 0, size_t n = npos) const
+    {
+      if (n == npos)
+        return String(begin_ + pos, size() - pos);
+      else
+        return String(begin_ + pos, n);
+    }
+    // END FIXME
+
+    unsigned short & at16(unsigned int pos) 
+      {return reinterpret_cast<unsigned short &>(operator[](pos));}
+    unsigned int   & at32(unsigned int pos) 
+      {return reinterpret_cast<unsigned int &>(operator[](pos));}
+
+    void write (char c) {append(c);}
+    void write (ParmStr str) {operator+=(str);}
+    void write (const void * str, unsigned int sz) {append(str,sz);}
+
+
+    String & operator << (ParmStr str) {
+      append(str);
+      return *this;
+    }
+
+    String & operator << (char c) {
+      append(c);
+      return *this;
+    }
+  };
+
+  inline String operator+ (ParmStr lhs, ParmStr rhs)
+  {
+    String tmp;
+    tmp.reserve(lhs.size() + rhs.size());
+    tmp += lhs;
+    tmp += rhs;
+    return tmp;
+  }
+
+  inline bool operator== (const String & x, const String & y)
+  {
+    if (x.size() != y.size()) return false;
+    if (x.size() == 0) return true;
+    return memcmp(x.data(), y.data(), x.size()) == 0;
+  }
+  inline bool operator== (const String & x, const char * y)
+  {
+    return strcmp(x.c_str(), y) == 0;
+  }
+  inline bool operator== (const char * x, const String & y)
+  {
+    return strcmp(x, y.c_str()) == 0;
+  }
+  inline bool operator== (const String & x, ParmStr y)
+  {
+    if (y == 0) return x.size() == 0;
+    return strcmp(x.c_str(), y) == 0;
+  }
+  inline bool operator== (ParmStr x, const String & y)
+  {
+    if (x == 0) return y.size() == 0;
+    return strcmp(x, y.c_str()) == 0;
+  }
+
+  inline bool operator!= (const String & x, const String & y)
+  {
+    return !(x == y);
+  }
+  inline bool operator!= (const String & x, const char * y)
+  {
+    return strcmp(x.c_str(), y) != 0;
+  }
+  inline bool operator!= (const char * x, const String & y)
+  {
+    return strcmp(x, y.c_str()) != 0;
+  }
+  inline bool operator!= (const String & x, ParmStr y)
+  {
+    return !(x == y);
+  }
+  inline bool operator!= (ParmStr x, const String & y)
+  {
+    return !(x == y);
+  }
+
+  inline ParmString::ParmString(const String & s) : str_(s.c_str()), size_(s.size()) {}
+
+  class StringIStream : public IStream {
+    const char * in_str;
+    char         delem;
+  public:
+    StringIStream(ParmStr s, char d = ';')
+      : IStream(d), in_str(s) {}
+    bool append_line(String & str, char c);
+    bool read(void * data, unsigned int size);
+  };
+
+  template <> struct hash<String> : public HashString<String> {};
+
+  inline bool IStream::getline(String & str, char c) 
+  {
+    str.clear(); 
+    return append_line(str,c);
+  }
+
+  inline bool IStream::getline(String & str) 
+  {
+    str.clear(); 
+    return append_line(str,delem);
+  }
+
+}
+
+namespace std
+{
+  template<> inline void swap(acommon::String & x, acommon::String & y) {return x.swap(y);}
+}
+
+#endif
diff --git a/common/string_enumeration.hpp b/common/string_enumeration.hpp
new file mode 100644 (file)
index 0000000..409086d
--- /dev/null
@@ -0,0 +1,39 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_STRING_ENUMERATION__HPP
+#define ASPELL_STRING_ENUMERATION__HPP
+
+#include "parm_string.hpp"
+#include "type_id.hpp"
+#include "char_vector.hpp"
+
+namespace acommon {
+
+  class StringEnumeration;
+  class Convert;
+
+  class StringEnumeration {
+  public:
+    typedef const char * Value;
+    virtual bool at_end() const = 0;
+    virtual const char * next() = 0;
+    int ref_count_;
+    TypeId type_id_;
+    unsigned int type_id() { return type_id_.num; }
+    int copyable_;
+    int copyable() { return copyable_; }
+    virtual StringEnumeration * clone() const = 0;
+    virtual void assign(const StringEnumeration * other) = 0;
+    CharVector temp_str;
+    Convert * from_internal_;
+    StringEnumeration() : ref_count_(0), copyable_(2), from_internal_(0) {}
+    virtual ~StringEnumeration() {}
+  };
+
+}
+
+#endif /* ASPELL_STRING_ENUMERATION__HPP */
diff --git a/common/string_list.cpp b/common/string_list.cpp
new file mode 100644 (file)
index 0000000..6a2bd9f
--- /dev/null
@@ -0,0 +1,120 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "string_list.hpp"
+//#include "iostream.hpp"
+
+namespace acommon {
+
+  void StringList::copy(const StringList & other)
+  {
+    StringListNode * * cur = &first;
+    StringListNode * other_cur = other.first;
+    while (other_cur != 0) {
+      *cur = new StringListNode(other_cur->data.c_str());
+      cur = &(*cur)->next;
+      other_cur = other_cur->next;
+    }
+    *cur = 0;
+  }
+
+  void StringList::destroy()
+  {
+    while (first != 0) {
+      StringListNode * next = first->next;
+      delete first;
+      first = next;
+    }
+  }
+
+  bool operator==(const StringList & rhs, 
+                 const StringList & lhs)
+  {
+    StringListNode * rhs_cur = rhs.first;
+    StringListNode * lhs_cur = lhs.first;
+    while (rhs_cur != 0 && lhs_cur != 0 && rhs_cur->data == lhs_cur->data) {
+      rhs_cur = rhs_cur->next;
+      lhs_cur = lhs_cur->next;
+    }
+    return rhs_cur == 0 && lhs_cur == 0;
+  }
+
+  StringEnumeration * StringListEnumeration::clone() const
+  {
+    return new StringListEnumeration(*this);
+  }
+
+  void StringListEnumeration::assign(const StringEnumeration * other)
+  {
+    *this = *(const StringListEnumeration *)other;
+  }
+
+
+  StringList * StringList::clone() const
+  {
+    return new StringList(*this);
+  }
+
+  void StringList::assign(const StringList * other)
+  {
+    *this = *(const StringList *)other;
+  }
+
+  PosibErr<bool> StringList::add(ParmStr str)
+  {
+    //CERR.printf("ADD %s\n", str.str());
+    StringListNode * * cur = &first;
+    while (*cur != 0 && strcmp((*cur)->data.c_str(), str) != 0) {
+      cur = &(*cur)->next;
+    }
+    if (*cur == 0) {
+      *cur = new StringListNode(str);
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  PosibErr<bool> StringList::remove(ParmStr str)
+  {
+    //CERR.printf("REM %s\n", str.str());
+    StringListNode  * * cur  = &first;
+    while (*cur != 0 && strcmp((*cur)->data.c_str(), str)!=0 )  {
+      cur = &(*cur)->next;
+    }
+    if (*cur == 0) {
+      return false;
+    } else {
+      StringListNode * tmp = *cur;
+      *cur = (*cur)->next;
+      delete tmp;
+      return true;
+    }
+  }
+
+  PosibErr<void> StringList::clear()
+  {
+    //CERR.printf("CLEAR\n");
+    StringListNode * temp;
+    while (first != 0) {
+      temp = first;
+      first = temp->next;
+      delete temp;
+    }
+    first = 0;
+    return no_err;
+  }
+
+  StringEnumeration * StringList::elements() const
+  {
+    return new StringListEnumeration(first);
+  }
+
+  StringList * new_string_list() {
+    return new StringList;
+  }
+
+}
diff --git a/common/string_list.hpp b/common/string_list.hpp
new file mode 100644 (file)
index 0000000..c4d60bc
--- /dev/null
@@ -0,0 +1,100 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+#ifndef STRING_LIST_HP_HEADER
+#define STRING_LIST_HP_HEADER
+
+#include "string.hpp"
+#include "string_enumeration.hpp"
+#include "mutable_container.hpp"
+#include "posib_err.hpp"
+#include <stdio.h>
+#include <cstdio>
+
+namespace acommon {
+
+  struct StringListNode {
+    // private data structure
+    // default copy & destructor unsafe
+    String           data;
+    StringListNode * next;
+    StringListNode(ParmStr str,  StringListNode * n = 0)
+      : data(str), next(n) {
+    }
+  };
+
+  class StringListEnumeration : public StringEnumeration {
+    // default copy and destructor safe
+  private:
+    StringListNode * n_;
+  public:
+    StringEnumeration * clone() const;
+    void assign(const StringEnumeration *);
+
+    StringListEnumeration(StringListNode * n) : n_(n) {}
+    const char * next() {
+      const char * temp;
+      if (n_ == 0) {
+       temp = 0;
+      } else {
+       temp = n_->data.c_str();
+       n_ = n_->next;
+      }
+      return temp;
+    }
+    bool at_end() const {
+      return n_ == 0;
+    }
+  };
+
+
+  class StringList : public MutableContainer {
+    // copy and destructor provided
+  private:
+    StringListNode * first;
+
+    StringListNode * * find (ParmStr str);
+    void copy(const StringList &);
+    void destroy();
+  public:
+    friend bool operator==(const StringList &, const StringList &);
+    StringList() : first(0) {}
+    StringList(const StringList & other) 
+    {
+      copy(other);
+    }
+    StringList & operator= (const StringList & other)
+    {
+      destroy();
+      copy(other);
+      return *this;
+    }
+    virtual ~StringList() 
+    {
+      destroy();
+    }
+
+    StringList * clone() const;
+    void assign(const StringList *);
+
+    PosibErr<bool> add(ParmStr);
+    PosibErr<bool> remove(ParmStr);
+    PosibErr<void> clear();
+
+    StringEnumeration * elements() const;
+    StringListEnumeration elements_obj() const 
+    {
+      return StringListEnumeration(first);
+    }
+
+    bool empty() const { return first == 0; }
+    unsigned int size() const { abort(); return 0; }
+
+  };
+
+  StringList * new_string_list();
+
+}
+#endif
diff --git a/common/string_map.cpp b/common/string_map.cpp
new file mode 100644 (file)
index 0000000..121ddea
--- /dev/null
@@ -0,0 +1,89 @@
+#include <string.h>
+#include <assert.h>
+
+#include "parm_string.hpp"
+#include "string_map.hpp"
+#include "string_pair.hpp"
+#include "string_pair_enumeration.hpp"
+
+#include "hash-t.hpp"
+
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+namespace acommon {
+
+  // needed for darwin
+  template HashTable<StringMap::Parms>::iterator 
+           HashTable<StringMap::Parms>::find_i(char const* const&, bool&);
+  template std::pair<HashTable<StringMap::Parms>::iterator,bool>
+           HashTable<StringMap::Parms>::insert(const StringPair &);
+  template void HashTable<StringMap::Parms>::init(unsigned int);
+  template void HashTable<StringMap::Parms>::del(void);
+  template HashTable<StringMap::Parms>::size_type
+           HashTable<StringMap::Parms>::erase(char const* const&);
+  template void BlockSList<StringPair>::clear(void);
+
+  void StringMap::copy(const StringMap & other)
+  {
+    lookup_ = other.lookup_;
+    for (Iter_ i = lookup_.begin(); 
+         !(i == lookup_.end());  // i != lookup_.end() causes problems
+                                 // with gcc-2.95
+         ++i)
+    {
+      i->first = buffer_.dup(i->first);
+      i->second = buffer_.dup(i->second);
+    }
+  }
+  
+
+  class StringMapEnumeration : public StringPairEnumeration {
+    StringMap::CIter_ i;
+    StringMap::CIter_ end;
+  public:
+    StringMapEnumeration(StringMap::CIter_ i0, StringMap::CIter_ e0)
+      : i(i0), end(e0) {}
+    StringPairEnumeration * clone() const;
+    void assign(const StringPairEnumeration *);
+    bool at_end() const;
+    StringPair next();
+  };
+
+  StringPairEnumeration * StringMapEnumeration::clone() const {
+    return new StringMapEnumeration(*this);
+  }
+
+  void 
+  StringMapEnumeration::assign
+  (const StringPairEnumeration * other)
+  {
+    *this = *(const StringMapEnumeration *)(other);
+  }
+
+  bool StringMapEnumeration::at_end() const {
+    return i == end;
+  }
+
+  StringPair StringMapEnumeration::next() {
+    StringPair temp;
+    if (i == end)
+      return temp;
+    temp = *i;
+    ++i;
+    return temp;
+  }
+
+  StringPairEnumeration * StringMap::elements() const {
+    return new StringMapEnumeration(lookup_.begin(), lookup_.end());
+  }
+
+  StringMap * new_string_map() 
+  {
+    return new StringMap();
+  }
+}
+
diff --git a/common/string_map.hpp b/common/string_map.hpp
new file mode 100644 (file)
index 0000000..b549b21
--- /dev/null
@@ -0,0 +1,125 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_STRING_MAP__HPP
+#define ASPELL_STRING_MAP__HPP
+
+#include "mutable_container.hpp"
+#include "parm_string.hpp"
+#include "posib_err.hpp"
+#include "string_pair.hpp"
+#include "hash.hpp"
+#include "objstack.hpp"
+
+
+namespace acommon {
+
+class StringPairEnumeration;
+
+using std::pair;
+  
+class StringMap : public MutableContainer {
+public: // but don't use
+  struct Parms {
+    typedef StringPair Value;
+    typedef const char * Key;
+    const char * key(const Value & v) {return v.first;}
+    static const bool is_multi = false;
+    acommon::hash<const char *>  hash;
+    bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;}
+  };
+  typedef StringPair Value_;
+  typedef HashTable<Parms> Lookup;
+  typedef Lookup::iterator Iter_;
+  typedef Lookup::const_iterator CIter_;
+private:
+  HashTable<Parms> lookup_;
+  ObjStack buffer_;
+  const char empty_str[1];
+
+  void copy(const StringMap & other);
+  
+  // copy and destructor provided
+public:
+  PosibErr<void> clear() {lookup_.clear(); buffer_.reset(); return no_err;}
+  
+  StringMap() : empty_str() {}
+  StringMap(const StringMap & other) : empty_str() {copy(other);}
+  StringMap & operator= (const StringMap & o) {clear(); copy(o); return *this;}
+  ~StringMap() {}
+  
+  StringMap * clone() const {
+    return new StringMap(*this);
+  }
+  void assign(const StringMap * other) {
+    *this = *(const StringMap *)(other);
+  }
+  
+  StringPairEnumeration * elements() const;
+  
+  // insert a new element.   Will NOT overwrite an existing entry.
+  // returns false if the element already exists.
+  bool insert(ParmStr key, ParmStr value) {
+    pair<Iter_,bool> res = lookup_.insert(Value_(key,0));
+    if (res.second) {
+      res.first->first  = buffer_.dup(key);
+      res.first->second = buffer_.dup(value);
+      return true;
+    } else {
+      return false;
+    }
+  }
+  PosibErr<bool> add(ParmStr key) {
+    pair<Iter_,bool> res = lookup_.insert(Value_(key,0));
+    if (res.second) {
+      res.first->first  = buffer_.dup(key);
+      res.first->second = empty_str;
+      return true;
+    } else {
+      return false;
+    }
+  }
+  // insert a new element. WILL overwrite an exitsing entry
+  // always returns true
+  bool replace(ParmStr key, ParmStr value) {
+    pair<Iter_,bool> res = lookup_.insert(Value_(key,0));
+    if (res.second) {
+      res.first->first  = buffer_.dup(key);
+      res.first->second = buffer_.dup(value);
+    } else {
+      res.first->second = buffer_.dup(value);
+    }
+    return true;
+  }
+  
+  // removes an element.  Returns true if the element existed.
+  PosibErr<bool> remove(ParmStr key) {return lookup_.erase(key);}
+  
+  // looks up an element.  Returns null if the element did not exist.
+  // returns an empty string if the element exists but has a null value
+  // otherwise returns the value
+  const char * lookup(ParmStr key) const 
+  {
+    CIter_ i = lookup_.find(key);
+    if (i == lookup_.end())
+      return 0;
+    else
+      return i->second;
+  }  
+  
+  bool have(ParmStr key) const {return lookup(key) != 0;}
+  
+  unsigned int size() const {return lookup_.size();}
+  bool empty() const {return lookup_.empty();}
+
+};
+
+StringMap * new_string_map();
+
+
+}
+
+#endif /* ASPELL_STRING_MAP__HPP */
diff --git a/common/string_pair.hpp b/common/string_pair.hpp
new file mode 100644 (file)
index 0000000..28d5e75
--- /dev/null
@@ -0,0 +1,25 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_STRING_PAIR__HPP
+#define ASPELL_STRING_PAIR__HPP
+
+
+namespace acommon {
+
+
+struct StringPair {
+  const char * first;
+  const char * second;
+  StringPair(const char * f, const char * s)
+    : first(f), second(s) {}
+  StringPair() : first(""), second("") {}
+};
+
+
+}
+
+#endif /* ASPELL_STRING_PAIR__HPP */
diff --git a/common/string_pair_enumeration.hpp b/common/string_pair_enumeration.hpp
new file mode 100644 (file)
index 0000000..3b96f3c
--- /dev/null
@@ -0,0 +1,31 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_STRING_PAIR_ENUMERATION__HPP
+#define ASPELL_STRING_PAIR_ENUMERATION__HPP
+
+#include "string_pair.hpp"
+
+namespace acommon {
+
+class StringPairEnumeration;
+
+class StringPairEnumeration {
+ public:
+  virtual bool at_end() const = 0;
+  virtual StringPair next() = 0;
+  virtual StringPairEnumeration * clone() const = 0;
+  virtual void assign(const StringPairEnumeration * other) = 0;
+  StringPairEnumeration() {}
+  virtual ~StringPairEnumeration() {}
+};
+
+
+}
+
+#endif /* ASPELL_STRING_PAIR_ENUMERATION__HPP */
diff --git a/common/strtonum.cpp b/common/strtonum.cpp
new file mode 100644 (file)
index 0000000..0a55912
--- /dev/null
@@ -0,0 +1,95 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Melvin Hadasht and Kevin Atkinson under the
+// GNU LGPL license version 2.0 or 2.1.  You should have received a
+// copy of the LGPL license along with this library if you did not you
+// can find it at http://www.gnu.org/.
+
+#include <stdlib.h>
+
+#include "strtonum.hpp"
+#include "asc_ctype.hpp"
+
+namespace acommon {
+
+  static double strtodbl_c(const char * nptr, const char ** endptr)
+  {
+    double x = 0.0;
+    double y = 0.0;
+    double decimal = 1.0;
+    int negative = 0;
+    const char * str = nptr;
+
+    while (asc_isspace(*str))
+      str++;
+    if (!*str)
+      goto END_STRTODBL_C;
+    if (*str == '-') {
+      negative = 1;
+      str++;
+    } else if (*str == '+')
+      str++;
+    if (!*str)
+      goto END_STRTODBL_C;
+    while (*str >= '0' && *str <= '9') {
+      x = x * 10.0 + (*str - '0');
+      str++;
+    }
+    if (!*str || *str != '.')
+      goto END_STRTODBL_C;
+    str++;  
+    decimal = 1.0;
+    while (*str >= '0' && *str <= '9') {
+      decimal *= 0.1;
+      y = y + (*str - '0')*decimal;
+      str++;
+    }
+  END_STRTODBL_C:
+    if (endptr)
+      *endptr = (char *) str;
+    return negative ? -(x + y) : (x + y);
+  }
+
+  double strtod_c(const char * nptr, const char ** endptr)
+  {
+    double x;
+    const char * eptr;
+    x = strtodbl_c(nptr, &eptr);
+    if (*eptr == 'E' || *eptr == 'e') {
+      const char *nptr2 = eptr;
+      long int y, i;
+      double e = 1.0;
+      nptr2++;
+      y = strtol(nptr2, (char **)&eptr, 10);
+      if (y) {
+        for (i=0; i < ( y < 0 ? -y : y); i++)
+          e *= 10.0;
+        x =  (y < 0) ? x / e : x * e;
+      }
+    }
+    if (endptr)
+      *endptr = eptr;
+    return x;
+  }
+
+  long strtoi_c(const char * npter, const char ** endptr) {
+
+    char * str = (char*)npter;
+    long num = 0;
+    long sign = 1;
+    *endptr = str;
+    while (asc_isspace(*str)) {
+      str++;
+    }
+    if (*str == '-' || *str == '+') {
+      sign = *(str++) == '-' ? -1 : 1;
+    }
+    while (*str >= '0' && *str <= '9' ) {
+      num = num * 10 + (long)(*str - '0');
+      str++;
+    }
+    *endptr = str;
+    return num;
+  }
+}
+
diff --git a/common/strtonum.hpp b/common/strtonum.hpp
new file mode 100644 (file)
index 0000000..5eaa287
--- /dev/null
@@ -0,0 +1,19 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Melvin Hadasht and Kevin Atkinson under the
+// GNU LGPL license version 2.0 or 2.1.  You should have received a
+// copy of the LGPL license along with this library if you did not you
+// can find it at http://www.gnu.org/.
+
+#ifndef ASPELL_STRTONUM__HPP
+#define ASPELL_STRTONUM__HPP
+
+namespace acommon {
+   
+  // Local independent numeric conversion.  It is OK if
+  //   nptr == *endptr
+  double strtod_c(const char * nptr, const char ** endptr);
+  long strtoi_c(const char * npter, const char ** endptr);
+
+}
+
+#endif
diff --git a/common/tokenizer.cpp b/common/tokenizer.cpp
new file mode 100644 (file)
index 0000000..2df2eb3
--- /dev/null
@@ -0,0 +1,31 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "tokenizer.hpp"
+#include "convert.hpp"
+
+namespace acommon
+{
+
+  Tokenizer::Tokenizer() 
+    : word_begin(0), word_end(0), end(0), 
+      begin_pos(0), end_pos(0),
+      conv_(0) 
+  {}
+
+  Tokenizer::~Tokenizer()
+  {}
+
+  void Tokenizer::reset (FilterChar * begin, FilterChar * end) 
+  {
+    bool can_encode = conv_->encode(begin, end, buf_);
+    assert(can_encode);
+    end_pos = 0;
+    word_end = begin;
+    end = end;
+  }
+
+}
diff --git a/common/tokenizer.hpp b/common/tokenizer.hpp
new file mode 100644 (file)
index 0000000..e62d1b3
--- /dev/null
@@ -0,0 +1,72 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ACOMMON_TOKENIZER__HPP
+#define ACOMMON_TOKENIZER__HPP
+
+#include "char_vector.hpp"
+#include "filter_char.hpp"
+#include "filter_char_vector.hpp"
+
+namespace acommon {
+
+  class Convert;
+  class Speller;
+  class Config;
+
+  class Tokenizer {
+
+  public:
+    Tokenizer();
+    virtual ~Tokenizer();
+
+    FilterChar * word_begin;
+    FilterChar * word_end;
+    FilterChar * end;
+    
+    CharVector word; // this word is in the final encoded form
+    unsigned int begin_pos; // pointers back to the original word
+    unsigned int end_pos;
+    
+    // The string passed in _must_ have a null character
+    // at stop - 1. (ie stop must be one past the end)
+    void reset (FilterChar * in, FilterChar * stop);
+    bool at_end() const {return word_begin == word_end;}
+    
+    virtual bool advance() = 0; // returns false if there is nothing left
+
+    bool is_begin(unsigned char c) const
+      {return char_type_[c].begin;}
+    bool is_middle(unsigned char c) const
+      {return char_type_[c].middle;}
+    bool is_end(unsigned char c) const
+      {return char_type_[c].end;}
+    bool is_word(unsigned char c) const
+      {return char_type_[c].word;}
+
+  public: // but don't use
+    // The speller class is expected to fill these members in
+    struct CharType {
+      bool begin;
+      bool middle;
+      bool end;
+      bool word;
+      CharType() : begin(false), middle(false), end(false), word(false) {}
+    };
+    
+    CharType char_type_[256];
+    Convert * conv_;
+    FilterCharVector buf_;
+  };
+
+  // returns a new tokenizer and sets it up with the given speller
+  // class
+
+  PosibErr<Tokenizer *> new_tokenizer(Speller *);
+
+}
+
+#endif
diff --git a/common/type_id.hpp b/common/type_id.hpp
new file mode 100644 (file)
index 0000000..eb74baf
--- /dev/null
@@ -0,0 +1,27 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_TYPE_ID__HPP
+#define ASPELL_TYPE_ID__HPP
+
+#include "parm_string.hpp"
+
+namespace acommon {
+
+
+union TypeId {
+  unsigned int num;
+  char str[4];
+  TypeId(ParmString str);
+  TypeId() : num(0) {}
+};
+
+
+}
+
+#endif /* ASPELL_TYPE_ID__HPP */
diff --git a/common/vararray.hpp b/common/vararray.hpp
new file mode 100644 (file)
index 0000000..184fe6c
--- /dev/null
@@ -0,0 +1,54 @@
+
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_VARARRAY__HPP
+#define ASPELL_VARARRAY__HPP
+
+#ifndef __GNUC__
+#  include <stdlib.h>
+#endif
+
+namespace acommon {
+
+// only use this on types with a trivial constructors destructor
+
+#ifdef __GNUC__ // use variable arrays
+
+#define VARARRAY(type, name, num) type name[num]
+#define VARARRAYM(type, name, num, max) type name[num]
+
+#else // use malloc
+
+  struct MallocPtr {
+    void * ptr; 
+    MallocPtr() : ptr(0) {}; 
+    ~MallocPtr() {if (ptr) free(ptr);}
+  };
+
+#define VARARRAY(type, name, num) \
+  acommon::MallocPtr name##_data;             \
+  name##_data.ptr = malloc(sizeof(type) * (num)); \
+  type * name = (type *)name##_data.ptr
+
+#define VARARRAYM(type, name, num, max) type name[max]
+
+#endif
+
+#if 0 // this version uses alloca
+
+#define VARARRAY(type, name, num) \
+  type * name = (type *)alloca(sizeof(type) * (num))
+
+#define VARARRAYM(type, name, num, max) \
+  type * name = (type *)alloca(sizeof(type) * (num))
+
+#endif
+
+}
+
+#endif
+
diff --git a/common/vector.hpp b/common/vector.hpp
new file mode 100644 (file)
index 0000000..782e4b0
--- /dev/null
@@ -0,0 +1,61 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001-2003 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef ASPELL_VECTOR__HPP
+#define ASPELL_VECTOR__HPP
+
+#include <vector>
+
+namespace acommon
+{
+  template <typename T>
+  class Vector : public std::vector<T>
+  {
+  public:
+
+    Vector() {}
+    Vector(unsigned int s) : std::vector<T>(s) {}
+    Vector(unsigned int s, const T & val) : std::vector<T>(s, val) {}
+
+    void append(T t) {
+      this->push_back(t);
+    }
+    void append(const T * begin, unsigned int size) {
+      this->insert(this->end(), begin, begin+size);
+    }
+    void append(const T * begin, const T * end) {
+      this->insert(this->end(), begin, end);
+    }
+    int alloc(int s) {
+      int pos = this->size();
+      this->resize(pos + s);
+      return pos;
+    }
+    T * data() {return &*this->begin();}
+    T * data(int pos) {return &*this->begin() + pos;}
+    T * data_end() {return &this->back()+1;}
+
+    T * pbegin() {return &*this->begin();}
+    T * pend()   {return &this->back()+1;}
+
+    const T * pbegin() const {return &*this->begin();}
+    const T * pend()   const {return &this->back()+1;}
+
+    template <typename U>
+    U * datap() { 
+      return reinterpret_cast<U * >(&this->front());
+    }
+    template <typename U>
+    U * datap(int pos) {
+      return reinterpret_cast<U * >(&this->front() + pos);
+    }
+
+    void pop_front() {this->erase(this->begin());}
+    void push_front(const T & v) {this->insert(this->begin(), v);}
+  };
+}
+
+#endif
diff --git a/common/word_list.hpp b/common/word_list.hpp
new file mode 100644 (file)
index 0000000..5762af8
--- /dev/null
@@ -0,0 +1,30 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_WORD_LIST__HPP
+#define ASPELL_WORD_LIST__HPP
+
+
+namespace acommon {
+
+class StringEnumeration;
+
+class WordList {
+ public:
+  class Convert * from_internal_;
+  virtual bool empty() const = 0;
+  virtual unsigned int size() const = 0;
+  virtual StringEnumeration * elements() const = 0;
+  WordList() : from_internal_(0) {}
+  virtual ~WordList() {}
+};
+
+
+}
+
+#endif /* ASPELL_WORD_LIST__HPP */
diff --git a/compile b/compile
new file mode 100755 (executable)
index 0000000..5360806
--- /dev/null
+++ b/compile
@@ -0,0 +1,144 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2009-10-06.20; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as `compile cc -o foo foo.c'.
+       # So we strip `-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..dc84c68
--- /dev/null
@@ -0,0 +1,1501 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.rpath b/config.rpath
new file mode 100755 (executable)
index 0000000..c492a93
--- /dev/null
@@ -0,0 +1,614 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2006 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux*)
+      case $cc_basename in
+        icc* | ecc*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix3*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      hardcode_direct=yes
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      else
+        case "$host_os" in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+        esac
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    ;;
+  aix4* | aix5*)
+    ;;
+  amigaos*)
+    ;;
+  beos*)
+    ;;
+  bsdi[45]*)
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    ;;
+  dgux*)
+    ;;
+  freebsd1*)
+    ;;
+  kfreebsd*-gnu)
+    ;;
+  freebsd* | dragonfly*)
+    ;;
+  gnu*)
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    ;;
+  interix3*)
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux*)
+    ;;
+  knetbsd*-gnu)
+    ;;
+  netbsd*)
+    ;;
+  newsos6)
+    ;;
+  nto-qnx*)
+    ;;
+  openbsd*)
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    ;;
+  osf3* | osf4* | osf5*)
+    ;;
+  solaris*)
+    ;;
+  sunos4*)
+    ;;
+  sysv4 | sysv4.3*)
+    ;;
+  sysv4*MP*)
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    ;;
+  uts4*)
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..2a55a50
--- /dev/null
@@ -0,0 +1,1705 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray | -microblaze)
+               os=
+               basic_machine=$1
+               ;;
+        -bluegene*)
+               os=-cnk
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | tron-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+        microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+        -auroraux)
+               os=-auroraux
+               ;;
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..b0ae1e9
--- /dev/null
+++ b/configure
@@ -0,0 +1,21724 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for GNU Aspell 0.60.6.1.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&    (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+        /*)
+          for as_base in sh bash ksh sh5; do
+            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+          done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+        # Try only shells that exist, to save several forks.
+        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+               { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+              as_have_required=yes
+              if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='GNU Aspell'
+PACKAGE_TARNAME='aspell'
+PACKAGE_VERSION='0.60.6.1'
+PACKAGE_STRING='GNU Aspell 0.60.6.1'
+PACKAGE_BUGREPORT=''
+
+ac_unique_file="prog/aspell.cpp"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+gt_needs=
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+am__isrc
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+MAINTAINER_MODE_TRUE
+MAINTAINER_MODE_FALSE
+MAINT
+pkgdocdir
+pkgdatadir
+pkglibdir
+CXX
+CXXFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CXX
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CXXDEPMODE
+am__fastdepCXX_TRUE
+am__fastdepCXX_FALSE
+CC
+CFLAGS
+ac_ct_CC
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+LIBTOOL
+SED
+GREP
+EGREP
+FGREP
+LD
+DUMPBIN
+ac_ct_DUMPBIN
+NM
+LN_S
+AR
+RANLIB
+lt_ECHO
+DSYMUTIL
+NMEDIT
+CPP
+CXXCPP
+PERLPROG
+COMPILE_IN_FILTERS_TRUE
+COMPILE_IN_FILTERS_FALSE
+PSPELL_COMPATIBILITY_TRUE
+PSPELL_COMPATIBILITY_FALSE
+INCREMENTED_SONAME_TRUE
+INCREMENTED_SONAME_FALSE
+USE_NLS
+MSGFMT
+GMSGFMT
+MSGFMT_015
+GMSGFMT_015
+XGETTEXT
+XGETTEXT_015
+MSGMERGE
+INTL_MACOSX_LIBS
+LIBICONV
+LTLIBICONV
+INTLLIBS
+LIBINTL
+LTLIBINTL
+POSUB
+PTHREAD_LIB
+CURSES_LIB
+CURSES_INCLUDE
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CPP
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$0" : 'X\(//\)[^/]' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures GNU Aspell 0.60.6.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/aspell]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of GNU Aspell 0.60.6.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer
+  --enable-docdir=DIR     documentation files in DIR [PREFIX/share/doc/aspell]
+  --enable-pkgdatadir=DIR device dependent data files [LIBDIR/aspell-0.60]
+  --enable-data-dir=DIR   alias for pkgdatadir
+  --enable-pkglibdir=DIR  device dependent data files [LIBDIR/aspell-0.60]
+  --enable-dict-dir=DIR   alias for pkglibdir
+  --enable-win32-relocatable
+  --enable-curses=LIBFILE cursor control library
+  --enable-curses-include=DIR
+  --disable-wide-curses   disable wide char utf8 cursor control
+  --disable-regex
+  --enable-compile-in-filters
+  --disable-filter-version-control
+  --disable-pspell-compatibility
+                          don't install pspell compatibility libraries
+  --enable-incremented-soname
+                          break aspell 0.50 binary compatibility
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-static[=PKGS]  build static libraries [default=no]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-nls           do not use Native Language Support
+  --disable-rpath         do not hardcode runtime library paths
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+  CXXCPP      C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+GNU Aspell configure 0.60.6.1
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU Aspell $as_me 0.60.6.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+gt_needs="$gt_needs "
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+       ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+am__api_version='1.10'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+           break 3
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='aspell'
+ VERSION='0.60.6.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+ac_config_headers="$ac_config_headers gen/settings.h"
+
+
+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# Check whether --enable-docdir was given.
+if test "${enable_docdir+set}" = set; then
+  enableval=$enable_docdir; pkgdocdir=$enable_docdir
+else
+  pkgdocdir=\${prefix}/share/doc/aspell
+fi
+
+
+
+
+pkgdatadir=undef
+# Check whether --enable-pkgdatadir was given.
+if test "${enable_pkgdatadir+set}" = set; then
+  enableval=$enable_pkgdatadir; pkgdatadir=$enable_pkgdatadir
+fi
+
+
+# Check whether --enable-pkgdata-dir was given.
+if test "${enable_pkgdata_dir+set}" = set; then
+  enableval=$enable_pkgdata_dir; pkgdatadir=$enable_dict_dir
+fi
+
+
+if test "$pkgdatadir" = "undef"
+then
+  pkgdatadir=\${libdir}/aspell-0.60
+fi
+
+
+
+
+pkglibdir=undef
+# Check whether --enable-pkglibdir was given.
+if test "${enable_pkglibdir+set}" = set; then
+  enableval=$enable_pkglibdir; pkglibdir=$enable_pkglibdir
+fi
+
+
+# Check whether --enable-dict-dir was given.
+if test "${enable_dict_dir+set}" = set; then
+  enableval=$enable_dict_dir; pkglibdir=$enable_dict_dir
+fi
+
+
+if test "$pkglibdir" = "undef"
+then
+  pkglibdir=\${libdir}/aspell-0.60
+fi
+
+
+
+
+# Check whether --enable-win32-relocatable was given.
+if test "${enable_win32_relocatable+set}" = set; then
+  enableval=$enable_win32_relocatable;
+fi
+
+
+# Check whether --enable-curses was given.
+if test "${enable_curses+set}" = set; then
+  enableval=$enable_curses;
+fi
+
+
+# Check whether --enable-curses-include was given.
+if test "${enable_curses_include+set}" = set; then
+  enableval=$enable_curses_include;
+fi
+
+
+# Check whether --enable-wide-curses was given.
+if test "${enable_wide_curses+set}" = set; then
+  enableval=$enable_wide_curses;
+fi
+
+
+# Check whether --enable-regex was given.
+if test "${enable_regex+set}" = set; then
+  enableval=$enable_regex;
+fi
+
+
+# Check whether --enable-compile-in-filters was given.
+if test "${enable_compile_in_filters+set}" = set; then
+  enableval=$enable_compile_in_filters;
+fi
+
+
+# Check whether --enable-filter-version-control was given.
+if test "${enable_filter_version_control+set}" = set; then
+  enableval=$enable_filter_version_control;
+fi
+
+
+# Check whether --enable-pspell-compatibility was given.
+if test "${enable_pspell_compatibility+set}" = set; then
+  enableval=$enable_pspell_compatibility;
+fi
+
+
+# Check whether --enable-incremented-soname was given.
+if test "${enable_incremented_soname+set}" = set; then
+  enableval=$enable_incremented_soname;
+fi
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test "$GXX" = "yes" && expr "$CXXFLAGS" : '.*-O' > /dev/null
+then
+  CXXFLAGS="$CXXFLAGS -fno-exceptions"
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+if test "x$CC" != xcc; then
+  { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; }
+fi
+set dummy $CC; ac_cc=`echo $2 |
+                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+   test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+      then
+       # cc works too.
+       :
+      else
+       # cc exists but doesn't like -o.
+       eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=no
+fi
+
+
+
+
+
+
+
+
+
+enable_dlopen=yes
+
+
+
+case `pwd` in
+  *\ * | *\    *)
+    { echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.2'
+macro_revision='1.2627'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     # Extract the first word of "sed gsed" to use in msg output
+if test -z "$SED"; then
+set dummy sed gsed; ac_prog_name=$2
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_SED_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+    # Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_SED_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+SED="$ac_cv_path_SED"
+if test -z "$SED"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in \$PATH" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+echo "${ECHO_T}$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_GREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_EGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     # Extract the first word of "fgrep" to use in msg output
+if test -z "$FGREP"; then
+set dummy fgrep; ac_prog_name=$2
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_FGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in fgrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+    # Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_FGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+FGREP="$ac_cv_path_FGREP"
+if test -z "$FGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+echo "${ECHO_T}$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:5183: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5186: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5189: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6; }
+
+
+{ echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6; }
+else
+  { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 6298 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_cc_needs_belf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+echo "${ECHO_T}$DSYMUTIL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { echo "$as_me:$LINENO: result: $NMEDIT" >&5
+echo "${ECHO_T}$NMEDIT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+echo "${ECHO_T}$ac_ct_NMEDIT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6; }
+    { echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  lt_cv_ld_exported_symbols_list=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+
+
+
+
+# Set options
+
+
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8538: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8542: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      icc* | ecc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8862: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8866: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8967: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8971: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9022: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9026: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    { echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6; }
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; }
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  { echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_svld_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; }
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_dld_link=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; }
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11770 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11870 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+    else
+      { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    fi
+    ;;
+  *)
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6; }
+
+  { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6; }
+
+  { echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' ${wl}-bernotok'
+           allow_undefined_flag_CXX=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec_CXX='$convenience'
+           archive_cmds_need_lc_CXX=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  whole_archive_flag_spec_CXX=''
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       ld_shlibs_CXX=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='${wl}-E'
+           whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='${wl}-z,text'
+       allow_undefined_flag_CXX='${wl}-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX="${prev}${p}"
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX="${prev}${p}"
+        else
+          postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX="$p"
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX="$p"
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13873: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:13877: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13972: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:13976: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14024: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:14028: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+       pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc_CXX=no
+        else
+         archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  enable_compile_in_filters=yes
+fi
+
+done
+
+{ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
+if test $ac_cv_func_dlopen = yes; then
+  :
+else
+
+{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDL 1
+_ACEOF
+
+  LIBS="-ldl $LIBS"
+
+else
+  enable_compile_in_filters=yes
+fi
+
+fi
+
+
+
+# Extract the first word of "sed", so it can be a program name with args.
+set dummy sed; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$SED"; then
+  ac_cv_prog_SED="$SED" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_SED="sed"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+SED=$ac_cv_prog_SED
+if test -n "$SED"; then
+  { echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PERLPROG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PERLPROG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PERLPROG="$PERLPROG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PERLPROG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PERLPROG=$ac_cv_path_PERLPROG
+if test -n "$PERLPROG"; then
+  { echo "$as_me:$LINENO: result: $PERLPROG" >&5
+echo "${ECHO_T}$PERLPROG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+
+if test "$enable_static" = "yes"
+then
+  enable_compile_in_filters=yes
+fi
+
+if test "$enable_compile_in_filters" = "yes"
+then
+
+cat >>confdefs.h <<\_ACEOF
+#define COMPILE_IN_FILTER 1
+_ACEOF
+
+fi
+
+find_cvs=`expr "$PACKAGE_VERSION" : '.*cvs'`
+if test "$find_cvs" -gt 0
+then
+  enable_filter_version_control=no
+fi
+
+if test "$enable_filter_version_control" != "no"
+then
+
+cat >>confdefs.h <<\_ACEOF
+#define FILTER_VERSION_CONTROL 1
+_ACEOF
+
+fi
+
+ if test "$enable_compile_in_filters" = "yes"; then
+  COMPILE_IN_FILTERS_TRUE=
+  COMPILE_IN_FILTERS_FALSE='#'
+else
+  COMPILE_IN_FILTERS_TRUE='#'
+  COMPILE_IN_FILTERS_FALSE=
+fi
+
+
+ if test "$enable_pspell_compatibility" != "no"; then
+  PSPELL_COMPATIBILITY_TRUE=
+  PSPELL_COMPATIBILITY_FALSE='#'
+else
+  PSPELL_COMPATIBILITY_TRUE='#'
+  PSPELL_COMPATIBILITY_FALSE=
+fi
+
+ if test "$enable_incremented_soname" = "yes"; then
+  INCREMENTED_SONAME_TRUE=
+  INCREMENTED_SONAME_FALSE='#'
+else
+  INCREMENTED_SONAME_TRUE='#'
+  INCREMENTED_SONAME_FALSE=
+fi
+
+
+
+
+  { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+
+
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+    rm -f messages.po
+
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+        test -n "$localedir" || localedir='${datadir}/locale'
+
+
+  ac_config_commands="$ac_config_commands po-directories"
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+  fi
+    { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFLocaleCopyCurrent=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+
+
+
+
+
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
+if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$gt_func_gnugettext_libc=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$gt_func_gnugettext_libc'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+  withval=$with_libintl_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='intl '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+              else
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+            LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
+if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$gt_func_gnugettext_libintl=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$gt_func_gnugettext_libintl=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+ac_res=`eval echo '${'$gt_func_gnugettext_libintl'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  { echo "$as_me:$LINENO: checking whether to use NLS" >&5
+echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { echo "$as_me:$LINENO: result: $gt_source" >&5
+echo "${ECHO_T}$gt_source" >&6; }
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { echo "$as_me:$LINENO: checking how to link with libintl" >&5
+echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
+        { echo "$as_me:$LINENO: result: $LIBINTL" >&5
+echo "${ECHO_T}$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+      fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+    fi
+
+        POSUB=po
+  fi
+
+
+
+    INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                     Platform Specific Tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+if test "$enable_win32_relocatable" = "yes"
+then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_WIN32_RELOCATABLE 1
+_ACEOF
+
+fi
+
+# DL stuff
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDL 1
+_ACEOF
+
+  LIBS="-ldl $LIBS"
+
+fi
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                           Posix tests                           #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+{ echo "$as_me:$LINENO: checking if file locking and truncating is supported" >&5
+echo $ECHO_N "checking if file locking and truncating is supported... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
+   #include <unistd.h>
+int
+main ()
+{
+int fd;
+   struct flock fl;
+   fcntl(fd, F_SETLKW, &fl);
+   ftruncate(fd,0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_FILE_LOCKS 1
+_ACEOF
+
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+{ echo "$as_me:$LINENO: checking if mmap and friends is supported" >&5
+echo $ECHO_N "checking if mmap and friends is supported... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
+   #include <unistd.h>
+   #include <sys/mman.h>
+int
+main ()
+{
+char * p = (char *)mmap(NULL, 10, PROT_READ, MAP_SHARED, -1, 2);
+   munmap(p,10);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+{ echo "$as_me:$LINENO: checking if file ino is supported" >&5
+echo $ECHO_N "checking if file ino is supported... $ECHO_C" >&6; }
+touch conftest-f1
+touch conftest-f2
+if test "$cross_compiling" = yes; then
+  if test "$MINGW32" = "yes"
+   then
+     { echo "$as_me:$LINENO: result: cant run test!" >&5
+echo "${ECHO_T}cant run test!" >&6; }
+   else
+     { echo "$as_me:$LINENO: result: cant run test!" >&5
+echo "${ECHO_T}cant run test!" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_FILE_INO 1
+_ACEOF
+
+   fi
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+   #include <sys/stat.h>
+   int main() {
+     struct stat s1,s2;
+     if (stat("conftest-f1",&s1) != 0) exit(2);
+     if (stat("conftest-f2",&s2) != 0) exit(2);
+     exit (s1.st_ino != s2.st_ino ? 0 : 1);
+   }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_FILE_INO 1
+_ACEOF
+
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking if posix locals are supported" >&5
+echo $ECHO_N "checking if posix locals are supported... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <locale.h>
+int
+main ()
+{
+setlocale (LC_ALL, NULL);
+   setlocale (LC_MESSAGES, NULL);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_LOCALE 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test "$enable_regex" != "no"
+then
+  { echo "$as_me:$LINENO: checking if posix regex are supported" >&5
+echo $ECHO_N "checking if posix regex are supported... $ECHO_C" >&6; }
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+     #include <regex.h>
+int
+main ()
+{
+regex_t r;
+     regcomp(&r, "", REG_EXTENDED);
+     regexec(&r, "", 0, 0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_POSIX_REGEX 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+  { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_langinfo_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_langinfo_codeset=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+  fi
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                   Posix lock function tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+
+
+{ echo "$as_me:$LINENO: checking if posix mutexes are supported" >&5
+echo $ECHO_N "checking if posix mutexes are supported... $ECHO_C" >&6; }
+
+ORIG_LIBS="$LIBS"
+
+for l in '' '-lpthread'
+do
+  if test -z "$use_posix_mutex"
+  then
+    LIBS="$l $ORIG_LIBS"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+pthread_mutex_t lck;
+       pthread_mutex_init(&lck, 0);
+       pthread_mutex_lock(&lck);
+       pthread_mutex_unlock(&lck);
+       pthread_mutex_destroy(&lck);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  PTHREAD_LIB=$l
+       use_posix_mutex=1
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  fi
+done
+
+LIBS="$ORIG_LIBS"
+
+if test "$use_posix_mutex"
+then
+  if test -z "$PTHREAD_LIB"
+  then
+    { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  else
+    { echo "$as_me:$LINENO: result: yes (in $PTHREAD_LIB)" >&5
+echo "${ECHO_T}yes (in $PTHREAD_LIB)" >&6; }
+  fi
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_POSIX_MUTEX 1
+_ACEOF
+
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  { echo "$as_me:$LINENO: WARNING: Unable to find locking mechanism, Aspell will not be thread safe." >&5
+echo "$as_me: WARNING: Unable to find locking mechanism, Aspell will not be thread safe." >&2;}
+fi
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                     Terminal function tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+{ echo "$as_me:$LINENO: checking if mblen is supported" >&5
+echo $ECHO_N "checking if mblen is supported... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <wchar.h>
+   #include <stddef.h>
+   #include <stdlib.h>
+int
+main ()
+{
+size_t s = mblen("bla", MB_CUR_MAX);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBLEN 1
+_ACEOF
+
+   have_mblen=1
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+
+
+
+if test "$enable_curses" != "no"
+then
+  use_curses=t
+  case "$enable_curses" in
+    yes | ""                     )                             ;;
+    /* | *lib* | *.a | -l* | -L* ) CURSES_LIB="$enable_curses" ;;
+    *                            ) CURSES_LIB=-l$enable_curses ;;
+  esac
+  case "$enable_curses_include" in
+    yes | no | "")                                         ;;
+    -I*          ) CURSES_INCLUDE="$enable_curses_include" ;;
+    *            ) CURSES_INCLUDE=-I$enable_curses_include ;;
+  esac
+fi
+
+if test "$use_curses"
+then
+
+  ORIG_LIBS="$LIBS"
+  ORIG_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CURSES_INCLUDE $ORIG_CPPFLAGS"
+
+  if test -z "$CURSES_LIB"
+  then
+
+    { echo "$as_me:$LINENO: checking for working curses library" >&5
+echo $ECHO_N "checking for working curses library... $ECHO_C" >&6; }
+
+    if test "$enable_wide_curses" != "no" -a -n "$have_mblen"
+    then
+      LIBS="-lncursesw $ORIG_LIBS"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ncursesw/curses.h>
+int
+main ()
+{
+initscr()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  CURSES_LIB=-lncursesw
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <ncursesw/curses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <ncursesw/term.h>
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    fi
+
+    if test -z "$CURSES_LIB"
+    then
+      LIBS="-lncurses $ORIG_LIBS"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ncurses/curses.h>
+int
+main ()
+{
+initscr()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  CURSES_LIB=-lncurses
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <ncurses/curses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <ncurses/term.h>
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+      LIBS="-lncurses $ORIG_LIBS"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ncurses.h>
+int
+main ()
+{
+initscr()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  CURSES_LIB=-lncurses
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <ncurses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <term.h>
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+      LIBS="-lcurses $ORIG_LIBS"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+initscr()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  CURSES_LIB=-lcurses
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <curses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <term.h>
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+      LIBS="-lncurses $ORIG_LIBS"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <curses.h>
+int
+main ()
+{
+initscr()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  CURSES_LIB=-lncurses
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <curses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <term.h>
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    fi
+
+    if test -n "$CURSES_LIB"
+    then
+      { echo "$as_me:$LINENO: result: found in $CURSES_LIB" >&5
+echo "${ECHO_T}found in $CURSES_LIB" >&6; }
+    else
+      { echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6; }
+    fi
+
+  else
+
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_HEADER <curses.h>
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define TERM_HEADER <term.h>
+_ACEOF
+
+
+  fi
+
+  if test -n "$CURSES_LIB"
+  then
+     LIBS="$CURSES_LIB $ORIG_LIBS"
+
+     if test "$enable_wide_curses" != "no"
+     then
+
+       { echo "$as_me:$LINENO: checking for wide character support in curses libraray" >&5
+echo $ECHO_N "checking for wide character support in curses libraray... $ECHO_C" >&6; }
+       if test -n "$have_mblen"
+       then
+         cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <wchar.h>
+            #include CURSES_HEADER
+
+int
+main ()
+{
+wchar_t wch = 0;
+            addnwstr(&wch, 1);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WIDE_CURSES 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+
+         cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define _XOPEN_SOURCE_EXTENDED 1
+            #include <wchar.h>
+            #include CURSES_HEADER
+
+int
+main ()
+{
+wchar_t wch = 0;
+            addnwstr(&wch, 1);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+            cat >>confdefs.h <<\_ACEOF
+#define HAVE_WIDE_CURSES 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define DEFINE_XOPEN_SOURCE_EXTENDED 1
+_ACEOF
+
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+            { echo "$as_me:$LINENO: WARNING: Aspell will not be able to Display UTF-8 characters correctly." >&5
+echo "$as_me: WARNING: Aspell will not be able to Display UTF-8 characters correctly." >&2;}
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       else
+         { echo "$as_me:$LINENO: result: no, because \"mblen\" is not supported" >&5
+echo "${ECHO_T}no, because \"mblen\" is not supported" >&6; }
+         { echo "$as_me:$LINENO: WARNING: Aspell will not be able to Display UTF-8 characters correctly." >&5
+echo "$as_me: WARNING: Aspell will not be able to Display UTF-8 characters correctly." >&2;}
+       fi
+
+     fi
+
+     { echo "$as_me:$LINENO: checking if standard curses include sequence will work" >&5
+echo $ECHO_N "checking if standard curses include sequence will work... $ECHO_C" >&6; }
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef DEFINE_XOPEN_SOURCE_EXTENDED
+        #  define _XOPEN_SOURCE_EXTENDED 1
+        #endif
+        #include <termios.h>
+       #include <unistd.h>
+        #include CURSES_HEADER
+       #include TERM_HEADER
+
+int
+main ()
+{
+tigetstr(const_cast<char *>("cup"));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCURSES 1
+_ACEOF
+
+       posix_termios=t
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_INCLUDE_STANDARD 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+          { echo "$as_me:$LINENO: checking if curses workaround I will work" >&5
+echo $ECHO_N "checking if curses workaround I will work... $ECHO_C" >&6; }
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef DEFINE_XOPEN_SOURCE_EXTENDED
+        #  define _XOPEN_SOURCE_EXTENDED 1
+        #endif
+        #include <termios.h>
+       #include <unistd.h>
+        #include CURSES_HEADER
+       extern "C" {char * tigetstr(char * capname);}
+int
+main ()
+{
+tigetstr(const_cast<char *>("cup"));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCURSES 1
+_ACEOF
+
+        posix_termios=t
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_INCLUDE_WORKAROUND_1 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+          { echo "$as_me:$LINENO: checking if curses without Unix stuff will work" >&5
+echo $ECHO_N "checking if curses without Unix stuff will work... $ECHO_C" >&6; }
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include CURSES_HEADER
+
+int
+main ()
+{
+initscr();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCURSES 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define CURSES_ONLY 1
+_ACEOF
+
+        curses_only=t
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+          use_curses=false
+     CURSES_LIBS=""
+     CURSES_INCLUDE=""
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+  fi
+
+  CPPFLAGS="$ORIG_CPPFLAGS"
+  LIBS="$ORIG_LIBS"
+
+fi
+
+if test -z "$posix_termios" -a -z "$curses_only"
+then
+  { echo "$as_me:$LINENO: checking if posix termios is supported" >&5
+echo $ECHO_N "checking if posix termios is supported... $ECHO_C" >&6; }
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <termios.h>
+     #include <unistd.h>
+     #include <stdlib.h>
+int
+main ()
+{
+isatty (STDIN_FILENO);
+     atexit(0);
+     termios attrib;
+     tcgetattr (STDIN_FILENO, &attrib);
+     tcsetattr (STDIN_FILENO, TCSAFLUSH, &attrib);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+     posix_termios=t
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test -z "$posix_termios" -a -z "$use_curses"
+then
+    { echo "$as_me:$LINENO: checking if getch is supported" >&5
+echo $ECHO_N "checking if getch is supported... $ECHO_C" >&6; }
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+extern "C" {int getch();}
+int
+main ()
+{
+char c = getch();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETCH 1
+_ACEOF
+
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test "$posix_termios"
+then
+
+cat >>confdefs.h <<\_ACEOF
+#define POSIX_TERMIOS 1
+_ACEOF
+
+fi
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                    Compiler Quirks Tests                        #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+{ echo "$as_me:$LINENO: checking for STL rel_ops pollution" >&5
+echo $ECHO_N "checking for STL rel_ops pollution... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utility>
+
+   template <typename T>
+   class C {};
+
+   template <typename T>
+   bool operator== (C<T>, C<T>) {return true;}
+
+   template <typename T>
+   bool operator!= (C<T>, C<T>) {return false;}
+int
+main ()
+{
+C<int> c1, c2;
+   bool v = c1 != c2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define REL_OPS_POLLUTION 1
+_ACEOF
+
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                           Output                                #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+ac_config_files="$ac_config_files Makefile gen/Makefile common/Makefile lib/Makefile data/Makefile auto/Makefile modules/Makefile modules/tokenizer/Makefile modules/speller/Makefile modules/speller/default/Makefile interfaces/Makefile interfaces/cc/Makefile scripts/Makefile examples/Makefile prog/Makefile manual/Makefile po/Makefile.in m4/Makefile modules/filter/Makefile myspell/Makefile lib5/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${COMPILE_IN_FILTERS_TRUE}" && test -z "${COMPILE_IN_FILTERS_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"COMPILE_IN_FILTERS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"COMPILE_IN_FILTERS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${PSPELL_COMPATIBILITY_TRUE}" && test -z "${PSPELL_COMPATIBILITY_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"PSPELL_COMPATIBILITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"PSPELL_COMPATIBILITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCREMENTED_SONAME_TRUE}" && test -z "${INCREMENTED_SONAME_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCREMENTED_SONAME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCREMENTED_SONAME\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU Aspell $as_me 0.60.6.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+GNU Aspell config.status 0.60.6.1
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "gen/settings.h") CONFIG_HEADERS="$CONFIG_HEADERS gen/settings.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "gen/Makefile") CONFIG_FILES="$CONFIG_FILES gen/Makefile" ;;
+    "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;;
+    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+    "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+    "auto/Makefile") CONFIG_FILES="$CONFIG_FILES auto/Makefile" ;;
+    "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;;
+    "modules/tokenizer/Makefile") CONFIG_FILES="$CONFIG_FILES modules/tokenizer/Makefile" ;;
+    "modules/speller/Makefile") CONFIG_FILES="$CONFIG_FILES modules/speller/Makefile" ;;
+    "modules/speller/default/Makefile") CONFIG_FILES="$CONFIG_FILES modules/speller/default/Makefile" ;;
+    "interfaces/Makefile") CONFIG_FILES="$CONFIG_FILES interfaces/Makefile" ;;
+    "interfaces/cc/Makefile") CONFIG_FILES="$CONFIG_FILES interfaces/cc/Makefile" ;;
+    "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "prog/Makefile") CONFIG_FILES="$CONFIG_FILES prog/Makefile" ;;
+    "manual/Makefile") CONFIG_FILES="$CONFIG_FILES manual/Makefile" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
+    "modules/filter/Makefile") CONFIG_FILES="$CONFIG_FILES modules/filter/Makefile" ;;
+    "myspell/Makefile") CONFIG_FILES="$CONFIG_FILES myspell/Makefile" ;;
+    "lib5/Makefile") CONFIG_FILES="$CONFIG_FILES lib5/Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim
+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim
+MAINT!$MAINT$ac_delim
+pkgdocdir!$pkgdocdir$ac_delim
+pkgdatadir!$pkgdatadir$ac_delim
+pkglibdir!$pkglibdir$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CXXDEPMODE!$CXXDEPMODE$ac_delim
+am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim
+am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+LIBTOOL!$LIBTOOL$ac_delim
+SED!$SED$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+FGREP!$FGREP$ac_delim
+LD!$LD$ac_delim
+DUMPBIN!$DUMPBIN$ac_delim
+ac_ct_DUMPBIN!$ac_ct_DUMPBIN$ac_delim
+NM!$NM$ac_delim
+LN_S!$LN_S$ac_delim
+AR!$AR$ac_delim
+RANLIB!$RANLIB$ac_delim
+lt_ECHO!$lt_ECHO$ac_delim
+DSYMUTIL!$DSYMUTIL$ac_delim
+NMEDIT!$NMEDIT$ac_delim
+CPP!$CPP$ac_delim
+CXXCPP!$CXXCPP$ac_delim
+PERLPROG!$PERLPROG$ac_delim
+COMPILE_IN_FILTERS_TRUE!$COMPILE_IN_FILTERS_TRUE$ac_delim
+COMPILE_IN_FILTERS_FALSE!$COMPILE_IN_FILTERS_FALSE$ac_delim
+PSPELL_COMPATIBILITY_TRUE!$PSPELL_COMPATIBILITY_TRUE$ac_delim
+PSPELL_COMPATIBILITY_FALSE!$PSPELL_COMPATIBILITY_FALSE$ac_delim
+INCREMENTED_SONAME_TRUE!$INCREMENTED_SONAME_TRUE$ac_delim
+INCREMENTED_SONAME_FALSE!$INCREMENTED_SONAME_FALSE$ac_delim
+USE_NLS!$USE_NLS$ac_delim
+MSGFMT!$MSGFMT$ac_delim
+GMSGFMT!$GMSGFMT$ac_delim
+MSGFMT_015!$MSGFMT_015$ac_delim
+GMSGFMT_015!$GMSGFMT_015$ac_delim
+XGETTEXT!$XGETTEXT$ac_delim
+XGETTEXT_015!$XGETTEXT_015$ac_delim
+MSGMERGE!$MSGMERGE$ac_delim
+INTL_MACOSX_LIBS!$INTL_MACOSX_LIBS$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+INTLLIBS!$INTLLIBS$ac_delim
+LIBINTL!$LIBINTL$ac_delim
+LTLIBINTL!$LTLIBINTL$ac_delim
+POSUB!$POSUB$ac_delim
+PTHREAD_LIB!$PTHREAD_LIB$ac_delim
+CURSES_LIB!$CURSES_LIB$ac_delim
+CURSES_INCLUDE!$CURSES_INCLUDE$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 46; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
+ac_dB='\\)[     (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+       t rset
+       :rset
+       s/^[     ]*#[    ]*define[       ][      ]*//
+       t ok
+       d
+       :ok
+       s/[\\&,]/\\&/g
+       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[    #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
+/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+# Compute $ac_file's index in $config_headers.
+_am_arg=$ac_file
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+    "po-directories":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..ed26945
--- /dev/null
@@ -0,0 +1,585 @@
+AC_INIT(GNU Aspell, 0.60.6.1)
+AC_CONFIG_SRCDIR(prog/aspell.cpp)
+AC_CANONICAL_SYSTEM
+AM_INIT_AUTOMAKE
+AM_CONFIG_HEADER(gen/settings.h)
+
+AM_MAINTAINER_MODE
+
+AC_ARG_ENABLE(docdir, 
+  AS_HELP_STRING([--enable-docdir=DIR],[documentation files in DIR @<:@PREFIX/share/doc/aspell@:>@]),
+  pkgdocdir=$enable_docdir, pkgdocdir=\${prefix}/share/doc/aspell)
+AC_SUBST(pkgdocdir)
+
+dnl pkgdatadir
+
+pkgdatadir=undef
+AC_ARG_ENABLE(pkgdatadir, 
+  AS_HELP_STRING([--enable-pkgdatadir=DIR],[device dependent data files @<:@LIBDIR/aspell-0.60@:>@]),
+  pkgdatadir=$enable_pkgdatadir)
+
+AC_ARG_ENABLE(pkgdata-dir, 
+  AS_HELP_STRING([--enable-data-dir=DIR],[alias for pkgdatadir]),
+  pkgdatadir=$enable_dict_dir)
+
+if test "$pkgdatadir" = "undef"
+then
+  pkgdatadir=\${libdir}/aspell-0.60
+fi
+
+AC_SUBST(pkgdatadir)
+
+dnl pkglibdir
+
+pkglibdir=undef
+AC_ARG_ENABLE(pkglibdir, 
+  AS_HELP_STRING([--enable-pkglibdir=DIR],[device dependent data files @<:@LIBDIR/aspell-0.60@:>@]),
+  pkglibdir=$enable_pkglibdir)
+
+AC_ARG_ENABLE(dict-dir, 
+  AS_HELP_STRING([--enable-dict-dir=DIR],[alias for pkglibdir]),
+  pkglibdir=$enable_dict_dir)
+
+if test "$pkglibdir" = "undef"
+then
+  pkglibdir=\${libdir}/aspell-0.60
+fi
+
+AC_SUBST(pkglibdir)
+
+dnl optional features
+
+AC_ARG_ENABLE(win32-relocatable,
+  [  --enable-win32-relocatable])
+
+AC_ARG_ENABLE(curses,           
+  AS_HELP_STRING([--enable-curses=LIBFILE],[cursor control library]))
+
+AC_ARG_ENABLE(curses-include,           
+  [  --enable-curses-include=DIR])
+
+AC_ARG_ENABLE(wide-curses,
+  AS_HELP_STRING([--disable-wide-curses],[disable wide char utf8 cursor control]))
+
+AC_ARG_ENABLE(regex,
+  [  --disable-regex])
+
+AC_ARG_ENABLE(compile-in-filters,
+  [  --enable-compile-in-filters])
+
+AC_ARG_ENABLE(filter-version-control,
+  [  --disable-filter-version-control])
+
+AC_ARG_ENABLE(pspell-compatibility,
+  AS_HELP_STRING([--disable-pspell-compatibility],[don't install pspell compatibility libraries]))
+
+AC_ARG_ENABLE(incremented-soname,
+  AS_HELP_STRING([--enable-incremented-soname],[break aspell 0.50 binary compatibility]))
+
+dnl AC_ARG_ENABLE(aspell5-compatibility,
+dnl [  --enable-aspell5-compatibility  install aspell 0.50 compatibility libraries])
+
+dnl
+
+AC_PROG_CXX
+if test "$GXX" = "yes" && expr "$CXXFLAGS" : '.*-O' > /dev/null
+then
+  CXXFLAGS="$CXXFLAGS -fno-exceptions"
+fi
+
+AC_LANG([C++])
+
+AM_PROG_CC_C_O
+
+AC_DISABLE_STATIC
+AC_LIBTOOL_DLOPEN
+AC_PROG_LIBTOOL
+
+dnl DL stuff
+
+AC_CHECK_HEADERS(dlfcn.h,,[enable_compile_in_filters=yes])
+AC_CHECK_FUNC(dlopen,,
+              AC_CHECK_LIB(dl, dlopen,,[enable_compile_in_filters=yes]))
+
+dnl
+
+AC_CHECK_PROG(SED,sed,sed)
+AC_PATH_PROG(PERLPROG,perl)
+
+dnl
+
+if test "$enable_static" = "yes"
+then
+  enable_compile_in_filters=yes
+fi
+
+if test "$enable_compile_in_filters" = "yes"
+then
+  AC_DEFINE(COMPILE_IN_FILTER, 1, [Defined if filters should be compiled in])
+fi
+
+find_cvs=`expr "$PACKAGE_VERSION" : '.*cvs'`
+if test "$find_cvs" -gt 0
+then
+  enable_filter_version_control=no
+fi
+
+if test "$enable_filter_version_control" != "no"
+then
+  AC_DEFINE(FILTER_VERSION_CONTROL, 1, 
+            [Defined if filter version control should be used])
+fi
+
+AM_CONDITIONAL(COMPILE_IN_FILTERS, 
+  [test "$enable_compile_in_filters" = "yes"])
+
+AM_CONDITIONAL(PSPELL_COMPATIBILITY,  
+  [test "$enable_pspell_compatibility" != "no"])
+AM_CONDITIONAL(INCREMENTED_SONAME,    
+  [test "$enable_incremented_soname" = "yes"])
+dnl AM_CONDITIONAL(ASPELL5_COMPATIBILITY,
+dnl   [test "$enable_incremented_soname" != "no" -a \
+dnl         "$enable_aspell5_compatibility" = "yes"])
+
+dnl GETTEXT
+
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.16.1])
+
+AH_TOP([#ifndef ASPELL_SETTINGS__H
+#define ASPELL_SETTINGS__H])
+AH_BOTTOM([#define C_EXPORT extern "C"])
+AH_BOTTOM([#endif /* ASPELL_SETTINGS__H */])
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                     Platform Specific Tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+if test "$enable_win32_relocatable" = "yes"
+then
+  AC_DEFINE(ENABLE_WIN32_RELOCATABLE, 1, [Defined if win32 relocation should be used])
+fi
+
+# DL stuff
+AC_CHECK_HEADERS(dlfcn.h)
+AC_CHECK_LIB(dl, dlopen)
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                           Posix tests                           #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+AC_MSG_CHECKING(if file locking and truncating is supported)
+AC_TRY_LINK( 
+  [#include <fcntl.h>
+   #include <unistd.h>],
+  [int fd;     
+   struct flock fl;
+   fcntl(fd, F_SETLKW, &fl);
+   ftruncate(fd,0);],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(USE_FILE_LOCKS, 1,
+             [Defined if file locking and truncating is supported])
+  ],
+  [AC_MSG_RESULT(no)] )
+
+AC_MSG_CHECKING(if mmap and friends is supported)
+AC_TRY_LINK(
+  [#include <fcntl.h>
+   #include <unistd.h>
+   #include <sys/mman.h>],
+  [char * p = (char *)mmap(NULL, 10, PROT_READ, MAP_SHARED, -1, 2);
+   munmap(p,10);],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(HAVE_MMAP, 1, [Defined if mmap and friends is supported])],
+  [AC_MSG_RESULT(no)] )
+
+AC_MSG_CHECKING(if file ino is supported)
+touch conftest-f1
+touch conftest-f2
+AC_TRY_RUN(
+  [#include <stdlib.h>
+   #include <sys/stat.h>
+   int main() {
+     struct stat s1,s2;
+     if (stat("conftest-f1",&s1) != 0) exit(2);
+     if (stat("conftest-f2",&s2) != 0) exit(2);
+     exit (s1.st_ino != s2.st_ino ? 0 : 1);
+   }
+  ],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(USE_FILE_INO, 1, [Defined if file ino is supported])
+  ],
+  [AC_MSG_RESULT(no)],
+  [if test "$MINGW32" = "yes"
+   then
+     AC_MSG_RESULT(cant run test!, assuming no)
+   else
+     AC_MSG_RESULT(cant run test!, assuming yes)
+     AC_DEFINE(USE_FILE_INO, 1, [Defined if file ino is supported])
+   fi
+  ] )
+
+AC_MSG_CHECKING(if posix locals are supported)
+AC_TRY_COMPILE(
+  [#include <locale.h>],
+  [setlocale (LC_ALL, NULL);
+   setlocale (LC_MESSAGES, NULL);],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(USE_LOCALE, 1, [Defined if Posix locales are supported])],
+  [AC_MSG_RESULT(no)] )
+
+if test "$enable_regex" != "no"
+then
+  AC_MSG_CHECKING(if posix regex are supported)
+  AC_TRY_LINK(
+    [#include <sys/types.h>
+     #include <regex.h>],
+    [regex_t r;
+     regcomp(&r, "", REG_EXTENDED);
+     regexec(&r, "", 0, 0, 0);],
+    [AC_MSG_RESULT(yes)
+     AC_DEFINE(USE_POSIX_REGEX, 1, [Defined if Posix regex are supported])],
+    [AC_MSG_RESULT(no)])
+fi
+
+AM_LANGINFO_CODESET
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                   Posix lock function tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+AC_SUBST(PTHREAD_LIB)
+
+AC_MSG_CHECKING(if posix mutexes are supported)
+
+ORIG_LIBS="$LIBS"
+
+for l in '' '-lpthread' 
+do 
+  if test -z "$use_posix_mutex"
+  then
+    LIBS="$l $ORIG_LIBS"
+    AC_TRY_LINK(
+      [#include <pthread.h>],
+      [pthread_mutex_t lck;
+       pthread_mutex_init(&lck, 0);
+       pthread_mutex_lock(&lck);
+       pthread_mutex_unlock(&lck);
+       pthread_mutex_destroy(&lck);],
+      [PTHREAD_LIB=$l
+       use_posix_mutex=1])
+  fi
+done
+
+LIBS="$ORIG_LIBS"
+
+if test "$use_posix_mutex"
+then
+  if test -z "$PTHREAD_LIB"
+  then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT([yes (in $PTHREAD_LIB)])
+  fi
+  AC_DEFINE(USE_POSIX_MUTEX, 1, [Defined if Posix mutexes are supported])
+else
+  AC_MSG_RESULT(no)
+  AC_MSG_WARN([Unable to find locking mechanism, Aspell will not be thread safe.])
+fi
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                     Terminal function tests                     #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+AC_MSG_CHECKING(if mblen is supported)
+AC_TRY_LINK(
+  [#include <wchar.h>
+   #include <stddef.h>
+   #include <stdlib.h>],
+  [size_t s = mblen("bla", MB_CUR_MAX);],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(HAVE_MBLEN, 1, [Defined if mblen is supported])
+   have_mblen=1],
+  [AC_MSG_RESULT(no)]
+)
+
+AC_SUBST(CURSES_LIB)
+AC_SUBST(CURSES_INCLUDE)
+
+if test "$enable_curses" != "no"
+then
+  use_curses=t
+  case "$enable_curses" in
+    yes | ""                     )                             ;;
+    /* | *lib* | *.a | -l* | -L* ) CURSES_LIB="$enable_curses" ;;
+    *                            ) CURSES_LIB=-l$enable_curses ;;
+  esac
+  case "$enable_curses_include" in
+    yes | no | "")                                         ;;
+    -I*          ) CURSES_INCLUDE="$enable_curses_include" ;;
+    *            ) CURSES_INCLUDE=-I$enable_curses_include ;;
+  esac
+fi
+
+if test "$use_curses"
+then
+
+  ORIG_LIBS="$LIBS"
+  ORIG_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CURSES_INCLUDE $ORIG_CPPFLAGS"
+
+  if test -z "$CURSES_LIB"
+  then
+
+    AC_MSG_CHECKING(for working curses library)
+
+    if test "$enable_wide_curses" != "no" -a -n "$have_mblen"
+    then
+      LIBS="-lncursesw $ORIG_LIBS"
+      AC_TRY_LINK(
+        [#include <ncursesw/curses.h>], [initscr()],
+        [CURSES_LIB=-lncursesw
+         AC_DEFINE(CURSES_HEADER, <ncursesw/curses.h>, [Defined to curses header file])
+         AC_DEFINE(TERM_HEADER, <ncursesw/term.h>, [Defined to term header file])])
+    fi
+
+    if test -z "$CURSES_LIB"
+    then
+      LIBS="-lncurses $ORIG_LIBS"
+      AC_TRY_LINK(
+        [#include <ncurses/curses.h>], [initscr()],
+        [CURSES_LIB=-lncurses
+         AC_DEFINE(CURSES_HEADER, <ncurses/curses.h>, [Defined to curses header file])
+         AC_DEFINE(TERM_HEADER, <ncurses/term.h>, [Defined to term header file])],
+        [
+      LIBS="-lncurses $ORIG_LIBS"
+      AC_TRY_LINK(
+        [#include <ncurses.h>], [initscr()],
+        [CURSES_LIB=-lncurses
+         AC_DEFINE(CURSES_HEADER, <ncurses.h>, [Defined to curses header file])
+         AC_DEFINE(TERM_HEADER, <term.h>, [Defined to term header file])],
+        [
+      LIBS="-lcurses $ORIG_LIBS"
+      AC_TRY_LINK(
+        [#include <curses.h>], [initscr()],
+        [CURSES_LIB=-lcurses
+         AC_DEFINE(CURSES_HEADER, <curses.h>, [Defined to curses header file])
+         AC_DEFINE(TERM_HEADER, <term.h>, [Defined to term header file])],
+        [
+      LIBS="-lncurses $ORIG_LIBS"
+      AC_TRY_LINK(
+        [#include <curses.h>], [initscr()],
+        [CURSES_LIB=-lncurses
+         AC_DEFINE(CURSES_HEADER, <curses.h>, [Defined to curses header file])
+         AC_DEFINE(TERM_HEADER, <term.h>, [Defined to term header file])],
+      ) ]) ]) ])
+    fi
+
+    if test -n "$CURSES_LIB"
+    then
+      AC_MSG_RESULT([found in $CURSES_LIB])
+    else
+      AC_MSG_RESULT([not found])
+    fi
+
+  else
+
+    AC_DEFINE(CURSES_HEADER, <curses.h>, [Defined to curses header file])
+    AC_DEFINE(TERM_HEADER, <term.h>, [Defined to term header file])
+
+  fi
+
+  if test -n "$CURSES_LIB"
+  then
+     LIBS="$CURSES_LIB $ORIG_LIBS"
+
+     if test "$enable_wide_curses" != "no"
+     then
+
+       AC_MSG_CHECKING(for wide character support in curses libraray)
+       if test -n "$have_mblen"
+       then
+         AC_TRY_LINK(
+           [#include <wchar.h>
+            #include CURSES_HEADER
+           ],
+           [wchar_t wch = 0;
+            addnwstr(&wch, 1);],
+           [AC_MSG_RESULT(yes)
+            AC_DEFINE(HAVE_WIDE_CURSES, 1, [Defined if curses libraray includes wide character support])],
+           [
+
+         AC_TRY_LINK(
+           [#define _XOPEN_SOURCE_EXTENDED 1
+            #include <wchar.h>
+            #include CURSES_HEADER
+           ],
+           [wchar_t wch = 0;
+            addnwstr(&wch, 1);],
+           [AC_MSG_RESULT(yes)
+            AC_DEFINE(HAVE_WIDE_CURSES, 1)
+            AC_DEFINE(DEFINE_XOPEN_SOURCE_EXTENDED, 1, 
+                      [Defined if _XOPEN_SOURCE_EXTENDED needs to be defined. 
+                       (Can't define globally as that will cause problems with some systems)])
+           ],
+           [AC_MSG_RESULT(no)
+            AC_MSG_WARN([Aspell will not be able to Display UTF-8 characters correctly.])])])
+       else
+         AC_MSG_RESULT([no, because "mblen" is not supported])
+         AC_MSG_WARN([Aspell will not be able to Display UTF-8 characters correctly.])
+       fi
+
+     fi
+     AC_MSG_CHECKING(if standard curses include sequence will work)
+     AC_TRY_LINK(
+       [#ifdef DEFINE_XOPEN_SOURCE_EXTENDED
+        #  define _XOPEN_SOURCE_EXTENDED 1
+        #endif
+        #include <termios.h>
+       #include <unistd.h>
+        #include CURSES_HEADER
+       #include TERM_HEADER
+       ],
+       [tigetstr(const_cast<char *>("cup"));],
+       [AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_LIBCURSES, 1, 
+                  [Defined if the curses library is available])
+       posix_termios=t
+       AC_DEFINE(CURSES_INCLUDE_STANDARD, 1, 
+                  [Defined if no special Workarounds are needed for Curses headers])],
+       [AC_MSG_RESULT(no)
+
+     dnl else if
+     AC_MSG_CHECKING(if curses workaround I will work)
+     AC_TRY_LINK(
+       [#ifdef DEFINE_XOPEN_SOURCE_EXTENDED
+        #  define _XOPEN_SOURCE_EXTENDED 1
+        #endif
+        #include <termios.h>
+       #include <unistd.h>
+        #include CURSES_HEADER
+       extern "C" {char * tigetstr(char * capname);}],
+       [tigetstr(const_cast<char *>("cup"));],
+       [AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_LIBCURSES, 1, [])
+        posix_termios=t
+       AC_DEFINE(CURSES_INCLUDE_WORKAROUND_1, 1, 
+                  [Defined if special Wordaround I is need for Curses headers])],
+       [AC_MSG_RESULT(no)
+
+     dnl else if
+     AC_MSG_CHECKING(if curses without Unix stuff will work)
+     AC_TRY_LINK(
+       [#include CURSES_HEADER
+       ],
+       [initscr();],
+       [AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_LIBCURSES, 1, [])
+       AC_DEFINE(CURSES_ONLY, 1, 
+                  [Defined if curses like POSIX Functions should be used])
+        curses_only=t],
+       [AC_MSG_RESULT(no)
+
+     dnl else
+     use_curses=false
+     CURSES_LIBS=""
+     CURSES_INCLUDE=""
+
+     ]) ]) ])
+
+  fi
+
+  CPPFLAGS="$ORIG_CPPFLAGS"
+  LIBS="$ORIG_LIBS"
+
+fi
+
+if test -z "$posix_termios" -a -z "$curses_only"
+then
+  AC_MSG_CHECKING(if posix termios is supported)
+  AC_TRY_LINK(
+    [#include <termios.h>
+     #include <unistd.h>
+     #include <stdlib.h>],
+    [isatty (STDIN_FILENO);
+     atexit(0);
+     termios attrib;
+     tcgetattr (STDIN_FILENO, &attrib);
+     tcsetattr (STDIN_FILENO, TCSAFLUSH, &attrib);],
+    [AC_MSG_RESULT(yes)
+     posix_termios=t],
+    [AC_MSG_RESULT(no)]
+  )
+fi
+
+if test -z "$posix_termios" -a -z "$use_curses"
+then
+  dnl else if
+  AC_MSG_CHECKING(if getch is supported)
+  AC_TRY_LINK(
+    [extern "C" {int getch();}],
+    [char c = getch();],
+    [AC_MSG_RESULT(yes)
+     AC_DEFINE(HAVE_GETCH, 1, [Defined if msdos getch is supported])
+    ],
+    [AC_MSG_RESULT(no)]
+  )
+fi
+
+if test "$posix_termios"
+then
+  AC_DEFINE(POSIX_TERMIOS, 1, [Defined if Posix Termios is Supported])
+fi
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                    Compiler Quirks Tests                        #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+AC_MSG_CHECKING(for STL rel_ops pollution)
+AC_TRY_COMPILE(
+  [#include <utility>
+
+   template <typename T>
+   class C {};
+
+   template <typename T>
+   bool operator== (C<T>, C<T>) {return true;}
+
+   template <typename T>
+   bool operator!= (C<T>, C<T>) {return false;}],
+  [C<int> c1, c2;
+   bool v = c1 != c2;],
+  [AC_MSG_RESULT(no)],
+  [AC_MSG_RESULT(yes)
+   AC_DEFINE(REL_OPS_POLLUTION, 1, 
+             [Defined if STL rel_ops pollute the global namespace])
+  ]
+)
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                                                                 #
+#                           Output                                #
+#                                                                 #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+AC_CONFIG_FILES([Makefile gen/Makefile common/Makefile lib/Makefile data/Makefile
+                 auto/Makefile modules/Makefile modules/tokenizer/Makefile
+                 modules/speller/Makefile modules/speller/default/Makefile
+                interfaces/Makefile interfaces/cc/Makefile
+                scripts/Makefile examples/Makefile
+                prog/Makefile manual/Makefile po/Makefile.in m4/Makefile
+                 modules/filter/Makefile myspell/Makefile lib5/Makefile
+                 ])
+AC_OUTPUT
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/data/cp1250.cmap b/data/cp1250.cmap
new file mode 100644 (file)
index 0000000..501163e
--- /dev/null
@@ -0,0 +1,1991 @@
+INTERNAL
+/
+N 932
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 5
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A5
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C6
+     030C > C8
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     030C > CF
+     .
+0045 > 45 /
+     N 4
+     0301 > C9
+     0308 > CB
+     030C > CC
+     0328 > CA
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 2
+     0301 > CD
+     0302 > CE
+     .
+004A > 4A
+004B > 4B
+004C > 4C /
+     N 2
+     0301 > C5
+     030C > BC
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     030C > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 2
+     0301 > C0
+     030C > D8
+     .
+0053 > 53 /
+     N 3
+     0301 > 8C
+     030C > 8A
+     0327 > AA
+     .
+0054 > 54 /
+     N 2
+     030C > 8D
+     0327 > DE
+     .
+0055 > 55 /
+     N 4
+     0301 > DA
+     0308 > DC
+     030A > D9
+     030B > DB
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 3
+     0301 > 8F
+     0307 > AF
+     030C > 8E
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 5
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > B9
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E6
+     030C > E8
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     030C > EF
+     .
+0065 > 65 /
+     N 4
+     0301 > E9
+     0308 > EB
+     030C > EC
+     0328 > EA
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0301 > ED
+     0302 > EE
+     .
+006A > 6A
+006B > 6B
+006C > 6C /
+     N 2
+     0301 > E5
+     030C > BE
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     030C > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 2
+     0301 > E0
+     030C > F8
+     .
+0073 > 73 /
+     N 3
+     0301 > 9C
+     030C > 9A
+     0327 > BA
+     .
+0074 > 74 /
+     N 2
+     030C > 9D
+     0327 > FE
+     .
+0075 > 75 /
+     N 4
+     0301 > FA
+     0308 > FC
+     030A > F9
+     030B > FB
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 3
+     0301 > 9F
+     0307 > BF
+     030C > 9E
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0083 > 83
+0088 > 88
+0090 > 90
+0098 > 98
+00A0 > A0
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00BB > BB
+00C0 > 41 # unsup: 0041 0300
+00C1 > C1
+00C2 > C2
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > C7
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > CB
+00CC > 49 # unsup: 0049 0300
+00CD > CD
+00CE > CE
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > D3
+00D4 > D4
+00D5 > 4F # unsup: 004F 0303
+00D6 > D6
+00D7 > D7
+00D9 > 55 # unsup: 0055 0300
+00DA > DA
+00DB > 55 # unsup: 0055 0302
+00DC > DC
+00DD > DD
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > E1
+00E2 > E2
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > E7
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > EB
+00EC > 69 # unsup: 0069 0300
+00ED > ED
+00EE > EE
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > F3
+00F4 > F4
+00F5 > 6F # unsup: 006F 0303
+00F6 > F6
+00F7 > F7
+00F9 > 75 # unsup: 0075 0300
+00FA > FA
+00FB > 75 # unsup: 0075 0302
+00FC > FC
+00FD > FD
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > C3
+0103 > E3
+0104 > A5
+0105 > B9
+0106 > C6
+0107 > E6
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > CF
+010F > EF
+0110 > D0
+0111 > F0
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > CA
+0119 > EA
+011A > CC
+011B > EC
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > C5
+013A > E5
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > BC
+013E > BE
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > D2
+0148 > F2
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > D5
+0151 > F5
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > C0
+0155 > E0
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > D8
+0159 > F8
+015A > 8C
+015B > 9C
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > AA
+015F > BA
+0160 > 8A
+0161 > 9A
+0162 > DE
+0163 > FE
+0164 > 8D
+0165 > 9D
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > D9
+016F > F9
+0170 > DB
+0171 > FB
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 8F
+017A > 9F
+017B > AF
+017C > BF
+017D > 8E
+017E > 9E
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 8E # compat
+01C5 > 44 9E # compat
+01C6 > 64 9E # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C7 > A1
+02D8 > A2
+02D9 > FF
+02DB > B2
+02DD > BD
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 8C # unsup: 015A 0307
+1E65 > 9C # unsup: 015B 0307
+1E66 > 8A # unsup: 0160 0307
+1E67 > 9A # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > C3 # unsup: 0102 0301
+1EAF > E3 # unsup: 0103 0301
+1EB0 > C3 # unsup: 0102 0300
+1EB1 > E3 # unsup: 0103 0300
+1EB2 > C3 # unsup: 0102 0309
+1EB3 > E3 # unsup: 0103 0309
+1EB4 > C3 # unsup: 0102 0303
+1EB5 > E3 # unsup: 0103 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE2 > AC # compat
+FFE4 > A6 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 5
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A5
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C6
+     030C > C8
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     030C > CF
+     .
+0045 > 45 /
+     N 4
+     0301 > C9
+     0308 > CB
+     030C > CC
+     0328 > CA
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 2
+     0301 > CD
+     0302 > CE
+     .
+004A > 4A
+004B > 4B
+004C > 4C /
+     N 2
+     0301 > C5
+     030C > BC
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     030C > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 2
+     0301 > C0
+     030C > D8
+     .
+0053 > 53 /
+     N 3
+     0301 > 8C
+     030C > 8A
+     0327 > AA
+     .
+0054 > 54 /
+     N 2
+     030C > 8D
+     0327 > DE
+     .
+0055 > 55 /
+     N 4
+     0301 > DA
+     0308 > DC
+     030A > D9
+     030B > DB
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 3
+     0301 > 8F
+     0307 > AF
+     030C > 8E
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 5
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > B9
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E6
+     030C > E8
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     030C > EF
+     .
+0065 > 65 /
+     N 4
+     0301 > E9
+     0308 > EB
+     030C > EC
+     0328 > EA
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0301 > ED
+     0302 > EE
+     .
+006A > 6A
+006B > 6B
+006C > 6C /
+     N 2
+     0301 > E5
+     030C > BE
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     030C > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 2
+     0301 > E0
+     030C > F8
+     .
+0073 > 73 /
+     N 3
+     0301 > 9C
+     030C > 9A
+     0327 > BA
+     .
+0074 > 74 /
+     N 2
+     030C > 9D
+     0327 > FE
+     .
+0075 > 75 /
+     N 4
+     0301 > FA
+     0308 > FC
+     030A > F9
+     030B > FB
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 3
+     0301 > 9F
+     0307 > BF
+     030C > 9E
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0083 > 83
+0088 > 88
+0090 > 90
+0098 > 98
+00A0 > A0
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00BB > BB
+00C1 > C1
+00C2 > C2
+00C4 > C4
+00C7 > C7
+00C9 > C9
+00CB > CB
+00CD > CD
+00CE > CE
+00D3 > D3
+00D4 > D4
+00D6 > D6
+00D7 > D7
+00DA > DA
+00DC > DC
+00DD > DD
+00DF > DF
+00E1 > E1
+00E2 > E2
+00E4 > E4
+00E7 > E7
+00E9 > E9
+00EB > EB
+00ED > ED
+00EE > EE
+00F3 > F3
+00F4 > F4
+00F6 > F6
+00F7 > F7
+00FA > FA
+00FC > FC
+00FD > FD
+0102 > C3
+0103 > E3
+0104 > A5
+0105 > B9
+0106 > C6
+0107 > E6
+010C > C8
+010D > E8
+010E > CF
+010F > EF
+0110 > D0
+0111 > F0
+0118 > CA
+0119 > EA
+011A > CC
+011B > EC
+0139 > C5
+013A > E5
+013D > BC
+013E > BE
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0147 > D2
+0148 > F2
+0150 > D5
+0151 > F5
+0154 > C0
+0155 > E0
+0158 > D8
+0159 > F8
+015A > 8C
+015B > 9C
+015E > AA
+015F > BA
+0160 > 8A
+0161 > 9A
+0162 > DE
+0163 > FE
+0164 > 8D
+0165 > 9D
+016E > D9
+016F > F9
+0170 > DB
+0171 > FB
+0179 > 8F
+017A > 9F
+017B > AF
+017C > BF
+017D > 8E
+017E > 9E
+02C7 > A1
+02D8 > A2
+02D9 > FF
+02DB > B2
+02DD > BD
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0083
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 0053 030C
+8B > 2039
+8C > 0053 0301
+8D > 0054 030C
+8E > 005A 030C
+8F > 005A 0301
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 0073 030C
+9B > 203A
+9C > 0073 0301
+9D > 0074 030C
+9E > 007A 030C
+9F > 007A 0301
+A0 > 00A0
+A1 > 02C7
+A2 > 02D8
+A3 > 0141
+A4 > 00A4
+A5 > 0041 0328
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 0053 0327
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 005A 0307
+B0 > 00B0
+B1 > 00B1
+B2 > 02DB
+B3 > 0142
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 0061 0328
+BA > 0073 0327
+BB > 00BB
+BC > 004C 030C
+BD > 02DD
+BE > 006C 030C
+BF > 007A 0307
+C0 > 0052 0301
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0306
+C4 > 0041 0308
+C5 > 004C 0301
+C6 > 0043 0301
+C7 > 0043 0327
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 0045 0328
+CB > 0045 0308
+CC > 0045 030C
+CD > 0049 0301
+CE > 0049 0302
+CF > 0044 030C
+D0 > 0110
+D1 > 004E 0301
+D2 > 004E 030C
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 030B
+D6 > 004F 0308
+D7 > 00D7
+D8 > 0052 030C
+D9 > 0055 030A
+DA > 0055 0301
+DB > 0055 030B
+DC > 0055 0308
+DD > 0059 0301
+DE > 0054 0327
+DF > 00DF
+E0 > 0072 0301
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0306
+E4 > 0061 0308
+E5 > 006C 0301
+E6 > 0063 0301
+E7 > 0063 0327
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 0065 0328
+EB > 0065 0308
+EC > 0065 030C
+ED > 0069 0301
+EE > 0069 0302
+EF > 0064 030C
+F0 > 0111
+F1 > 006E 0301
+F2 > 006E 030C
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 030B
+F6 > 006F 0308
+F7 > 00F7
+F8 > 0072 030C
+F9 > 0075 030A
+FA > 0075 0301
+FB > 0075 030B
+FC > 0075 0308
+FD > 0079 0301
+FE > 0074 0327
+FF > 02D9
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0083
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 0160
+8B > 2039
+8C > 015A
+8D > 0164
+8E > 017D
+8F > 0179
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 0161
+9B > 203A
+9C > 015B
+9D > 0165
+9E > 017E
+9F > 017A
+A0 > 00A0
+A1 > 02C7
+A2 > 02D8
+A3 > 0141
+A4 > 00A4
+A5 > 0104
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 015E
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 017B
+B0 > 00B0
+B1 > 00B1
+B2 > 02DB
+B3 > 0142
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 0105
+BA > 015F
+BB > 00BB
+BC > 013D
+BD > 02DD
+BE > 013E
+BF > 017C
+C0 > 0154
+C1 > 00C1
+C2 > 00C2
+C3 > 0102
+C4 > 00C4
+C5 > 0139
+C6 > 0106
+C7 > 00C7
+C8 > 010C
+C9 > 00C9
+CA > 0118
+CB > 00CB
+CC > 011A
+CD > 00CD
+CE > 00CE
+CF > 010E
+D0 > 0110
+D1 > 0143
+D2 > 0147
+D3 > 00D3
+D4 > 00D4
+D5 > 0150
+D6 > 00D6
+D7 > 00D7
+D8 > 0158
+D9 > 016E
+DA > 00DA
+DB > 0170
+DC > 00DC
+DD > 00DD
+DE > 0162
+DF > 00DF
+E0 > 0155
+E1 > 00E1
+E2 > 00E2
+E3 > 0103
+E4 > 00E4
+E5 > 013A
+E6 > 0107
+E7 > 00E7
+E8 > 010D
+E9 > 00E9
+EA > 0119
+EB > 00EB
+EC > 011B
+ED > 00ED
+EE > 00EE
+EF > 010F
+F0 > 0111
+F1 > 0144
+F2 > 0148
+F3 > 00F3
+F4 > 00F4
+F5 > 0151
+F6 > 00F6
+F7 > 00F7
+F8 > 0159
+F9 > 016F
+FA > 00FA
+FB > 0171
+FC > 00FC
+FD > 00FD
+FE > 0163
+FF > 02D9
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1250.cset b/data/cp1250.cset
new file mode 100644 (file)
index 0000000..291db28
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1250
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 015A L Y 8C 9C 8C 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE
+8D 0164 L Y 8D 9D 8D 54 74 74 # LATIN CAPITAL LETTER T WITH CARON
+8E 017D L Y 8E 9E 8E 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+8F 0179 L Y 8F 9F 8F 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 015B L Y 8C 9C 8C 73 73 73 # LATIN SMALL LETTER S WITH ACUTE
+9D 0165 L Y 8D 9D 8D 74 74 74 # LATIN SMALL LETTER T WITH CARON
+9E 017E L Y 8E 9E 8E 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+9F 017A L Y 8F 9F 8F 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 02C7 M Y A1 A1 A1 00 00 00 # CARON
+A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE
+A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 0104 L Y A5 B9 A5 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK
+B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 0105 L Y A5 B9 A5 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 013D L Y BC BE BC 4C 6C 6C # LATIN CAPITAL LETTER L WITH CARON
+BD 02DD - Y BD BD BD 00 00 00 # DOUBLE ACUTE ACCENT
+BE 013E L Y BC BE BC 6C 6C 6C # LATIN SMALL LETTER L WITH CARON
+BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+C0 0154 L Y C0 E0 C0 52 72 72 # LATIN CAPITAL LETTER R WITH ACUTE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 0139 L Y C5 E5 C5 4C 6C 6C # LATIN CAPITAL LETTER L WITH ACUTE
+C6 0106 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 011A L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH CARON
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 010E L Y CF EF CF 44 64 64 # LATIN CAPITAL LETTER D WITH CARON
+D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE
+D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE
+D2 0147 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CARON
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 0158 L Y D8 F8 D8 52 72 72 # LATIN CAPITAL LETTER R WITH CARON
+D9 016E L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH RING ABOVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 0170 L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 0162 L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH CEDILLA
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0155 L Y C0 E0 C0 72 72 72 # LATIN SMALL LETTER R WITH ACUTE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 013A L Y C5 E5 C5 6C 6C 6C # LATIN SMALL LETTER L WITH ACUTE
+E6 0107 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH ACUTE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 011B L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH CARON
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 010F L Y CF EF CF 64 64 64 # LATIN SMALL LETTER D WITH CARON
+F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE
+F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE
+F2 0148 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CARON
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 0159 L Y D8 F8 D8 72 72 72 # LATIN SMALL LETTER R WITH CARON
+F9 016F L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH RING ABOVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 0171 L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 0163 L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH CEDILLA
+FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE
diff --git a/data/cp1251.cmap b/data/cp1251.cmap
new file mode 100644 (file)
index 0000000..c38c640
--- /dev/null
@@ -0,0 +1,1903 @@
+INTERNAL
+/
+N 1037
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0098 > 98
+00A0 > A0
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00BB > BB
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > B7
+0400 > C5 # unsup: 0415 0300
+0401 > A8
+0402 > 80
+0403 > 81
+0404 > AA
+0405 > BD
+0406 > B2 /
+     N 1
+     0308 > AF
+     .
+0407 > AF
+0408 > A3
+0409 > 8A
+040A > 8C
+040B > 8E
+040C > 8D
+040D > C8 # unsup: 0418 0300
+040E > A1
+040F > 8F
+0410 > C0
+0411 > C1
+0412 > C2
+0413 > C3 /
+     N 1
+     0301 > 81
+     .
+0414 > C4
+0415 > C5 /
+     N 1
+     0308 > A8
+     .
+0416 > C6
+0417 > C7
+0418 > C8 /
+     N 1
+     0306 > C9
+     .
+0419 > C9
+041A > CA /
+     N 1
+     0301 > 8D
+     .
+041B > CB
+041C > CC
+041D > CD
+041E > CE
+041F > CF
+0420 > D0
+0421 > D1
+0422 > D2
+0423 > D3 /
+     N 1
+     0306 > A1
+     .
+0424 > D4
+0425 > D5
+0426 > D6
+0427 > D7
+0428 > D8
+0429 > D9
+042A > DA
+042B > DB
+042C > DC
+042D > DD
+042E > DE
+042F > DF
+0430 > E0
+0431 > E1
+0432 > E2
+0433 > E3 /
+     N 1
+     0301 > 83
+     .
+0434 > E4
+0435 > E5 /
+     N 1
+     0308 > B8
+     .
+0436 > E6
+0437 > E7
+0438 > E8 /
+     N 1
+     0306 > E9
+     .
+0439 > E9
+043A > EA /
+     N 1
+     0301 > 9D
+     .
+043B > EB
+043C > EC
+043D > ED
+043E > EE
+043F > EF
+0440 > F0
+0441 > F1
+0442 > F2
+0443 > F3 /
+     N 1
+     0306 > A2
+     .
+0444 > F4
+0445 > F5
+0446 > F6
+0447 > F7
+0448 > F8
+0449 > F9
+044A > FA
+044B > FB
+044C > FC
+044D > FD
+044E > FE
+044F > FF
+0450 > E5 # unsup: 0435 0300
+0451 > B8
+0452 > 90
+0453 > 83
+0454 > BA
+0455 > BE
+0456 > B3 /
+     N 1
+     0308 > BF
+     .
+0457 > BF
+0458 > BC
+0459 > 9A
+045A > 9C
+045B > 9E
+045C > 9D
+045D > E8 # unsup: 0438 0300
+045E > A2
+045F > 9F
+0490 > A5
+0491 > B4
+04C1 > C6 # unsup: 0416 0306
+04C2 > E6 # unsup: 0436 0306
+04D0 > C0 # unsup: 0410 0306
+04D1 > E0 # unsup: 0430 0306
+04D2 > C0 # unsup: 0410 0308
+04D3 > E0 # unsup: 0430 0308
+04D6 > C5 # unsup: 0415 0306
+04D7 > E5 # unsup: 0435 0306
+04DC > C6 # unsup: 0416 0308
+04DD > E6 # unsup: 0436 0308
+04DE > C7 # unsup: 0417 0308
+04DF > E7 # unsup: 0437 0308
+04E2 > C8 # unsup: 0418 0304
+04E3 > E8 # unsup: 0438 0304
+04E4 > C8 # unsup: 0418 0308
+04E5 > E8 # unsup: 0438 0308
+04E6 > CE # unsup: 041E 0308
+04E7 > EE # unsup: 043E 0308
+04EC > DD # unsup: 042D 0308
+04ED > FD # unsup: 044D 0308
+04EE > D3 # unsup: 0423 0304
+04EF > F3 # unsup: 0443 0304
+04F0 > D3 # unsup: 0423 0308
+04F1 > F3 # unsup: 0443 0308
+04F2 > D3 # unsup: 0423 030B
+04F3 > F3 # unsup: 0443 030B
+04F4 > D7 # unsup: 0427 0308
+04F5 > F7 # unsup: 0447 0308
+04F8 > DB # unsup: 042B 0308
+04F9 > FB # unsup: 044B 0308
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 88
+2116 > B9
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE2 > AC # compat
+FFE4 > A6 # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0098 > 98
+00A0 > A0
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00BB > BB
+037E > 3B
+0387 > B7
+0401 > A8
+0402 > 80
+0403 > 81
+0404 > AA
+0405 > BD
+0406 > B2 /
+     N 1
+     0308 > AF
+     .
+0407 > AF
+0408 > A3
+0409 > 8A
+040A > 8C
+040B > 8E
+040C > 8D
+040E > A1
+040F > 8F
+0410 > C0
+0411 > C1
+0412 > C2
+0413 > C3 /
+     N 1
+     0301 > 81
+     .
+0414 > C4
+0415 > C5 /
+     N 1
+     0308 > A8
+     .
+0416 > C6
+0417 > C7
+0418 > C8 /
+     N 1
+     0306 > C9
+     .
+0419 > C9
+041A > CA /
+     N 1
+     0301 > 8D
+     .
+041B > CB
+041C > CC
+041D > CD
+041E > CE
+041F > CF
+0420 > D0
+0421 > D1
+0422 > D2
+0423 > D3 /
+     N 1
+     0306 > A1
+     .
+0424 > D4
+0425 > D5
+0426 > D6
+0427 > D7
+0428 > D8
+0429 > D9
+042A > DA
+042B > DB
+042C > DC
+042D > DD
+042E > DE
+042F > DF
+0430 > E0
+0431 > E1
+0432 > E2
+0433 > E3 /
+     N 1
+     0301 > 83
+     .
+0434 > E4
+0435 > E5 /
+     N 1
+     0308 > B8
+     .
+0436 > E6
+0437 > E7
+0438 > E8 /
+     N 1
+     0306 > E9
+     .
+0439 > E9
+043A > EA /
+     N 1
+     0301 > 9D
+     .
+043B > EB
+043C > EC
+043D > ED
+043E > EE
+043F > EF
+0440 > F0
+0441 > F1
+0442 > F2
+0443 > F3 /
+     N 1
+     0306 > A2
+     .
+0444 > F4
+0445 > F5
+0446 > F6
+0447 > F7
+0448 > F8
+0449 > F9
+044A > FA
+044B > FB
+044C > FC
+044D > FD
+044E > FE
+044F > FF
+0451 > B8
+0452 > 90
+0453 > 83
+0454 > BA
+0455 > BE
+0456 > B3 /
+     N 1
+     0308 > BF
+     .
+0457 > BF
+0458 > BC
+0459 > 9A
+045A > 9C
+045B > 9E
+045C > 9D
+045E > A2
+045F > 9F
+0490 > A5
+0491 > B4
+1FEF > 60
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 88
+2116 > B9
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0402
+81 > 0413 0301
+82 > 201A
+83 > 0433 0301
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 20AC
+89 > 2030
+8A > 0409
+8B > 2039
+8C > 040A
+8D > 041A 0301
+8E > 040B
+8F > 040F
+90 > 0452
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 0459
+9B > 203A
+9C > 045A
+9D > 043A 0301
+9E > 045B
+9F > 045F
+A0 > 00A0
+A1 > 0423 0306
+A2 > 0443 0306
+A3 > 0408
+A4 > 00A4
+A5 > 0490
+A6 > 00A6
+A7 > 00A7
+A8 > 0415 0308
+A9 > 00A9
+AA > 0404
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 0406 0308
+B0 > 00B0
+B1 > 00B1
+B2 > 0406
+B3 > 0456
+B4 > 0491
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 0435 0308
+B9 > 2116
+BA > 0454
+BB > 00BB
+BC > 0458
+BD > 0405
+BE > 0455
+BF > 0456 0308
+C0 > 0410
+C1 > 0411
+C2 > 0412
+C3 > 0413
+C4 > 0414
+C5 > 0415
+C6 > 0416
+C7 > 0417
+C8 > 0418
+C9 > 0418 0306
+CA > 041A
+CB > 041B
+CC > 041C
+CD > 041D
+CE > 041E
+CF > 041F
+D0 > 0420
+D1 > 0421
+D2 > 0422
+D3 > 0423
+D4 > 0424
+D5 > 0425
+D6 > 0426
+D7 > 0427
+D8 > 0428
+D9 > 0429
+DA > 042A
+DB > 042B
+DC > 042C
+DD > 042D
+DE > 042E
+DF > 042F
+E0 > 0430
+E1 > 0431
+E2 > 0432
+E3 > 0433
+E4 > 0434
+E5 > 0435
+E6 > 0436
+E7 > 0437
+E8 > 0438
+E9 > 0438 0306
+EA > 043A
+EB > 043B
+EC > 043C
+ED > 043D
+EE > 043E
+EF > 043F
+F0 > 0440
+F1 > 0441
+F2 > 0442
+F3 > 0443
+F4 > 0444
+F5 > 0445
+F6 > 0446
+F7 > 0447
+F8 > 0448
+F9 > 0449
+FA > 044A
+FB > 044B
+FC > 044C
+FD > 044D
+FE > 044E
+FF > 044F
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0402
+81 > 0403
+82 > 201A
+83 > 0453
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 20AC
+89 > 2030
+8A > 0409
+8B > 2039
+8C > 040A
+8D > 040C
+8E > 040B
+8F > 040F
+90 > 0452
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 0459
+9B > 203A
+9C > 045A
+9D > 045C
+9E > 045B
+9F > 045F
+A0 > 00A0
+A1 > 040E
+A2 > 045E
+A3 > 0408
+A4 > 00A4
+A5 > 0490
+A6 > 00A6
+A7 > 00A7
+A8 > 0401
+A9 > 00A9
+AA > 0404
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 0407
+B0 > 00B0
+B1 > 00B1
+B2 > 0406
+B3 > 0456
+B4 > 0491
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 0451
+B9 > 2116
+BA > 0454
+BB > 00BB
+BC > 0458
+BD > 0405
+BE > 0455
+BF > 0457
+C0 > 0410
+C1 > 0411
+C2 > 0412
+C3 > 0413
+C4 > 0414
+C5 > 0415
+C6 > 0416
+C7 > 0417
+C8 > 0418
+C9 > 0419
+CA > 041A
+CB > 041B
+CC > 041C
+CD > 041D
+CE > 041E
+CF > 041F
+D0 > 0420
+D1 > 0421
+D2 > 0422
+D3 > 0423
+D4 > 0424
+D5 > 0425
+D6 > 0426
+D7 > 0427
+D8 > 0428
+D9 > 0429
+DA > 042A
+DB > 042B
+DC > 042C
+DD > 042D
+DE > 042E
+DF > 042F
+E0 > 0430
+E1 > 0431
+E2 > 0432
+E3 > 0433
+E4 > 0434
+E5 > 0435
+E6 > 0436
+E7 > 0437
+E8 > 0438
+E9 > 0439
+EA > 043A
+EB > 043B
+EC > 043C
+ED > 043D
+EE > 043E
+EF > 043F
+F0 > 0440
+F1 > 0441
+F2 > 0442
+F3 > 0443
+F4 > 0444
+F5 > 0445
+F6 > 0446
+F7 > 0447
+F8 > 0448
+F9 > 0449
+FA > 044A
+FB > 044B
+FC > 044C
+FD > 044D
+FE > 044E
+FF > 044F
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1251.cset b/data/cp1251.cset
new file mode 100644 (file)
index 0000000..3940efa
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1251
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0402 L Y 80 90 80 80 90 90 # CYRILLIC CAPITAL LETTER DJE
+81 0403 L Y 81 83 81 81 83 83 # CYRILLIC CAPITAL LETTER GJE
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0453 L Y 81 83 81 83 83 83 # CYRILLIC SMALL LETTER GJE
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 20AC - Y 88 88 88 00 00 00 # EURO SIGN
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 0409 L Y 8A 9A 8A 8A 9A 9A # CYRILLIC CAPITAL LETTER LJE
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 040A L Y 8C 9C 8C 8C 9C 9C # CYRILLIC CAPITAL LETTER NJE
+8D 040C L Y 8D 9D 8D 8D 9D 9D # CYRILLIC CAPITAL LETTER KJE
+8E 040B L Y 8E 9E 8E 8E 9E 9E # CYRILLIC CAPITAL LETTER TSHE
+8F 040F L Y 8F 9F 8F 8F 9F 9F # CYRILLIC CAPITAL LETTER DZHE
+90 0452 L Y 80 90 80 90 90 90 # CYRILLIC SMALL LETTER DJE
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 0459 L Y 8A 9A 8A 9A 9A 9A # CYRILLIC SMALL LETTER LJE
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 045A L Y 8C 9C 8C 9C 9C 9C # CYRILLIC SMALL LETTER NJE
+9D 045C L Y 8D 9D 8D 9D 9D 9D # CYRILLIC SMALL LETTER KJE
+9E 045B L Y 8E 9E 8E 9E 9E 9E # CYRILLIC SMALL LETTER TSHE
+9F 045F L Y 8F 9F 8F 9F 9F 9F # CYRILLIC SMALL LETTER DZHE
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 040E L Y A1 A2 A1 A1 A2 A2 # CYRILLIC CAPITAL LETTER SHORT U
+A2 045E L Y A1 A2 A1 A2 A2 A2 # CYRILLIC SMALL LETTER SHORT U
+A3 0408 L Y A3 BC A3 A3 BC BC # CYRILLIC CAPITAL LETTER JE
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 0490 L Y A5 B4 A5 A5 B4 B4 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 0401 L Y A8 B8 A8 A8 B8 B8 # CYRILLIC CAPITAL LETTER IO
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 0404 L Y AA BA AA AA BA BA # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 0407 L Y AF BF AF AF BF BF # CYRILLIC CAPITAL LETTER YI
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 0406 L Y B2 B3 B2 B2 B3 B3 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+B3 0456 L Y B2 B3 B2 B3 B3 B3 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+B4 0491 L Y A5 B4 A5 B4 B4 B4 # CYRILLIC SMALL LETTER GHE WITH UPTURN
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 0451 L Y A8 B8 A8 B8 B8 B8 # CYRILLIC SMALL LETTER IO
+B9 2116 . N B9 B9 B9 00 00 00 # <unused special>
+BA 0454 L Y AA BA AA BA BA BA # CYRILLIC SMALL LETTER UKRAINIAN IE
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 0458 L Y A3 BC A3 BC BC BC # CYRILLIC SMALL LETTER JE
+BD 0405 L Y BD BE BD BD BE BE # CYRILLIC CAPITAL LETTER DZE
+BE 0455 L Y BD BE BD BE BE BE # CYRILLIC SMALL LETTER DZE
+BF 0457 L Y AF BF AF BF BF BF # CYRILLIC SMALL LETTER YI
+C0 0410 L Y C0 E0 C0 C0 2A 00 # CYRILLIC CAPITAL LETTER A
+C1 0411 L Y C1 E1 C1 C1 E1 E1 # CYRILLIC CAPITAL LETTER BE
+C2 0412 L Y C2 E2 C2 C2 E2 E2 # CYRILLIC CAPITAL LETTER VE
+C3 0413 L Y C3 E3 C3 C3 E3 E3 # CYRILLIC CAPITAL LETTER GHE
+C4 0414 L Y C4 E4 C4 C4 E4 E4 # CYRILLIC CAPITAL LETTER DE
+C5 0415 L Y C5 E5 C5 C5 2A 00 # CYRILLIC CAPITAL LETTER IE
+C6 0416 L Y C6 E6 C6 C6 E6 E6 # CYRILLIC CAPITAL LETTER ZHE
+C7 0417 L Y C7 E7 C7 C7 E7 E7 # CYRILLIC CAPITAL LETTER ZE
+C8 0418 L Y C8 E8 C8 C8 2A 00 # CYRILLIC CAPITAL LETTER I
+C9 0419 L Y C9 E9 C9 C9 E9 E9 # CYRILLIC CAPITAL LETTER SHORT I
+CA 041A L Y CA EA CA CA EA EA # CYRILLIC CAPITAL LETTER KA
+CB 041B L Y CB EB CB CB EB EB # CYRILLIC CAPITAL LETTER EL
+CC 041C L Y CC EC CC CC EC EC # CYRILLIC CAPITAL LETTER EM
+CD 041D L Y CD ED CD CD ED ED # CYRILLIC CAPITAL LETTER EN
+CE 041E L Y CE EE CE CE 2A 00 # CYRILLIC CAPITAL LETTER O
+CF 041F L Y CF EF CF CF EF EF # CYRILLIC CAPITAL LETTER PE
+D0 0420 L Y D0 F0 D0 D0 F0 F0 # CYRILLIC CAPITAL LETTER ER
+D1 0421 L Y D1 F1 D1 D1 F1 F1 # CYRILLIC CAPITAL LETTER ES
+D2 0422 L Y D2 F2 D2 D2 F2 F2 # CYRILLIC CAPITAL LETTER TE
+D3 0423 L Y D3 F3 D3 D3 2A 00 # CYRILLIC CAPITAL LETTER U
+D4 0424 L Y D4 F4 D4 D4 F4 F4 # CYRILLIC CAPITAL LETTER EF
+D5 0425 L Y D5 F5 D5 D5 F5 F5 # CYRILLIC CAPITAL LETTER HA
+D6 0426 L Y D6 F6 D6 D6 F6 F6 # CYRILLIC CAPITAL LETTER TSE
+D7 0427 L Y D7 F7 D7 D7 F7 F7 # CYRILLIC CAPITAL LETTER CHE
+D8 0428 L Y D8 F8 D8 D8 F8 F8 # CYRILLIC CAPITAL LETTER SHA
+D9 0429 L Y D9 F9 D9 D9 F9 F9 # CYRILLIC CAPITAL LETTER SHCHA
+DA 042A L Y DA FA DA DA FA FA # CYRILLIC CAPITAL LETTER HARD SIGN
+DB 042B L Y DB FB DB DB 2A 00 # CYRILLIC CAPITAL LETTER YERU
+DC 042C L Y DC FC DC DC FC FC # CYRILLIC CAPITAL LETTER SOFT SIGN
+DD 042D L Y DD FD DD DD 2A 00 # CYRILLIC CAPITAL LETTER E
+DE 042E L Y DE FE DE DE 2A 00 # CYRILLIC CAPITAL LETTER YU
+DF 042F L Y DF FF DF DF 2A 00 # CYRILLIC CAPITAL LETTER YA
+E0 0430 L Y C0 E0 C0 E0 2A 00 # CYRILLIC SMALL LETTER A
+E1 0431 L Y C1 E1 C1 E1 E1 E1 # CYRILLIC SMALL LETTER BE
+E2 0432 L Y C2 E2 C2 E2 E2 E2 # CYRILLIC SMALL LETTER VE
+E3 0433 L Y C3 E3 C3 E3 E3 E3 # CYRILLIC SMALL LETTER GHE
+E4 0434 L Y C4 E4 C4 E4 E4 E4 # CYRILLIC SMALL LETTER DE
+E5 0435 L Y C5 E5 C5 E5 2A 00 # CYRILLIC SMALL LETTER IE
+E6 0436 L Y C6 E6 C6 E6 E6 E6 # CYRILLIC SMALL LETTER ZHE
+E7 0437 L Y C7 E7 C7 E7 E7 E7 # CYRILLIC SMALL LETTER ZE
+E8 0438 L Y C8 E8 C8 E8 2A 00 # CYRILLIC SMALL LETTER I
+E9 0439 L Y C9 E9 C9 E9 E9 E9 # CYRILLIC SMALL LETTER SHORT I
+EA 043A L Y CA EA CA EA EA EA # CYRILLIC SMALL LETTER KA
+EB 043B L Y CB EB CB EB EB EB # CYRILLIC SMALL LETTER EL
+EC 043C L Y CC EC CC EC EC EC # CYRILLIC SMALL LETTER EM
+ED 043D L Y CD ED CD ED ED ED # CYRILLIC SMALL LETTER EN
+EE 043E L Y CE EE CE EE 2A 00 # CYRILLIC SMALL LETTER O
+EF 043F L Y CF EF CF EF EF EF # CYRILLIC SMALL LETTER PE
+F0 0440 L Y D0 F0 D0 F0 F0 F0 # CYRILLIC SMALL LETTER ER
+F1 0441 L Y D1 F1 D1 F1 F1 F1 # CYRILLIC SMALL LETTER ES
+F2 0442 L Y D2 F2 D2 F2 F2 F2 # CYRILLIC SMALL LETTER TE
+F3 0443 L Y D3 F3 D3 F3 2A 00 # CYRILLIC SMALL LETTER U
+F4 0444 L Y D4 F4 D4 F4 F4 F4 # CYRILLIC SMALL LETTER EF
+F5 0445 L Y D5 F5 D5 F5 F5 F5 # CYRILLIC SMALL LETTER HA
+F6 0446 L Y D6 F6 D6 F6 F6 F6 # CYRILLIC SMALL LETTER TSE
+F7 0447 L Y D7 F7 D7 F7 F7 F7 # CYRILLIC SMALL LETTER CHE
+F8 0448 L Y D8 F8 D8 F8 F8 F8 # CYRILLIC SMALL LETTER SHA
+F9 0449 L Y D9 F9 D9 F9 F9 F9 # CYRILLIC SMALL LETTER SHCHA
+FA 044A L Y DA FA DA FA FA FA # CYRILLIC SMALL LETTER HARD SIGN
+FB 044B L Y DB FB DB FB 2A 00 # CYRILLIC SMALL LETTER YERU
+FC 044C L Y DC FC DC FC FC FC # CYRILLIC SMALL LETTER SOFT SIGN
+FD 044D L Y DD FD DD FD 2A 00 # CYRILLIC SMALL LETTER E
+FE 044E L Y DE FE DE FE 2A 00 # CYRILLIC SMALL LETTER YU
+FF 044F L Y DF FF DF FF 2A 00 # CYRILLIC SMALL LETTER YA
diff --git a/data/cp1252.cmap b/data/cp1252.cmap
new file mode 100644 (file)
index 0000000..91c33c7
--- /dev/null
@@ -0,0 +1,1943 @@
+INTERNAL
+/
+N 952
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > 8A
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 2
+     0301 > DD
+     0308 > 9F
+     .
+005A > 5A /
+     N 1
+     030C > 8E
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > 9A
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A /
+     N 1
+     030C > 9E
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008D > 8D
+008F > 8F
+0090 > 90
+009D > 9D
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 8C
+0153 > 9C
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 8A
+0161 > 9A
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 9F
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 8E
+017E > 9E
+017F > 73 # compat
+0192 > 83
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 8E # compat
+01C5 > 44 9E # compat
+01C6 > 64 9E # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C6 > 88
+02DC > 98
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 8A # unsup: 0160 0307
+1E67 > 9A # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > 8A
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 2
+     0301 > DD
+     0308 > 9F
+     .
+005A > 5A /
+     N 1
+     030C > 8E
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > 9A
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A /
+     N 1
+     030C > 9E
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008D > 8D
+008F > 8F
+0090 > 90
+009D > 9D
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+0152 > 8C
+0153 > 9C
+0160 > 8A
+0161 > 9A
+0178 > 9F
+017D > 8E
+017E > 9E
+0192 > 83
+02C6 > 88
+02DC > 98
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0053 030C
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 005A 030C
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 0073 030C
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 007A 030C
+9F > 0059 0308
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 00D0
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0059 0301
+DE > 00DE
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 00F0
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0079 0301
+FE > 00FE
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0160
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 017D
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 0161
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 017E
+9F > 0178
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 00D0
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 00DD
+DE > 00DE
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 00F0
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 00FD
+FE > 00FE
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1252.cset b/data/cp1252.cset
new file mode 100644 (file)
index 0000000..2d1fb1f
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1252
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 017D L Y 8E 9E 8E 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 017E L Y 8E 9E 8E 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN
+FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/cp1253.cmap b/data/cp1253.cmap
new file mode 100644 (file)
index 0000000..1efbba9
--- /dev/null
@@ -0,0 +1,2148 @@
+INTERNAL
+/
+N 1223
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0088 > 88
+008A > 8A
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0098 > 98
+009A > 9A
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8 /
+     N 1
+     0301 > A1
+     .
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00BB > BB
+00BD > BD
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+0192 > 83
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0384 > B4
+0385 > A1
+0386 > A2
+0387 > B7
+0388 > B8
+0389 > B9
+038A > BA
+038C > BC
+038E > BE
+038F > BF
+0390 > C0
+0391 > C1 /
+     N 1
+     0301 > A2
+     .
+0392 > C2
+0393 > C3
+0394 > C4
+0395 > C5 /
+     N 1
+     0301 > B8
+     .
+0396 > C6
+0397 > C7 /
+     N 1
+     0301 > B9
+     .
+0398 > C8
+0399 > C9 /
+     N 2
+     0301 > BA
+     0308 > DA
+     .
+039A > CA
+039B > CB
+039C > CC
+039D > CD
+039E > CE
+039F > CF /
+     N 1
+     0301 > BC
+     .
+03A0 > D0
+03A1 > D1
+03A3 > D3
+03A4 > D4
+03A5 > D5 /
+     N 2
+     0301 > BE
+     0308 > DB
+     .
+03A6 > D6
+03A7 > D7
+03A8 > D8
+03A9 > D9 /
+     N 1
+     0301 > BF
+     .
+03AA > DA
+03AB > DB
+03AC > DC
+03AD > DD
+03AE > DE
+03AF > DF
+03B0 > E0
+03B1 > E1 /
+     N 1
+     0301 > DC
+     .
+03B2 > E2
+03B3 > E3
+03B4 > E4
+03B5 > E5 /
+     N 1
+     0301 > DD
+     .
+03B6 > E6
+03B7 > E7 /
+     N 1
+     0301 > DE
+     .
+03B8 > E8
+03B9 > E9 /
+     N 2
+     0301 > DF
+     0308 > FA /
+          N 1
+          0301 > C0
+          .
+     .
+03BA > EA
+03BB > EB
+03BC > EC
+03BD > ED
+03BE > EE
+03BF > EF /
+     N 1
+     0301 > FC
+     .
+03C0 > F0
+03C1 > F1
+03C2 > F2
+03C3 > F3
+03C4 > F4
+03C5 > F5 /
+     N 2
+     0301 > FD
+     0308 > FB /
+          N 1
+          0301 > E0
+          .
+     .
+03C6 > F6
+03C7 > F7
+03C8 > F8
+03C9 > F9 /
+     N 1
+     0301 > FE
+     .
+03CA > FA /
+     N 1
+     0301 > C0
+     .
+03CB > FB /
+     N 1
+     0301 > E0
+     .
+03CC > FC
+03CD > FD
+03CE > FE
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1F00 > E1 # unsup: 03B1 0313
+1F01 > E1 # unsup: 03B1 0314
+1F02 > E1 # unsup: 03B1 0313 0300
+1F03 > E1 # unsup: 03B1 0314 0300
+1F04 > E1 # unsup: 03B1 0313 0301
+1F05 > E1 # unsup: 03B1 0314 0301
+1F06 > E1 # unsup: 03B1 0313 0342
+1F07 > E1 # unsup: 03B1 0314 0342
+1F08 > C1 # unsup: 0391 0313
+1F09 > C1 # unsup: 0391 0314
+1F0A > C1 # unsup: 0391 0313 0300
+1F0B > C1 # unsup: 0391 0314 0300
+1F0C > C1 # unsup: 0391 0313 0301
+1F0D > C1 # unsup: 0391 0314 0301
+1F0E > C1 # unsup: 0391 0313 0342
+1F0F > C1 # unsup: 0391 0314 0342
+1F10 > E5 # unsup: 03B5 0313
+1F11 > E5 # unsup: 03B5 0314
+1F12 > E5 # unsup: 03B5 0313 0300
+1F13 > E5 # unsup: 03B5 0314 0300
+1F14 > E5 # unsup: 03B5 0313 0301
+1F15 > E5 # unsup: 03B5 0314 0301
+1F18 > C5 # unsup: 0395 0313
+1F19 > C5 # unsup: 0395 0314
+1F1A > C5 # unsup: 0395 0313 0300
+1F1B > C5 # unsup: 0395 0314 0300
+1F1C > C5 # unsup: 0395 0313 0301
+1F1D > C5 # unsup: 0395 0314 0301
+1F20 > E7 # unsup: 03B7 0313
+1F21 > E7 # unsup: 03B7 0314
+1F22 > E7 # unsup: 03B7 0313 0300
+1F23 > E7 # unsup: 03B7 0314 0300
+1F24 > E7 # unsup: 03B7 0313 0301
+1F25 > E7 # unsup: 03B7 0314 0301
+1F26 > E7 # unsup: 03B7 0313 0342
+1F27 > E7 # unsup: 03B7 0314 0342
+1F28 > C7 # unsup: 0397 0313
+1F29 > C7 # unsup: 0397 0314
+1F2A > C7 # unsup: 0397 0313 0300
+1F2B > C7 # unsup: 0397 0314 0300
+1F2C > C7 # unsup: 0397 0313 0301
+1F2D > C7 # unsup: 0397 0314 0301
+1F2E > C7 # unsup: 0397 0313 0342
+1F2F > C7 # unsup: 0397 0314 0342
+1F30 > E9 # unsup: 03B9 0313
+1F31 > E9 # unsup: 03B9 0314
+1F32 > E9 # unsup: 03B9 0313 0300
+1F33 > E9 # unsup: 03B9 0314 0300
+1F34 > E9 # unsup: 03B9 0313 0301
+1F35 > E9 # unsup: 03B9 0314 0301
+1F36 > E9 # unsup: 03B9 0313 0342
+1F37 > E9 # unsup: 03B9 0314 0342
+1F38 > C9 # unsup: 0399 0313
+1F39 > C9 # unsup: 0399 0314
+1F3A > C9 # unsup: 0399 0313 0300
+1F3B > C9 # unsup: 0399 0314 0300
+1F3C > C9 # unsup: 0399 0313 0301
+1F3D > C9 # unsup: 0399 0314 0301
+1F3E > C9 # unsup: 0399 0313 0342
+1F3F > C9 # unsup: 0399 0314 0342
+1F40 > EF # unsup: 03BF 0313
+1F41 > EF # unsup: 03BF 0314
+1F42 > EF # unsup: 03BF 0313 0300
+1F43 > EF # unsup: 03BF 0314 0300
+1F44 > EF # unsup: 03BF 0313 0301
+1F45 > EF # unsup: 03BF 0314 0301
+1F48 > CF # unsup: 039F 0313
+1F49 > CF # unsup: 039F 0314
+1F4A > CF # unsup: 039F 0313 0300
+1F4B > CF # unsup: 039F 0314 0300
+1F4C > CF # unsup: 039F 0313 0301
+1F4D > CF # unsup: 039F 0314 0301
+1F50 > F5 # unsup: 03C5 0313
+1F51 > F5 # unsup: 03C5 0314
+1F52 > F5 # unsup: 03C5 0313 0300
+1F53 > F5 # unsup: 03C5 0314 0300
+1F54 > F5 # unsup: 03C5 0313 0301
+1F55 > F5 # unsup: 03C5 0314 0301
+1F56 > F5 # unsup: 03C5 0313 0342
+1F57 > F5 # unsup: 03C5 0314 0342
+1F59 > D5 # unsup: 03A5 0314
+1F5B > D5 # unsup: 03A5 0314 0300
+1F5D > D5 # unsup: 03A5 0314 0301
+1F5F > D5 # unsup: 03A5 0314 0342
+1F60 > F9 # unsup: 03C9 0313
+1F61 > F9 # unsup: 03C9 0314
+1F62 > F9 # unsup: 03C9 0313 0300
+1F63 > F9 # unsup: 03C9 0314 0300
+1F64 > F9 # unsup: 03C9 0313 0301
+1F65 > F9 # unsup: 03C9 0314 0301
+1F66 > F9 # unsup: 03C9 0313 0342
+1F67 > F9 # unsup: 03C9 0314 0342
+1F68 > D9 # unsup: 03A9 0313
+1F69 > D9 # unsup: 03A9 0314
+1F6A > D9 # unsup: 03A9 0313 0300
+1F6B > D9 # unsup: 03A9 0314 0300
+1F6C > D9 # unsup: 03A9 0313 0301
+1F6D > D9 # unsup: 03A9 0314 0301
+1F6E > D9 # unsup: 03A9 0313 0342
+1F6F > D9 # unsup: 03A9 0314 0342
+1F70 > E1 # unsup: 03B1 0300
+1F71 > DC
+1F72 > E5 # unsup: 03B5 0300
+1F73 > DD
+1F74 > E7 # unsup: 03B7 0300
+1F75 > DE
+1F76 > E9 # unsup: 03B9 0300
+1F77 > DF
+1F78 > EF # unsup: 03BF 0300
+1F79 > FC
+1F7A > F5 # unsup: 03C5 0300
+1F7B > FD
+1F7C > F9 # unsup: 03C9 0300
+1F7D > FE
+1F80 > E1 # unsup: 03B1 0313 0345
+1F81 > E1 # unsup: 03B1 0314 0345
+1F82 > E1 # unsup: 03B1 0313 0300 0345
+1F83 > E1 # unsup: 03B1 0314 0300 0345
+1F84 > E1 # unsup: 03B1 0313 0301 0345
+1F85 > E1 # unsup: 03B1 0314 0301 0345
+1F86 > E1 # unsup: 03B1 0313 0342 0345
+1F87 > E1 # unsup: 03B1 0314 0342 0345
+1F88 > C1 # unsup: 0391 0313 0345
+1F89 > C1 # unsup: 0391 0314 0345
+1F8A > C1 # unsup: 0391 0313 0300 0345
+1F8B > C1 # unsup: 0391 0314 0300 0345
+1F8C > C1 # unsup: 0391 0313 0301 0345
+1F8D > C1 # unsup: 0391 0314 0301 0345
+1F8E > C1 # unsup: 0391 0313 0342 0345
+1F8F > C1 # unsup: 0391 0314 0342 0345
+1F90 > E7 # unsup: 03B7 0313 0345
+1F91 > E7 # unsup: 03B7 0314 0345
+1F92 > E7 # unsup: 03B7 0313 0300 0345
+1F93 > E7 # unsup: 03B7 0314 0300 0345
+1F94 > E7 # unsup: 03B7 0313 0301 0345
+1F95 > E7 # unsup: 03B7 0314 0301 0345
+1F96 > E7 # unsup: 03B7 0313 0342 0345
+1F97 > E7 # unsup: 03B7 0314 0342 0345
+1F98 > C7 # unsup: 0397 0313 0345
+1F99 > C7 # unsup: 0397 0314 0345
+1F9A > C7 # unsup: 0397 0313 0300 0345
+1F9B > C7 # unsup: 0397 0314 0300 0345
+1F9C > C7 # unsup: 0397 0313 0301 0345
+1F9D > C7 # unsup: 0397 0314 0301 0345
+1F9E > C7 # unsup: 0397 0313 0342 0345
+1F9F > C7 # unsup: 0397 0314 0342 0345
+1FA0 > F9 # unsup: 03C9 0313 0345
+1FA1 > F9 # unsup: 03C9 0314 0345
+1FA2 > F9 # unsup: 03C9 0313 0300 0345
+1FA3 > F9 # unsup: 03C9 0314 0300 0345
+1FA4 > F9 # unsup: 03C9 0313 0301 0345
+1FA5 > F9 # unsup: 03C9 0314 0301 0345
+1FA6 > F9 # unsup: 03C9 0313 0342 0345
+1FA7 > F9 # unsup: 03C9 0314 0342 0345
+1FA8 > D9 # unsup: 03A9 0313 0345
+1FA9 > D9 # unsup: 03A9 0314 0345
+1FAA > D9 # unsup: 03A9 0313 0300 0345
+1FAB > D9 # unsup: 03A9 0314 0300 0345
+1FAC > D9 # unsup: 03A9 0313 0301 0345
+1FAD > D9 # unsup: 03A9 0314 0301 0345
+1FAE > D9 # unsup: 03A9 0313 0342 0345
+1FAF > D9 # unsup: 03A9 0314 0342 0345
+1FB0 > E1 # unsup: 03B1 0306
+1FB1 > E1 # unsup: 03B1 0304
+1FB2 > E1 # unsup: 03B1 0300 0345
+1FB3 > E1 # unsup: 03B1 0345
+1FB4 > DC # unsup: 03AC 0345
+1FB6 > E1 # unsup: 03B1 0342
+1FB7 > E1 # unsup: 03B1 0342 0345
+1FB8 > C1 # unsup: 0391 0306
+1FB9 > C1 # unsup: 0391 0304
+1FBA > C1 # unsup: 0391 0300
+1FBB > A2
+1FBC > C1 # unsup: 0391 0345
+1FBE > E9
+1FC1 > A8 # unsup: 00A8 0342
+1FC2 > E7 # unsup: 03B7 0300 0345
+1FC3 > E7 # unsup: 03B7 0345
+1FC4 > DE # unsup: 03AE 0345
+1FC6 > E7 # unsup: 03B7 0342
+1FC7 > E7 # unsup: 03B7 0342 0345
+1FC8 > C5 # unsup: 0395 0300
+1FC9 > B8
+1FCA > C7 # unsup: 0397 0300
+1FCB > B9
+1FCC > C7 # unsup: 0397 0345
+1FD0 > E9 # unsup: 03B9 0306
+1FD1 > E9 # unsup: 03B9 0304
+1FD2 > FA # unsup: 03CA 0300
+1FD3 > C0
+1FD6 > E9 # unsup: 03B9 0342
+1FD7 > FA # unsup: 03CA 0342
+1FD8 > C9 # unsup: 0399 0306
+1FD9 > C9 # unsup: 0399 0304
+1FDA > C9 # unsup: 0399 0300
+1FDB > BA
+1FE0 > F5 # unsup: 03C5 0306
+1FE1 > F5 # unsup: 03C5 0304
+1FE2 > FB # unsup: 03CB 0300
+1FE3 > E0
+1FE4 > F1 # unsup: 03C1 0313
+1FE5 > F1 # unsup: 03C1 0314
+1FE6 > F5 # unsup: 03C5 0342
+1FE7 > FB # unsup: 03CB 0342
+1FE8 > D5 # unsup: 03A5 0306
+1FE9 > D5 # unsup: 03A5 0304
+1FEA > D5 # unsup: 03A5 0300
+1FEB > BE
+1FEC > D1 # unsup: 03A1 0314
+1FED > A8 # unsup: 00A8 0300
+1FEE > A1
+1FEF > 60
+1FF2 > F9 # unsup: 03C9 0300 0345
+1FF3 > F9 # unsup: 03C9 0345
+1FF4 > FE # unsup: 03CE 0345
+1FF6 > F9 # unsup: 03C9 0342
+1FF7 > F9 # unsup: 03C9 0342 0345
+1FF8 > CF # unsup: 039F 0300
+1FF9 > BC
+1FFA > D9 # unsup: 03A9 0300
+1FFB > BF
+1FFC > D9 # unsup: 03A9 0345
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2015 > AF
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 274
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0088 > 88
+008A > 8A
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0098 > 98
+009A > 9A
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8 /
+     N 1
+     0301 > A1
+     .
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00BB > BB
+00BD > BD
+0192 > 83
+037E > 3B
+0384 > B4
+0385 > A1
+0386 > A2
+0387 > B7
+0388 > B8
+0389 > B9
+038A > BA
+038C > BC
+038E > BE
+038F > BF
+0390 > C0
+0391 > C1 /
+     N 1
+     0301 > A2
+     .
+0392 > C2
+0393 > C3
+0394 > C4
+0395 > C5 /
+     N 1
+     0301 > B8
+     .
+0396 > C6
+0397 > C7 /
+     N 1
+     0301 > B9
+     .
+0398 > C8
+0399 > C9 /
+     N 2
+     0301 > BA
+     0308 > DA
+     .
+039A > CA
+039B > CB
+039C > CC
+039D > CD
+039E > CE
+039F > CF /
+     N 1
+     0301 > BC
+     .
+03A0 > D0
+03A1 > D1
+03A3 > D3
+03A4 > D4
+03A5 > D5 /
+     N 2
+     0301 > BE
+     0308 > DB
+     .
+03A6 > D6
+03A7 > D7
+03A8 > D8
+03A9 > D9 /
+     N 1
+     0301 > BF
+     .
+03AA > DA
+03AB > DB
+03AC > DC
+03AD > DD
+03AE > DE
+03AF > DF
+03B0 > E0
+03B1 > E1 /
+     N 1
+     0301 > DC
+     .
+03B2 > E2
+03B3 > E3
+03B4 > E4
+03B5 > E5 /
+     N 1
+     0301 > DD
+     .
+03B6 > E6
+03B7 > E7 /
+     N 1
+     0301 > DE
+     .
+03B8 > E8
+03B9 > E9 /
+     N 2
+     0301 > DF
+     0308 > FA /
+          N 1
+          0301 > C0
+          .
+     .
+03BA > EA
+03BB > EB
+03BC > EC
+03BD > ED
+03BE > EE
+03BF > EF /
+     N 1
+     0301 > FC
+     .
+03C0 > F0
+03C1 > F1
+03C2 > F2
+03C3 > F3
+03C4 > F4
+03C5 > F5 /
+     N 2
+     0301 > FD
+     0308 > FB /
+          N 1
+          0301 > E0
+          .
+     .
+03C6 > F6
+03C7 > F7
+03C8 > F8
+03C9 > F9 /
+     N 1
+     0301 > FE
+     .
+03CA > FA /
+     N 1
+     0301 > C0
+     .
+03CB > FB /
+     N 1
+     0301 > E0
+     .
+03CC > FC
+03CD > FD
+03CE > FE
+1F71 > DC
+1F73 > DD
+1F75 > DE
+1F77 > DF
+1F79 > FC
+1F7B > FD
+1F7D > FE
+1FBB > A2
+1FBE > E9
+1FC9 > B8
+1FCB > B9
+1FD3 > C0
+1FDB > BA
+1FE3 > E0
+1FEB > BE
+1FEE > A1
+1FEF > 60
+1FF9 > BC
+1FFB > BF
+2013 > 96
+2014 > 97
+2015 > AF
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 253
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A8 0301
+A2 > 0391 0301
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 2015
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 0384
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 0395 0301
+B9 > 0397 0301
+BA > 0399 0301
+BB > 00BB
+BC > 039F 0301
+BD > 00BD
+BE > 03A5 0301
+BF > 03A9 0301
+C0 > 03B9 0308 0301
+C1 > 0391
+C2 > 0392
+C3 > 0393
+C4 > 0394
+C5 > 0395
+C6 > 0396
+C7 > 0397
+C8 > 0398
+C9 > 0399
+CA > 039A
+CB > 039B
+CC > 039C
+CD > 039D
+CE > 039E
+CF > 039F
+D0 > 03A0
+D1 > 03A1
+D3 > 03A3
+D4 > 03A4
+D5 > 03A5
+D6 > 03A6
+D7 > 03A7
+D8 > 03A8
+D9 > 03A9
+DA > 0399 0308
+DB > 03A5 0308
+DC > 03B1 0301
+DD > 03B5 0301
+DE > 03B7 0301
+DF > 03B9 0301
+E0 > 03C5 0308 0301
+E1 > 03B1
+E2 > 03B2
+E3 > 03B3
+E4 > 03B4
+E5 > 03B5
+E6 > 03B6
+E7 > 03B7
+E8 > 03B8
+E9 > 03B9
+EA > 03BA
+EB > 03BB
+EC > 03BC
+ED > 03BD
+EE > 03BE
+EF > 03BF
+F0 > 03C0
+F1 > 03C1
+F2 > 03C2
+F3 > 03C3
+F4 > 03C4
+F5 > 03C5
+F6 > 03C6
+F7 > 03C7
+F8 > 03C8
+F9 > 03C9
+FA > 03B9 0308
+FB > 03C5 0308
+FC > 03BF 0301
+FD > 03C5 0301
+FE > 03C9 0301
+.
+
+NFC
+/
+N 253
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0385
+A2 > 0386
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 2015
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 0384
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 0388
+B9 > 0389
+BA > 038A
+BB > 00BB
+BC > 038C
+BD > 00BD
+BE > 038E
+BF > 038F
+C0 > 0390
+C1 > 0391
+C2 > 0392
+C3 > 0393
+C4 > 0394
+C5 > 0395
+C6 > 0396
+C7 > 0397
+C8 > 0398
+C9 > 0399
+CA > 039A
+CB > 039B
+CC > 039C
+CD > 039D
+CE > 039E
+CF > 039F
+D0 > 03A0
+D1 > 03A1
+D3 > 03A3
+D4 > 03A4
+D5 > 03A5
+D6 > 03A6
+D7 > 03A7
+D8 > 03A8
+D9 > 03A9
+DA > 03AA
+DB > 03AB
+DC > 03AC
+DD > 03AD
+DE > 03AE
+DF > 03AF
+E0 > 03B0
+E1 > 03B1
+E2 > 03B2
+E3 > 03B3
+E4 > 03B4
+E5 > 03B5
+E6 > 03B6
+E7 > 03B7
+E8 > 03B8
+E9 > 03B9
+EA > 03BA
+EB > 03BB
+EC > 03BC
+ED > 03BD
+EE > 03BE
+EF > 03BF
+F0 > 03C0
+F1 > 03C1
+F2 > 03C2
+F3 > 03C3
+F4 > 03C4
+F5 > 03C5
+F6 > 03C6
+F7 > 03C7
+F8 > 03C8
+F9 > 03C9
+FA > 03CA
+FB > 03CB
+FC > 03CC
+FD > 03CD
+FE > 03CE
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1253.cset b/data/cp1253.cset
new file mode 100644 (file)
index 0000000..9d8d3cd
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1253
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0385 - Y A1 A1 A1 00 00 00 # GREEK DIALYTIKA TONOS
+A2 0386 L Y A2 DC A2 C1 2A 00 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA E0AA . N AA AA AA 00 00 00 # <unused>
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 2015 - Y AF AF AF 00 00 00 # HORIZONTAL BAR
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 0384 - Y B4 B4 B4 00 00 00 # GREEK TONOS
+B5 00B5 A Y CC B5 CC 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 0388 L Y B8 DD B8 C5 2A 00 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+B9 0389 L Y B9 DE B9 C7 2A 00 # GREEK CAPITAL LETTER ETA WITH TONOS
+BA 038A L Y BA DF BA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH TONOS
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 038C L Y BC FC BC CF 2A 00 # GREEK CAPITAL LETTER OMICRON WITH TONOS
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 038E L Y BE FD BE D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH TONOS
+BF 038F L Y BF FE BF D9 2A 00 # GREEK CAPITAL LETTER OMEGA WITH TONOS
+C0 0390 L Y C0 C0 C0 E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+C1 0391 L Y C1 E1 C1 C1 2A 00 # GREEK CAPITAL LETTER ALPHA
+C2 0392 L Y C2 E2 C2 C2 E2 E2 # GREEK CAPITAL LETTER BETA
+C3 0393 L Y C3 E3 C3 C3 E3 E3 # GREEK CAPITAL LETTER GAMMA
+C4 0394 L Y C4 E4 C4 C4 E4 E4 # GREEK CAPITAL LETTER DELTA
+C5 0395 L Y C5 E5 C5 C5 2A 00 # GREEK CAPITAL LETTER EPSILON
+C6 0396 L Y C6 E6 C6 C6 E6 E6 # GREEK CAPITAL LETTER ZETA
+C7 0397 L Y C7 E7 C7 C7 2A 00 # GREEK CAPITAL LETTER ETA
+C8 0398 L Y C8 E8 C8 C8 E8 E8 # GREEK CAPITAL LETTER THETA
+C9 0399 L Y C9 E9 C9 C9 2A 00 # GREEK CAPITAL LETTER IOTA
+CA 039A L Y CA EA CA CA EA EA # GREEK CAPITAL LETTER KAPPA
+CB 039B L Y CB EB CB CB EB EB # GREEK CAPITAL LETTER LAMDA
+CC 039C L Y CC EC CC CC EC EC # GREEK CAPITAL LETTER MU
+CD 039D L Y CD ED CD CD ED ED # GREEK CAPITAL LETTER NU
+CE 039E L Y CE EE CE CE EE EE # GREEK CAPITAL LETTER XI
+CF 039F L Y CF EF CF CF 2A 00 # GREEK CAPITAL LETTER OMICRON
+D0 03A0 L Y D0 F0 D0 D0 F0 F0 # GREEK CAPITAL LETTER PI
+D1 03A1 L Y D1 F1 D1 D1 F1 F1 # GREEK CAPITAL LETTER RHO
+D2 E0D2 . N D2 D2 D2 00 00 00 # <unused>
+D3 03A3 L Y D3 F3 D3 D3 F3 F3 # GREEK CAPITAL LETTER SIGMA
+D4 03A4 L Y D4 F4 D4 D4 F4 F4 # GREEK CAPITAL LETTER TAU
+D5 03A5 L Y D5 F5 D5 D5 2A 00 # GREEK CAPITAL LETTER UPSILON
+D6 03A6 L Y D6 F6 D6 D6 F6 F6 # GREEK CAPITAL LETTER PHI
+D7 03A7 L Y D7 F7 D7 D7 F7 F7 # GREEK CAPITAL LETTER CHI
+D8 03A8 L Y D8 F8 D8 D8 F8 F8 # GREEK CAPITAL LETTER PSI
+D9 03A9 L Y D9 F9 D9 D9 2A 00 # GREEK CAPITAL LETTER OMEGA
+DA 03AA L Y DA FA DA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+DB 03AB L Y DB FB DB D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+DC 03AC L Y A2 DC A2 E1 2A 00 # GREEK SMALL LETTER ALPHA WITH TONOS
+DD 03AD L Y B8 DD B8 E5 2A 00 # GREEK SMALL LETTER EPSILON WITH TONOS
+DE 03AE L Y B9 DE B9 E7 2A 00 # GREEK SMALL LETTER ETA WITH TONOS
+DF 03AF L Y BA DF BA E9 2A 00 # GREEK SMALL LETTER IOTA WITH TONOS
+E0 03B0 L Y E0 E0 E0 F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+E1 03B1 L Y C1 E1 C1 E1 2A 00 # GREEK SMALL LETTER ALPHA
+E2 03B2 L Y C2 E2 C2 E2 E2 E2 # GREEK SMALL LETTER BETA
+E3 03B3 L Y C3 E3 C3 E3 E3 E3 # GREEK SMALL LETTER GAMMA
+E4 03B4 L Y C4 E4 C4 E4 E4 E4 # GREEK SMALL LETTER DELTA
+E5 03B5 L Y C5 E5 C5 E5 2A 00 # GREEK SMALL LETTER EPSILON
+E6 03B6 L Y C6 E6 C6 E6 E6 E6 # GREEK SMALL LETTER ZETA
+E7 03B7 L Y C7 E7 C7 E7 2A 00 # GREEK SMALL LETTER ETA
+E8 03B8 L Y C8 E8 C8 E8 E8 E8 # GREEK SMALL LETTER THETA
+E9 03B9 L Y C9 E9 C9 E9 2A 00 # GREEK SMALL LETTER IOTA
+EA 03BA L Y CA EA CA EA EA EA # GREEK SMALL LETTER KAPPA
+EB 03BB L Y CB EB CB EB EB EB # GREEK SMALL LETTER LAMDA
+EC 03BC L Y CC EC CC EC EC EC # GREEK SMALL LETTER MU
+ED 03BD L Y CD ED CD ED ED ED # GREEK SMALL LETTER NU
+EE 03BE L Y CE EE CE EE EE EE # GREEK SMALL LETTER XI
+EF 03BF L Y CF EF CF EF 2A 00 # GREEK SMALL LETTER OMICRON
+F0 03C0 L Y D0 F0 D0 F0 F0 F0 # GREEK SMALL LETTER PI
+F1 03C1 L Y D1 F1 D1 F1 F1 F1 # GREEK SMALL LETTER RHO
+F2 03C2 L Y D3 F2 D3 F2 F2 F2 # GREEK SMALL LETTER FINAL SIGMA
+F3 03C3 L Y D3 F3 D3 F3 F3 F3 # GREEK SMALL LETTER SIGMA
+F4 03C4 L Y D4 F4 D4 F4 F4 F4 # GREEK SMALL LETTER TAU
+F5 03C5 L Y D5 F5 D5 F5 2A 00 # GREEK SMALL LETTER UPSILON
+F6 03C6 L Y D6 F6 D6 F6 F6 F6 # GREEK SMALL LETTER PHI
+F7 03C7 L Y D7 F7 D7 F7 F7 F7 # GREEK SMALL LETTER CHI
+F8 03C8 L Y D8 F8 D8 F8 F8 F8 # GREEK SMALL LETTER PSI
+F9 03C9 L Y D9 F9 D9 F9 2A 00 # GREEK SMALL LETTER OMEGA
+FA 03CA L Y DA FA DA E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+FB 03CB L Y DB FB DB F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+FC 03CC L Y BC FC BC EF 2A 00 # GREEK SMALL LETTER OMICRON WITH TONOS
+FD 03CD L Y BE FD BE F5 2A 00 # GREEK SMALL LETTER UPSILON WITH TONOS
+FE 03CE L Y BF FE BF F9 2A 00 # GREEK SMALL LETTER OMEGA WITH TONOS
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/cp1254.cmap b/data/cp1254.cmap
new file mode 100644 (file)
index 0000000..4f2821d
--- /dev/null
@@ -0,0 +1,1944 @@
+INTERNAL
+/
+N 951
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0306 > D0
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > DD
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 2
+     030C > 8A
+     0327 > DE
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > 9F
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0306 > F0
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 2
+     030C > 9A
+     0327 > FE
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009D > 9D
+009E > 9E
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > D0
+011F > F0
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > DD
+0131 > FD
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 8C
+0153 > 9C
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > DE
+015F > FE
+0160 > 8A
+0161 > 9A
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 9F
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+0192 > 83
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C6 > 88
+02DC > 98
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 8A # unsup: 0160 0307
+1E67 > 9A # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0306 > D0
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > DD
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 2
+     030C > 8A
+     0327 > DE
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > 9F
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0306 > F0
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 2
+     030C > 9A
+     0327 > FE
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009D > 9D
+009E > 9E
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FF > FF
+011E > D0
+011F > F0
+0130 > DD
+0131 > FD
+0152 > 8C
+0153 > 9C
+015E > DE
+015F > FE
+0160 > 8A
+0161 > 9A
+0178 > 9F
+0192 > 83
+02C6 > 88
+02DC > 98
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0053 030C
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 0073 030C
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 009E
+9F > 0059 0308
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 0047 0306
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0049 0307
+DE > 0053 0327
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 0067 0306
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0131
+FE > 0073 0327
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0160
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 0161
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 009E
+9F > 0178
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 011E
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 0130
+DE > 015E
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 011F
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 0131
+FE > 015F
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1254.cset b/data/cp1254.cset
new file mode 100644 (file)
index 0000000..c30b93b
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1254
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 011E L Y D0 F0 D0 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 0130 L Y DD 69 DD 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+DE 015E L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 011F L Y D0 F0 D0 67 67 67 # LATIN SMALL LETTER G WITH BREVE
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 0131 L Y 49 FD 49 FD FD FD # LATIN SMALL LETTER DOTLESS I
+FE 015F L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA
+FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/cp1255.cmap b/data/cp1255.cmap
new file mode 100644 (file)
index 0000000..189588d
--- /dev/null
@@ -0,0 +1,2251 @@
+INTERNAL
+/
+N 1045
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008A > 8A
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009A > 9A
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D7 > AA
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F7 > BA
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+0192 > 83
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C6 > 88
+02DC > 98
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+05B0 > C0
+05B1 > C1
+05B2 > C2
+05B3 > C3
+05B4 > C4
+05B5 > C5
+05B6 > C6
+05B7 > C7
+05B8 > C8
+05B9 > C9
+05BB > CB
+05BC > CC
+05BD > CD
+05BE > CE
+05BF > CF
+05C0 > D0
+05C1 > D1
+05C2 > D2
+05C3 > D3
+05D0 > E0
+05D1 > E1
+05D2 > E2
+05D3 > E3
+05D4 > E4
+05D5 > E5
+05D6 > E6
+05D7 > E7
+05D8 > E8
+05D9 > E9
+05DA > EA
+05DB > EB
+05DC > EC
+05DD > ED
+05DE > EE
+05DF > EF
+05E0 > F0
+05E1 > F1
+05E2 > F2
+05E3 > F3
+05E4 > F4
+05E5 > F5
+05E6 > F6
+05E7 > F7
+05E8 > F8
+05E9 > F9
+05EA > FA
+05F0 > D4
+05F1 > D5
+05F2 > D6
+05F3 > D7
+05F4 > D8
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+200E > FD
+200F > FE
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AA > A4
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB1D > E9 C4
+FB1F > D6 C7
+FB20 > F2 # compat
+FB21 > E0 # compat
+FB22 > E3 # compat
+FB23 > E4 # compat
+FB24 > EB # compat
+FB25 > EC # compat
+FB26 > ED # compat
+FB27 > F8 # compat
+FB28 > FA # compat
+FB29 > 2B # compat
+FB2A > F9 D1
+FB2B > F9 D2
+FB2C > F9 CC D1
+FB2D > F9 CC D2
+FB2E > E0 C7
+FB2F > E0 C8
+FB30 > E0 CC
+FB31 > E1 CC
+FB32 > E2 CC
+FB33 > E3 CC
+FB34 > E4 CC
+FB35 > E5 CC
+FB36 > E6 CC
+FB38 > E8 CC
+FB39 > E9 CC
+FB3A > EA CC
+FB3B > EB CC
+FB3C > EC CC
+FB3E > EE CC
+FB40 > F0 CC
+FB41 > F1 CC
+FB43 > F3 CC
+FB44 > F4 CC
+FB46 > F6 CC
+FB47 > F7 CC
+FB48 > F8 CC
+FB49 > F9 CC
+FB4A > FA CC
+FB4B > E5 C9
+FB4C > E1 CF
+FB4D > EB CF
+FB4E > F4 CF
+FB4F > E0 EC # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 283
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008A > 8A
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009A > 9A
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00D7 > AA
+00F7 > BA
+0192 > 83
+02C6 > 88
+02DC > 98
+037E > 3B
+0387 > B7
+05B0 > C0
+05B1 > C1
+05B2 > C2
+05B3 > C3
+05B4 > C4
+05B5 > C5
+05B6 > C6
+05B7 > C7
+05B8 > C8
+05B9 > C9
+05BB > CB
+05BC > CC
+05BD > CD
+05BE > CE
+05BF > CF
+05C0 > D0
+05C1 > D1
+05C2 > D2
+05C3 > D3
+05D0 > E0
+05D1 > E1
+05D2 > E2
+05D3 > E3
+05D4 > E4
+05D5 > E5
+05D6 > E6
+05D7 > E7
+05D8 > E8
+05D9 > E9
+05DA > EA
+05DB > EB
+05DC > EC
+05DD > ED
+05DE > EE
+05DF > EF
+05E0 > F0
+05E1 > F1
+05E2 > F2
+05E3 > F3
+05E4 > F4
+05E5 > F5
+05E6 > F6
+05E7 > F7
+05E8 > F8
+05E9 > F9
+05EA > FA
+05F0 > D4
+05F1 > D5
+05F2 > D6
+05F3 > D7
+05F4 > D8
+1FEF > 60
+1FFD > B4
+200E > FD
+200F > FE
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AA > A4
+20AC > 80
+2122 > 99
+FB1D > E9 C4
+FB1F > D6 C7
+FB2A > F9 D1
+FB2B > F9 D2
+FB2C > F9 CC D1
+FB2D > F9 CC D2
+FB2E > E0 C7
+FB2F > E0 C8
+FB30 > E0 CC
+FB31 > E1 CC
+FB32 > E2 CC
+FB33 > E3 CC
+FB34 > E4 CC
+FB35 > E5 CC
+FB36 > E6 CC
+FB38 > E8 CC
+FB39 > E9 CC
+FB3A > EA CC
+FB3B > EB CC
+FB3C > EC CC
+FB3E > EE CC
+FB40 > F0 CC
+FB41 > F1 CC
+FB43 > F3 CC
+FB44 > F4 CC
+FB46 > F6 CC
+FB47 > F7 CC
+FB48 > F8 CC
+FB49 > F9 CC
+FB4A > FA CC
+FB4B > E5 C9
+FB4C > E1 CF
+FB4D > EB CF
+FB4E > F4 CF
+.
+
+NFD
+/
+N 245
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 20AA
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00D7
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00F7
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 05B0
+C1 > 05B1
+C2 > 05B2
+C3 > 05B3
+C4 > 05B4
+C5 > 05B5
+C6 > 05B6
+C7 > 05B7
+C8 > 05B8
+C9 > 05B9
+CB > 05BB
+CC > 05BC
+CD > 05BD
+CE > 05BE
+CF > 05BF
+D0 > 05C0
+D1 > 05C1
+D2 > 05C2
+D3 > 05C3
+D4 > 05F0
+D5 > 05F1
+D6 > 05F2
+D7 > 05F3
+D8 > 05F4
+E0 > 05D0
+E1 > 05D1
+E2 > 05D2
+E3 > 05D3
+E4 > 05D4
+E5 > 05D5
+E6 > 05D6
+E7 > 05D7
+E8 > 05D8
+E9 > 05D9
+EA > 05DA
+EB > 05DB
+EC > 05DC
+ED > 05DD
+EE > 05DE
+EF > 05DF
+F0 > 05E0
+F1 > 05E1
+F2 > 05E2
+F3 > 05E3
+F4 > 05E4
+F5 > 05E5
+F6 > 05E6
+F7 > 05E7
+F8 > 05E8
+F9 > 05E9
+FA > 05EA
+FD > 200E
+FE > 200F
+.
+
+NFC
+/
+N 245
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 20AA
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00D7
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00F7
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 05B0
+C1 > 05B1
+C2 > 05B2
+C3 > 05B3
+C4 > 05B4
+C5 > 05B5
+C6 > 05B6
+C7 > 05B7
+C8 > 05B8
+C9 > 05B9
+CB > 05BB
+CC > 05BC
+CD > 05BD
+CE > 05BE
+CF > 05BF
+D0 > 05C0
+D1 > 05C1
+D2 > 05C2
+D3 > 05C3
+D4 > 05F0
+D5 > 05F1
+D6 > 05F2 /
+   N 1
+   C7 > 05F2 05B7
+   .
+D7 > 05F3
+D8 > 05F4
+E0 > 05D0 /
+   N 3
+   C7 > 05D0 05B7
+   C8 > 05D0 05B8
+   CC > 05D0 05BC
+   .
+E1 > 05D1 /
+   N 2
+   CC > 05D1 05BC
+   CF > 05D1 05BF
+   .
+E2 > 05D2 /
+   N 1
+   CC > 05D2 05BC
+   .
+E3 > 05D3 /
+   N 1
+   CC > 05D3 05BC
+   .
+E4 > 05D4 /
+   N 1
+   CC > 05D4 05BC
+   .
+E5 > 05D5 /
+   N 2
+   C9 > 05D5 05B9
+   CC > 05D5 05BC
+   .
+E6 > 05D6 /
+   N 1
+   CC > 05D6 05BC
+   .
+E7 > 05D7
+E8 > 05D8 /
+   N 1
+   CC > 05D8 05BC
+   .
+E9 > 05D9 /
+   N 2
+   C4 > 05D9 05B4
+   CC > 05D9 05BC
+   .
+EA > 05DA /
+   N 1
+   CC > 05DA 05BC
+   .
+EB > 05DB /
+   N 2
+   CC > 05DB 05BC
+   CF > 05DB 05BF
+   .
+EC > 05DC /
+   N 1
+   CC > 05DC 05BC
+   .
+ED > 05DD
+EE > 05DE /
+   N 1
+   CC > 05DE 05BC
+   .
+EF > 05DF
+F0 > 05E0 /
+   N 1
+   CC > 05E0 05BC
+   .
+F1 > 05E1 /
+   N 1
+   CC > 05E1 05BC
+   .
+F2 > 05E2
+F3 > 05E3 /
+   N 1
+   CC > 05E3 05BC
+   .
+F4 > 05E4 /
+   N 2
+   CC > 05E4 05BC
+   CF > 05E4 05BF
+   .
+F5 > 05E5
+F6 > 05E6 /
+   N 1
+   CC > 05E6 05BC
+   .
+F7 > 05E7 /
+   N 1
+   CC > 05E7 05BC
+   .
+F8 > 05E8 /
+   N 1
+   CC > 05E8 05BC
+   .
+F9 > 05E9 /
+   N 3
+   CC > 05E9 05BC /
+      N 2
+      D1 > 05E9 05BC 05C1
+      D2 > 05E9 05BC 05C2
+      .
+   D1 > 05E9 05C1
+   D2 > 05E9 05C2
+   .
+FA > 05EA /
+   N 1
+   CC > 05EA 05BC
+   .
+FD > 200E
+FE > 200F
+.
+
+COMP
+/
+N 245
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 20AA
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00D7
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00F7
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 05B0
+C1 > 05B1
+C2 > 05B2
+C3 > 05B3
+C4 > 05B4
+C5 > 05B5
+C6 > 05B6
+C7 > 05B7
+C8 > 05B8
+C9 > 05B9
+CB > 05BB
+CC > 05BC
+CD > 05BD
+CE > 05BE
+CF > 05BF
+D0 > 05C0
+D1 > 05C1
+D2 > 05C2
+D3 > 05C3
+D4 > 05F0
+D5 > 05F1
+D6 > 05F2 /
+   N 1
+   C7 > FB1F
+   .
+D7 > 05F3
+D8 > 05F4
+E0 > 05D0 /
+   N 3
+   C7 > FB2E
+   C8 > FB2F
+   CC > FB30
+   .
+E1 > 05D1 /
+   N 2
+   CC > FB31
+   CF > FB4C
+   .
+E2 > 05D2 /
+   N 1
+   CC > FB32
+   .
+E3 > 05D3 /
+   N 1
+   CC > FB33
+   .
+E4 > 05D4 /
+   N 1
+   CC > FB34
+   .
+E5 > 05D5 /
+   N 2
+   C9 > FB4B
+   CC > FB35
+   .
+E6 > 05D6 /
+   N 1
+   CC > FB36
+   .
+E7 > 05D7
+E8 > 05D8 /
+   N 1
+   CC > FB38
+   .
+E9 > 05D9 /
+   N 2
+   C4 > FB1D
+   CC > FB39
+   .
+EA > 05DA /
+   N 1
+   CC > FB3A
+   .
+EB > 05DB /
+   N 2
+   CC > FB3B
+   CF > FB4D
+   .
+EC > 05DC /
+   N 1
+   CC > FB3C
+   .
+ED > 05DD
+EE > 05DE /
+   N 1
+   CC > FB3E
+   .
+EF > 05DF
+F0 > 05E0 /
+   N 1
+   CC > FB40
+   .
+F1 > 05E1 /
+   N 1
+   CC > FB41
+   .
+F2 > 05E2
+F3 > 05E3 /
+   N 1
+   CC > FB43
+   .
+F4 > 05E4 /
+   N 2
+   CC > FB44
+   CF > FB4E
+   .
+F5 > 05E5
+F6 > 05E6 /
+   N 1
+   CC > FB46
+   .
+F7 > 05E7 /
+   N 1
+   CC > FB47
+   .
+F8 > 05E8 /
+   N 1
+   CC > FB48
+   .
+F9 > 05E9 /
+   N 3
+   CC > FB49 /
+      N 2
+      D1 > FB2C
+      D2 > FB2D
+      .
+   D1 > FB2A
+   D2 > FB2B
+   .
+FA > 05EA /
+   N 1
+   CC > FB4A
+   .
+FD > 200E
+FE > 200F
+.
diff --git a/data/cp1255.cset b/data/cp1255.cset
new file mode 100644 (file)
index 0000000..e1a8e96
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1255
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 20AA - Y A4 A4 A4 00 00 00 # NEW SHEQEL SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00D7 - Y AA AA AA 00 00 00 # MULTIPLICATION SIGN
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00F7 - Y BA BA BA 00 00 00 # DIVISION SIGN
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 05B0 M M C0 C0 C0 00 00 00 # HEBREW POINT SHEVA
+C1 05B1 M M C1 C1 C1 00 00 00 # HEBREW POINT HATAF SEGOL
+C2 05B2 M M C2 C2 C2 00 00 00 # HEBREW POINT HATAF PATAH
+C3 05B3 M M C3 C3 C3 00 00 00 # HEBREW POINT HATAF QAMATS
+C4 05B4 M M C4 C4 C4 00 00 00 # HEBREW POINT HIRIQ
+C5 05B5 M M C5 C5 C5 00 00 00 # HEBREW POINT TSERE
+C6 05B6 M M C6 C6 C6 00 00 00 # HEBREW POINT SEGOL
+C7 05B7 M M C7 C7 C7 00 00 00 # HEBREW POINT PATAH
+C8 05B8 M M C8 C8 C8 00 00 00 # HEBREW POINT QAMATS
+C9 05B9 M M C9 C9 C9 00 00 00 # HEBREW POINT HOLAM
+CA E0CA . N CA CA CA 00 00 00 # <unused>
+CB 05BB M M CB CB CB 00 00 00 # HEBREW POINT QUBUTS
+CC 05BC M M CC CC CC 00 00 00 # HEBREW POINT DAGESH OR MAPIQ
+CD 05BD M M CD CD CD 00 00 00 # HEBREW POINT METEG
+CE 05BE - Y CE CE CE 00 00 00 # HEBREW PUNCTUATION MAQAF
+CF 05BF M M CF CF CF 00 00 00 # HEBREW POINT RAFE
+D0 05C0 - Y D0 D0 D0 00 00 00 # HEBREW PUNCTUATION PASEQ
+D1 05C1 M M D1 D1 D1 00 00 00 # HEBREW POINT SHIN DOT
+D2 05C2 M M D2 D2 D2 00 00 00 # HEBREW POINT SIN DOT
+D3 05C3 - Y D3 D3 D3 00 00 00 # HEBREW PUNCTUATION SOF PASUQ
+D4 05F0 L Y D4 D4 D4 D4 D4 D4 # HEBREW LIGATURE YIDDISH DOUBLE VAV
+D5 05F1 L Y D5 D5 D5 D5 D5 D5 # HEBREW LIGATURE YIDDISH VAV YOD
+D6 05F2 L Y D6 D6 D6 D6 D6 D6 # HEBREW LIGATURE YIDDISH DOUBLE YOD
+D7 05F3 - Y D7 D7 D7 00 00 00 # HEBREW PUNCTUATION GERESH
+D8 05F4 - Y D8 D8 D8 00 00 00 # HEBREW PUNCTUATION GERSHAYIM
+D9 E0D9 . N D9 D9 D9 00 00 00 # <unused>
+DA E0DA . N DA DA DA 00 00 00 # <unused>
+DB E0DB . N DB DB DB 00 00 00 # <unused>
+DC E0DC . N DC DC DC 00 00 00 # <unused>
+DD E0DD . N DD DD DD 00 00 00 # <unused>
+DE E0DE . N DE DE DE 00 00 00 # <unused>
+DF E0DF . N DF DF DF 00 00 00 # <unused>
+E0 05D0 L Y E0 E0 E0 E0 E0 E0 # HEBREW LETTER ALEF
+E1 05D1 L Y E1 E1 E1 E1 E1 E1 # HEBREW LETTER BET
+E2 05D2 L Y E2 E2 E2 E2 E2 E2 # HEBREW LETTER GIMEL
+E3 05D3 L Y E3 E3 E3 E3 E3 E3 # HEBREW LETTER DALET
+E4 05D4 L Y E4 E4 E4 E4 E4 E4 # HEBREW LETTER HE
+E5 05D5 L Y E5 E5 E5 E5 E5 E5 # HEBREW LETTER VAV
+E6 05D6 L Y E6 E6 E6 E6 E6 E6 # HEBREW LETTER ZAYIN
+E7 05D7 L Y E7 E7 E7 E7 E7 E7 # HEBREW LETTER HET
+E8 05D8 L Y E8 E8 E8 E8 E8 E8 # HEBREW LETTER TET
+E9 05D9 L Y E9 E9 E9 E9 E9 E9 # HEBREW LETTER YOD
+EA 05DA L Y EA EA EA EA EA EA # HEBREW LETTER FINAL KAF
+EB 05DB L Y EB EB EB EB EB EB # HEBREW LETTER KAF
+EC 05DC L Y EC EC EC EC EC EC # HEBREW LETTER LAMED
+ED 05DD L Y ED ED ED ED ED ED # HEBREW LETTER FINAL MEM
+EE 05DE L Y EE EE EE EE EE EE # HEBREW LETTER MEM
+EF 05DF L Y EF EF EF EF EF EF # HEBREW LETTER FINAL NUN
+F0 05E0 L Y F0 F0 F0 F0 F0 F0 # HEBREW LETTER NUN
+F1 05E1 L Y F1 F1 F1 F1 F1 F1 # HEBREW LETTER SAMEKH
+F2 05E2 L Y F2 F2 F2 F2 F2 F2 # HEBREW LETTER AYIN
+F3 05E3 L Y F3 F3 F3 F3 F3 F3 # HEBREW LETTER FINAL PE
+F4 05E4 L Y F4 F4 F4 F4 F4 F4 # HEBREW LETTER PE
+F5 05E5 L Y F5 F5 F5 F5 F5 F5 # HEBREW LETTER FINAL TSADI
+F6 05E6 L Y F6 F6 F6 F6 F6 F6 # HEBREW LETTER TSADI
+F7 05E7 L Y F7 F7 F7 F7 F7 F7 # HEBREW LETTER QOF
+F8 05E8 L Y F8 F8 F8 F8 F8 F8 # HEBREW LETTER RESH
+F9 05E9 L Y F9 F9 F9 F9 F9 F9 # HEBREW LETTER SHIN
+FA 05EA L Y FA FA FA FA FA FA # HEBREW LETTER TAV
+FB E0FB . N FB FB FB 00 00 00 # <unused>
+FC E0FC . N FC FC FC 00 00 00 # <unused>
+FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK
+FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/cp1256.cmap b/data/cp1256.cmap
new file mode 100644 (file)
index 0000000..951fabe
--- /dev/null
@@ -0,0 +1,2476 @@
+INTERNAL
+/
+N 1609
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 2
+     0300 > E0
+     0302 > E2
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F /
+     N 1
+     0302 > F4
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 3
+     0300 > F9
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D7 > D7
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > E0
+00E1 > 61 # unsup: 0061 0301
+00E2 > E2
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > EE
+00EF > EF
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > F4
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F7 > F7
+00F9 > F9
+00FA > 75 # unsup: 0075 0301
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 8C
+0153 > 9C
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+0192 > 83
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > FC # unsup: 00FC 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > FC # unsup: 00FC 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C6 > 88
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+060C > A1
+061B > BA
+061F > BF
+0621 > C1
+0622 > C2
+0623 > C3
+0624 > C4
+0625 > C5
+0626 > C6
+0627 > C7 /
+     N 3
+     0653 > C2
+     0654 > C3
+     0655 > C5
+     .
+0628 > C8
+0629 > C9
+062A > CA
+062B > CB
+062C > CC
+062D > CD
+062E > CE
+062F > CF
+0630 > D0
+0631 > D1
+0632 > D2
+0633 > D3
+0634 > D4
+0635 > D5
+0636 > D6
+0637 > D8
+0638 > D9
+0639 > DA
+063A > DB
+0640 > DC
+0641 > DD
+0642 > DE
+0643 > DF
+0644 > E1
+0645 > E3
+0646 > E4
+0647 > E5
+0648 > E6 /
+     N 1
+     0654 > C4
+     .
+0649 > EC
+064A > ED /
+     N 1
+     0654 > C6
+     .
+064B > F0
+064C > F1
+064D > F2
+064E > F3
+064F > F5
+0650 > F6
+0651 > F8
+0652 > FA
+0679 > 8A
+067E > 81
+0686 > 8D
+0688 > 8F
+0691 > 9A
+0698 > 8E
+06A9 > 98
+06AF > 90
+06BA > 9F
+06BE > AA
+06C1 > C0
+06C2 > C0 # unsup: 06C1 0654
+06D2 > FF
+06D3 > FF # unsup: 06D2 0654
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+200C > 9D
+200D > 9E
+200E > FD
+200F > FE
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FB56 > 81 # compat
+FB57 > 81 # compat
+FB58 > 81 # compat
+FB59 > 81 # compat
+FB66 > 8A # compat
+FB67 > 8A # compat
+FB68 > 8A # compat
+FB69 > 8A # compat
+FB7A > 8D # compat
+FB7B > 8D # compat
+FB7C > 8D # compat
+FB7D > 8D # compat
+FB88 > 8F # compat
+FB89 > 8F # compat
+FB8A > 8E # compat
+FB8B > 8E # compat
+FB8C > 9A # compat
+FB8D > 9A # compat
+FB8E > 98 # compat
+FB8F > 98 # compat
+FB90 > 98 # compat
+FB91 > 98 # compat
+FB92 > 90 # compat
+FB93 > 90 # compat
+FB94 > 90 # compat
+FB95 > 90 # compat
+FB9E > 9F # compat
+FB9F > 9F # compat
+FBA6 > C0 # compat
+FBA7 > C0 # compat
+FBA8 > C0 # compat
+FBA9 > C0 # compat
+FBAA > AA # compat
+FBAB > AA # compat
+FBAC > AA # compat
+FBAD > AA # compat
+FBAE > FF # compat
+FBAF > FF # compat
+FBB0 > FF # unsup: 06D2 0654
+FBB1 > FF # unsup: 06D2 0654
+FBE8 > EC # compat
+FBE9 > EC # compat
+FBEA > C6 C7 # compat
+FBEB > C6 C7 # compat
+FBEE > C6 E6 # compat
+FBEF > C6 E6 # compat
+FBF9 > C6 EC # compat
+FBFA > C6 EC # compat
+FBFB > C6 EC # compat
+FC00 > C6 CC # compat
+FC01 > C6 CD # compat
+FC02 > C6 E3 # compat
+FC03 > C6 EC # compat
+FC04 > C6 ED # compat
+FC05 > C8 CC # compat
+FC06 > C8 CD # compat
+FC07 > C8 CE # compat
+FC08 > C8 E3 # compat
+FC09 > C8 EC # compat
+FC0A > C8 ED # compat
+FC0B > CA CC # compat
+FC0C > CA CD # compat
+FC0D > CA CE # compat
+FC0E > CA E3 # compat
+FC0F > CA EC # compat
+FC10 > CA ED # compat
+FC11 > CB CC # compat
+FC12 > CB E3 # compat
+FC13 > CB EC # compat
+FC14 > CB ED # compat
+FC15 > CC CD # compat
+FC16 > CC E3 # compat
+FC17 > CD CC # compat
+FC18 > CD E3 # compat
+FC19 > CE CC # compat
+FC1A > CE CD # compat
+FC1B > CE E3 # compat
+FC1C > D3 CC # compat
+FC1D > D3 CD # compat
+FC1E > D3 CE # compat
+FC1F > D3 E3 # compat
+FC20 > D5 CD # compat
+FC21 > D5 E3 # compat
+FC22 > D6 CC # compat
+FC23 > D6 CD # compat
+FC24 > D6 CE # compat
+FC25 > D6 E3 # compat
+FC26 > D8 CD # compat
+FC27 > D8 E3 # compat
+FC28 > D9 E3 # compat
+FC29 > DA CC # compat
+FC2A > DA E3 # compat
+FC2B > DB CC # compat
+FC2C > DB E3 # compat
+FC2D > DD CC # compat
+FC2E > DD CD # compat
+FC2F > DD CE # compat
+FC30 > DD E3 # compat
+FC31 > DD EC # compat
+FC32 > DD ED # compat
+FC33 > DE CD # compat
+FC34 > DE E3 # compat
+FC35 > DE EC # compat
+FC36 > DE ED # compat
+FC37 > DF C7 # compat
+FC38 > DF CC # compat
+FC39 > DF CD # compat
+FC3A > DF CE # compat
+FC3B > DF E1 # compat
+FC3C > DF E3 # compat
+FC3D > DF EC # compat
+FC3E > DF ED # compat
+FC3F > E1 CC # compat
+FC40 > E1 CD # compat
+FC41 > E1 CE # compat
+FC42 > E1 E3 # compat
+FC43 > E1 EC # compat
+FC44 > E1 ED # compat
+FC45 > E3 CC # compat
+FC46 > E3 CD # compat
+FC47 > E3 CE # compat
+FC48 > E3 E3 # compat
+FC49 > E3 EC # compat
+FC4A > E3 ED # compat
+FC4B > E4 CC # compat
+FC4C > E4 CD # compat
+FC4D > E4 CE # compat
+FC4E > E4 E3 # compat
+FC4F > E4 EC # compat
+FC50 > E4 ED # compat
+FC51 > E5 CC # compat
+FC52 > E5 E3 # compat
+FC53 > E5 EC # compat
+FC54 > E5 ED # compat
+FC55 > ED CC # compat
+FC56 > ED CD # compat
+FC57 > ED CE # compat
+FC58 > ED E3 # compat
+FC59 > ED EC # compat
+FC5A > ED ED # compat
+FC5B > D0 # unsup: 0630 0670
+FC5C > D1 # unsup: 0631 0670
+FC5D > EC # unsup: 0649 0670
+FC64 > C6 D1 # compat
+FC65 > C6 D2 # compat
+FC66 > C6 E3 # compat
+FC67 > C6 E4 # compat
+FC68 > C6 EC # compat
+FC69 > C6 ED # compat
+FC6A > C8 D1 # compat
+FC6B > C8 D2 # compat
+FC6C > C8 E3 # compat
+FC6D > C8 E4 # compat
+FC6E > C8 EC # compat
+FC6F > C8 ED # compat
+FC70 > CA D1 # compat
+FC71 > CA D2 # compat
+FC72 > CA E3 # compat
+FC73 > CA E4 # compat
+FC74 > CA EC # compat
+FC75 > CA ED # compat
+FC76 > CB D1 # compat
+FC77 > CB D2 # compat
+FC78 > CB E3 # compat
+FC79 > CB E4 # compat
+FC7A > CB EC # compat
+FC7B > CB ED # compat
+FC7C > DD EC # compat
+FC7D > DD ED # compat
+FC7E > DE EC # compat
+FC7F > DE ED # compat
+FC80 > DF C7 # compat
+FC81 > DF E1 # compat
+FC82 > DF E3 # compat
+FC83 > DF EC # compat
+FC84 > DF ED # compat
+FC85 > E1 E3 # compat
+FC86 > E1 EC # compat
+FC87 > E1 ED # compat
+FC88 > E3 C7 # compat
+FC89 > E3 E3 # compat
+FC8A > E4 D1 # compat
+FC8B > E4 D2 # compat
+FC8C > E4 E3 # compat
+FC8D > E4 E4 # compat
+FC8E > E4 EC # compat
+FC8F > E4 ED # compat
+FC90 > EC # unsup: 0649 0670
+FC91 > ED D1 # compat
+FC92 > ED D2 # compat
+FC93 > ED E3 # compat
+FC94 > ED E4 # compat
+FC95 > ED EC # compat
+FC96 > ED ED # compat
+FC97 > C6 CC # compat
+FC98 > C6 CD # compat
+FC99 > C6 CE # compat
+FC9A > C6 E3 # compat
+FC9B > C6 E5 # compat
+FC9C > C8 CC # compat
+FC9D > C8 CD # compat
+FC9E > C8 CE # compat
+FC9F > C8 E3 # compat
+FCA0 > C8 E5 # compat
+FCA1 > CA CC # compat
+FCA2 > CA CD # compat
+FCA3 > CA CE # compat
+FCA4 > CA E3 # compat
+FCA5 > CA E5 # compat
+FCA6 > CB E3 # compat
+FCA7 > CC CD # compat
+FCA8 > CC E3 # compat
+FCA9 > CD CC # compat
+FCAA > CD E3 # compat
+FCAB > CE CC # compat
+FCAC > CE E3 # compat
+FCAD > D3 CC # compat
+FCAE > D3 CD # compat
+FCAF > D3 CE # compat
+FCB0 > D3 E3 # compat
+FCB1 > D5 CD # compat
+FCB2 > D5 CE # compat
+FCB3 > D5 E3 # compat
+FCB4 > D6 CC # compat
+FCB5 > D6 CD # compat
+FCB6 > D6 CE # compat
+FCB7 > D6 E3 # compat
+FCB8 > D8 CD # compat
+FCB9 > D9 E3 # compat
+FCBA > DA CC # compat
+FCBB > DA E3 # compat
+FCBC > DB CC # compat
+FCBD > DB E3 # compat
+FCBE > DD CC # compat
+FCBF > DD CD # compat
+FCC0 > DD CE # compat
+FCC1 > DD E3 # compat
+FCC2 > DE CD # compat
+FCC3 > DE E3 # compat
+FCC4 > DF CC # compat
+FCC5 > DF CD # compat
+FCC6 > DF CE # compat
+FCC7 > DF E1 # compat
+FCC8 > DF E3 # compat
+FCC9 > E1 CC # compat
+FCCA > E1 CD # compat
+FCCB > E1 CE # compat
+FCCC > E1 E3 # compat
+FCCD > E1 E5 # compat
+FCCE > E3 CC # compat
+FCCF > E3 CD # compat
+FCD0 > E3 CE # compat
+FCD1 > E3 E3 # compat
+FCD2 > E4 CC # compat
+FCD3 > E4 CD # compat
+FCD4 > E4 CE # compat
+FCD5 > E4 E3 # compat
+FCD6 > E4 E5 # compat
+FCD7 > E5 CC # compat
+FCD8 > E5 E3 # compat
+FCD9 > E5 # unsup: 0647 0670
+FCDA > ED CC # compat
+FCDB > ED CD # compat
+FCDC > ED CE # compat
+FCDD > ED E3 # compat
+FCDE > ED E5 # compat
+FCDF > C6 E3 # compat
+FCE0 > C6 E5 # compat
+FCE1 > C8 E3 # compat
+FCE2 > C8 E5 # compat
+FCE3 > CA E3 # compat
+FCE4 > CA E5 # compat
+FCE5 > CB E3 # compat
+FCE6 > CB E5 # compat
+FCE7 > D3 E3 # compat
+FCE8 > D3 E5 # compat
+FCE9 > D4 E3 # compat
+FCEA > D4 E5 # compat
+FCEB > DF E1 # compat
+FCEC > DF E3 # compat
+FCED > E1 E3 # compat
+FCEE > E4 E3 # compat
+FCEF > E4 E5 # compat
+FCF0 > ED E3 # compat
+FCF1 > ED E5 # compat
+FCF2 > DC F3 F8 # compat
+FCF3 > DC F5 F8 # compat
+FCF4 > DC F6 F8 # compat
+FCF5 > D8 EC # compat
+FCF6 > D8 ED # compat
+FCF7 > DA EC # compat
+FCF8 > DA ED # compat
+FCF9 > DB EC # compat
+FCFA > DB ED # compat
+FCFB > D3 EC # compat
+FCFC > D3 ED # compat
+FCFD > D4 EC # compat
+FCFE > D4 ED # compat
+FCFF > CD EC # compat
+FD00 > CD ED # compat
+FD01 > CC EC # compat
+FD02 > CC ED # compat
+FD03 > CE EC # compat
+FD04 > CE ED # compat
+FD05 > D5 EC # compat
+FD06 > D5 ED # compat
+FD07 > D6 EC # compat
+FD08 > D6 ED # compat
+FD09 > D4 CC # compat
+FD0A > D4 CD # compat
+FD0B > D4 CE # compat
+FD0C > D4 E3 # compat
+FD0D > D4 D1 # compat
+FD0E > D3 D1 # compat
+FD0F > D5 D1 # compat
+FD10 > D6 D1 # compat
+FD11 > D8 EC # compat
+FD12 > D8 ED # compat
+FD13 > DA EC # compat
+FD14 > DA ED # compat
+FD15 > DB EC # compat
+FD16 > DB ED # compat
+FD17 > D3 EC # compat
+FD18 > D3 ED # compat
+FD19 > D4 EC # compat
+FD1A > D4 ED # compat
+FD1B > CD EC # compat
+FD1C > CD ED # compat
+FD1D > CC EC # compat
+FD1E > CC ED # compat
+FD1F > CE EC # compat
+FD20 > CE ED # compat
+FD21 > D5 EC # compat
+FD22 > D5 ED # compat
+FD23 > D6 EC # compat
+FD24 > D6 ED # compat
+FD25 > D4 CC # compat
+FD26 > D4 CD # compat
+FD27 > D4 CE # compat
+FD28 > D4 E3 # compat
+FD29 > D4 D1 # compat
+FD2A > D3 D1 # compat
+FD2B > D5 D1 # compat
+FD2C > D6 D1 # compat
+FD2D > D4 CC # compat
+FD2E > D4 CD # compat
+FD2F > D4 CE # compat
+FD30 > D4 E3 # compat
+FD31 > D3 E5 # compat
+FD32 > D4 E5 # compat
+FD33 > D8 E3 # compat
+FD34 > D3 CC # compat
+FD35 > D3 CD # compat
+FD36 > D3 CE # compat
+FD37 > D4 CC # compat
+FD38 > D4 CD # compat
+FD39 > D4 CE # compat
+FD3A > D8 E3 # compat
+FD3B > D9 E3 # compat
+FD3C > C7 F0 # compat
+FD3D > C7 F0 # compat
+FD50 > CA CC E3 # compat
+FD51 > CA CD CC # compat
+FD52 > CA CD CC # compat
+FD53 > CA CD E3 # compat
+FD54 > CA CE E3 # compat
+FD55 > CA E3 CC # compat
+FD56 > CA E3 CD # compat
+FD57 > CA E3 CE # compat
+FD58 > CC E3 CD # compat
+FD59 > CC E3 CD # compat
+FD5A > CD E3 ED # compat
+FD5B > CD E3 EC # compat
+FD5C > D3 CD CC # compat
+FD5D > D3 CC CD # compat
+FD5E > D3 CC EC # compat
+FD5F > D3 E3 CD # compat
+FD60 > D3 E3 CD # compat
+FD61 > D3 E3 CC # compat
+FD62 > D3 E3 E3 # compat
+FD63 > D3 E3 E3 # compat
+FD64 > D5 CD CD # compat
+FD65 > D5 CD CD # compat
+FD66 > D5 E3 E3 # compat
+FD67 > D4 CD E3 # compat
+FD68 > D4 CD E3 # compat
+FD69 > D4 CC ED # compat
+FD6A > D4 E3 CE # compat
+FD6B > D4 E3 CE # compat
+FD6C > D4 E3 E3 # compat
+FD6D > D4 E3 E3 # compat
+FD6E > D6 CD EC # compat
+FD6F > D6 CE E3 # compat
+FD70 > D6 CE E3 # compat
+FD71 > D8 E3 CD # compat
+FD72 > D8 E3 CD # compat
+FD73 > D8 E3 E3 # compat
+FD74 > D8 E3 ED # compat
+FD75 > DA CC E3 # compat
+FD76 > DA E3 E3 # compat
+FD77 > DA E3 E3 # compat
+FD78 > DA E3 EC # compat
+FD79 > DB E3 E3 # compat
+FD7A > DB E3 ED # compat
+FD7B > DB E3 EC # compat
+FD7C > DD CE E3 # compat
+FD7D > DD CE E3 # compat
+FD7E > DE E3 CD # compat
+FD7F > DE E3 E3 # compat
+FD80 > E1 CD E3 # compat
+FD81 > E1 CD ED # compat
+FD82 > E1 CD EC # compat
+FD83 > E1 CC CC # compat
+FD84 > E1 CC CC # compat
+FD85 > E1 CE E3 # compat
+FD86 > E1 CE E3 # compat
+FD87 > E1 E3 CD # compat
+FD88 > E1 E3 CD # compat
+FD89 > E3 CD CC # compat
+FD8A > E3 CD E3 # compat
+FD8B > E3 CD ED # compat
+FD8C > E3 CC CD # compat
+FD8D > E3 CC E3 # compat
+FD8E > E3 CE CC # compat
+FD8F > E3 CE E3 # compat
+FD92 > E3 CC CE # compat
+FD93 > E5 E3 CC # compat
+FD94 > E5 E3 E3 # compat
+FD95 > E4 CD E3 # compat
+FD96 > E4 CD EC # compat
+FD97 > E4 CC E3 # compat
+FD98 > E4 CC E3 # compat
+FD99 > E4 CC EC # compat
+FD9A > E4 E3 ED # compat
+FD9B > E4 E3 EC # compat
+FD9C > ED E3 E3 # compat
+FD9D > ED E3 E3 # compat
+FD9E > C8 CE ED # compat
+FD9F > CA CC ED # compat
+FDA0 > CA CC EC # compat
+FDA1 > CA CE ED # compat
+FDA2 > CA CE EC # compat
+FDA3 > CA E3 ED # compat
+FDA4 > CA E3 EC # compat
+FDA5 > CC E3 ED # compat
+FDA6 > CC CD EC # compat
+FDA7 > CC E3 EC # compat
+FDA8 > D3 CE EC # compat
+FDA9 > D5 CD ED # compat
+FDAA > D4 CD ED # compat
+FDAB > D6 CD ED # compat
+FDAC > E1 CC ED # compat
+FDAD > E1 E3 ED # compat
+FDAE > ED CD ED # compat
+FDAF > ED CC ED # compat
+FDB0 > ED E3 ED # compat
+FDB1 > E3 E3 ED # compat
+FDB2 > DE E3 ED # compat
+FDB3 > E4 CD ED # compat
+FDB4 > DE E3 CD # compat
+FDB5 > E1 CD E3 # compat
+FDB6 > DA E3 ED # compat
+FDB7 > DF E3 ED # compat
+FDB8 > E4 CC CD # compat
+FDB9 > E3 CE ED # compat
+FDBA > E1 CC E3 # compat
+FDBB > DF E3 E3 # compat
+FDBC > E1 CC E3 # compat
+FDBD > E4 CC CD # compat
+FDBE > CC CD ED # compat
+FDBF > CD CC ED # compat
+FDC0 > E3 CC ED # compat
+FDC1 > DD E3 ED # compat
+FDC2 > C8 CD ED # compat
+FDC3 > DF E3 E3 # compat
+FDC4 > DA CC E3 # compat
+FDC5 > D5 E3 E3 # compat
+FDC6 > D3 CE ED # compat
+FDC7 > E4 CC ED # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FE71 > DC F0 # compat
+FE77 > DC F3 # compat
+FE79 > DC F5 # compat
+FE7B > DC F6 # compat
+FE7D > DC F8 # compat
+FE7F > DC FA # compat
+FE80 > C1 # compat
+FE81 > C2 # compat
+FE82 > C2 # compat
+FE83 > C3 # compat
+FE84 > C3 # compat
+FE85 > C4 # compat
+FE86 > C4 # compat
+FE87 > C5 # compat
+FE88 > C5 # compat
+FE89 > C6 # compat
+FE8A > C6 # compat
+FE8B > C6 # compat
+FE8C > C6 # compat
+FE8D > C7 # compat
+FE8E > C7 # compat
+FE8F > C8 # compat
+FE90 > C8 # compat
+FE91 > C8 # compat
+FE92 > C8 # compat
+FE93 > C9 # compat
+FE94 > C9 # compat
+FE95 > CA # compat
+FE96 > CA # compat
+FE97 > CA # compat
+FE98 > CA # compat
+FE99 > CB # compat
+FE9A > CB # compat
+FE9B > CB # compat
+FE9C > CB # compat
+FE9D > CC # compat
+FE9E > CC # compat
+FE9F > CC # compat
+FEA0 > CC # compat
+FEA1 > CD # compat
+FEA2 > CD # compat
+FEA3 > CD # compat
+FEA4 > CD # compat
+FEA5 > CE # compat
+FEA6 > CE # compat
+FEA7 > CE # compat
+FEA8 > CE # compat
+FEA9 > CF # compat
+FEAA > CF # compat
+FEAB > D0 # compat
+FEAC > D0 # compat
+FEAD > D1 # compat
+FEAE > D1 # compat
+FEAF > D2 # compat
+FEB0 > D2 # compat
+FEB1 > D3 # compat
+FEB2 > D3 # compat
+FEB3 > D3 # compat
+FEB4 > D3 # compat
+FEB5 > D4 # compat
+FEB6 > D4 # compat
+FEB7 > D4 # compat
+FEB8 > D4 # compat
+FEB9 > D5 # compat
+FEBA > D5 # compat
+FEBB > D5 # compat
+FEBC > D5 # compat
+FEBD > D6 # compat
+FEBE > D6 # compat
+FEBF > D6 # compat
+FEC0 > D6 # compat
+FEC1 > D8 # compat
+FEC2 > D8 # compat
+FEC3 > D8 # compat
+FEC4 > D8 # compat
+FEC5 > D9 # compat
+FEC6 > D9 # compat
+FEC7 > D9 # compat
+FEC8 > D9 # compat
+FEC9 > DA # compat
+FECA > DA # compat
+FECB > DA # compat
+FECC > DA # compat
+FECD > DB # compat
+FECE > DB # compat
+FECF > DB # compat
+FED0 > DB # compat
+FED1 > DD # compat
+FED2 > DD # compat
+FED3 > DD # compat
+FED4 > DD # compat
+FED5 > DE # compat
+FED6 > DE # compat
+FED7 > DE # compat
+FED8 > DE # compat
+FED9 > DF # compat
+FEDA > DF # compat
+FEDB > DF # compat
+FEDC > DF # compat
+FEDD > E1 # compat
+FEDE > E1 # compat
+FEDF > E1 # compat
+FEE0 > E1 # compat
+FEE1 > E3 # compat
+FEE2 > E3 # compat
+FEE3 > E3 # compat
+FEE4 > E3 # compat
+FEE5 > E4 # compat
+FEE6 > E4 # compat
+FEE7 > E4 # compat
+FEE8 > E4 # compat
+FEE9 > E5 # compat
+FEEA > E5 # compat
+FEEB > E5 # compat
+FEEC > E5 # compat
+FEED > E6 # compat
+FEEE > E6 # compat
+FEEF > EC # compat
+FEF0 > EC # compat
+FEF1 > ED # compat
+FEF2 > ED # compat
+FEF3 > ED # compat
+FEF4 > ED # compat
+FEF5 > E1 C2 # compat
+FEF6 > E1 C2 # compat
+FEF7 > E1 C3 # compat
+FEF8 > E1 C3 # compat
+FEF9 > E1 C5 # compat
+FEFA > E1 C5 # compat
+FEFB > E1 C7 # compat
+FEFC > E1 C7 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 2
+     0300 > E0
+     0302 > E2
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F /
+     N 1
+     0302 > F4
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 3
+     0300 > F9
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00D7 > D7
+00E0 > E0
+00E2 > E2
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EE > EE
+00EF > EF
+00F4 > F4
+00F7 > F7
+00F9 > F9
+00FB > FB
+00FC > FC
+0152 > 8C
+0153 > 9C
+0192 > 83
+02C6 > 88
+037E > 3B
+0387 > B7
+060C > A1
+061B > BA
+061F > BF
+0621 > C1
+0622 > C2
+0623 > C3
+0624 > C4
+0625 > C5
+0626 > C6
+0627 > C7 /
+     N 3
+     0653 > C2
+     0654 > C3
+     0655 > C5
+     .
+0628 > C8
+0629 > C9
+062A > CA
+062B > CB
+062C > CC
+062D > CD
+062E > CE
+062F > CF
+0630 > D0
+0631 > D1
+0632 > D2
+0633 > D3
+0634 > D4
+0635 > D5
+0636 > D6
+0637 > D8
+0638 > D9
+0639 > DA
+063A > DB
+0640 > DC
+0641 > DD
+0642 > DE
+0643 > DF
+0644 > E1
+0645 > E3
+0646 > E4
+0647 > E5
+0648 > E6 /
+     N 1
+     0654 > C4
+     .
+0649 > EC
+064A > ED /
+     N 1
+     0654 > C6
+     .
+064B > F0
+064C > F1
+064D > F2
+064E > F3
+064F > F5
+0650 > F6
+0651 > F8
+0652 > FA
+0679 > 8A
+067E > 81
+0686 > 8D
+0688 > 8F
+0691 > 9A
+0698 > 8E
+06A9 > 98
+06AF > 90
+06BA > 9F
+06BE > AA
+06C1 > C0
+06D2 > FF
+1FEF > 60
+1FFD > B4
+200C > 9D
+200D > 9E
+200E > FD
+200F > FE
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 067E
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0679
+8B > 2039
+8C > 0152
+8D > 0686
+8E > 0698
+8F > 0688
+90 > 06AF
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 06A9
+99 > 2122
+9A > 0691
+9B > 203A
+9C > 0153
+9D > 200C
+9E > 200D
+9F > 06BA
+A0 > 00A0
+A1 > 060C
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 06BE
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 061B
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 061F
+C0 > 06C1
+C1 > 0621
+C2 > 0627 0653
+C3 > 0627 0654
+C4 > 0648 0654
+C5 > 0627 0655
+C6 > 064A 0654
+C7 > 0627
+C8 > 0628
+C9 > 0629
+CA > 062A
+CB > 062B
+CC > 062C
+CD > 062D
+CE > 062E
+CF > 062F
+D0 > 0630
+D1 > 0631
+D2 > 0632
+D3 > 0633
+D4 > 0634
+D5 > 0635
+D6 > 0636
+D7 > 00D7
+D8 > 0637
+D9 > 0638
+DA > 0639
+DB > 063A
+DC > 0640
+DD > 0641
+DE > 0642
+DF > 0643
+E0 > 0061 0300
+E1 > 0644
+E2 > 0061 0302
+E3 > 0645
+E4 > 0646
+E5 > 0647
+E6 > 0648
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0649
+ED > 064A
+EE > 0069 0302
+EF > 0069 0308
+F0 > 064B
+F1 > 064C
+F2 > 064D
+F3 > 064E
+F4 > 006F 0302
+F5 > 064F
+F6 > 0650
+F7 > 00F7
+F8 > 0651
+F9 > 0075 0300
+FA > 0652
+FB > 0075 0302
+FC > 0075 0308
+FD > 200E
+FE > 200F
+FF > 06D2
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 067E
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 0679
+8B > 2039
+8C > 0152
+8D > 0686
+8E > 0698
+8F > 0688
+90 > 06AF
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 06A9
+99 > 2122
+9A > 0691
+9B > 203A
+9C > 0153
+9D > 200C
+9E > 200D
+9F > 06BA
+A0 > 00A0
+A1 > 060C
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 06BE
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 061B
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 061F
+C0 > 06C1
+C1 > 0621
+C2 > 0622
+C3 > 0623
+C4 > 0624
+C5 > 0625
+C6 > 0626
+C7 > 0627
+C8 > 0628
+C9 > 0629
+CA > 062A
+CB > 062B
+CC > 062C
+CD > 062D
+CE > 062E
+CF > 062F
+D0 > 0630
+D1 > 0631
+D2 > 0632
+D3 > 0633
+D4 > 0634
+D5 > 0635
+D6 > 0636
+D7 > 00D7
+D8 > 0637
+D9 > 0638
+DA > 0639
+DB > 063A
+DC > 0640
+DD > 0641
+DE > 0642
+DF > 0643
+E0 > 00E0
+E1 > 0644
+E2 > 00E2
+E3 > 0645
+E4 > 0646
+E5 > 0647
+E6 > 0648
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 0649
+ED > 064A
+EE > 00EE
+EF > 00EF
+F0 > 064B
+F1 > 064C
+F2 > 064D
+F3 > 064E
+F4 > 00F4
+F5 > 064F
+F6 > 0650
+F7 > 00F7
+F8 > 0651
+F9 > 00F9
+FA > 0652
+FB > 00FB
+FC > 00FC
+FD > 200E
+FE > 200F
+FF > 06D2
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1256.cset b/data/cp1256.cset
new file mode 100644 (file)
index 0000000..fb3de64
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1256
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 067E L Y 81 81 81 81 81 81 # ARABIC LETTER PEH
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 0679 L Y 8A 8A 8A 8A 8A 8A # ARABIC LETTER TTEH
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE
+8D 0686 L Y 8D 8D 8D 8D 8D 8D # ARABIC LETTER TCHEH
+8E 0698 L Y 8E 8E 8E 8E 8E 8E # ARABIC LETTER JEH
+8F 0688 L Y 8F 8F 8F 8F 8F 8F # ARABIC LETTER DDAL
+90 06AF L Y 90 90 90 90 90 90 # ARABIC LETTER GAF
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 06A9 L Y 98 98 98 98 98 98 # ARABIC LETTER KEHEH
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 0691 L Y 9A 9A 9A 9A 9A 9A # ARABIC LETTER RREH
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE
+9D 200C - N 9D 9D 9D 00 00 00 # ZERO WIDTH NON-JOINER
+9E 200D - N 9E 9E 9E 00 00 00 # ZERO WIDTH JOINER
+9F 06BA L Y 9F 9F 9F 9F 9F 9F # ARABIC LETTER NOON GHUNNA
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 060C - Y A1 A1 A1 00 00 00 # ARABIC COMMA
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 06BE L Y AA AA AA AA AA AA # ARABIC LETTER HEH DOACHASHMEE
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 061B - Y BA BA BA 00 00 00 # ARABIC SEMICOLON
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 061F - Y BF BF BF 00 00 00 # ARABIC QUESTION MARK
+C0 06C1 L Y C0 C0 C0 C0 C0 C0 # ARABIC LETTER HEH GOAL
+C1 0621 L Y C1 C1 C1 C1 C1 C1 # ARABIC LETTER HAMZA
+C2 0622 L Y C2 C2 C2 C7 C7 C7 # ARABIC LETTER ALEF WITH MADDA ABOVE
+C3 0623 L Y C3 C3 C3 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA ABOVE
+C4 0624 L Y C4 C4 C4 E6 E6 E6 # ARABIC LETTER WAW WITH HAMZA ABOVE
+C5 0625 L Y C5 C5 C5 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA BELOW
+C6 0626 L Y C6 C6 C6 ED ED ED # ARABIC LETTER YEH WITH HAMZA ABOVE
+C7 0627 L Y C7 C7 C7 C7 C7 C7 # ARABIC LETTER ALEF
+C8 0628 L Y C8 C8 C8 C8 C8 C8 # ARABIC LETTER BEH
+C9 0629 L Y C9 C9 C9 C9 C9 C9 # ARABIC LETTER TEH MARBUTA
+CA 062A L Y CA CA CA CA CA CA # ARABIC LETTER TEH
+CB 062B L Y CB CB CB CB CB CB # ARABIC LETTER THEH
+CC 062C L Y CC CC CC CC CC CC # ARABIC LETTER JEEM
+CD 062D L Y CD CD CD CD CD CD # ARABIC LETTER HAH
+CE 062E L Y CE CE CE CE CE CE # ARABIC LETTER KHAH
+CF 062F L Y CF CF CF CF CF CF # ARABIC LETTER DAL
+D0 0630 L Y D0 D0 D0 D0 D0 D0 # ARABIC LETTER THAL
+D1 0631 L Y D1 D1 D1 D1 D1 D1 # ARABIC LETTER REH
+D2 0632 L Y D2 D2 D2 D2 D2 D2 # ARABIC LETTER ZAIN
+D3 0633 L Y D3 D3 D3 D3 D3 D3 # ARABIC LETTER SEEN
+D4 0634 L Y D4 D4 D4 D4 D4 D4 # ARABIC LETTER SHEEN
+D5 0635 L Y D5 D5 D5 D5 D5 D5 # ARABIC LETTER SAD
+D6 0636 L Y D6 D6 D6 D6 D6 D6 # ARABIC LETTER DAD
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 0637 L Y D8 D8 D8 D8 D8 D8 # ARABIC LETTER TAH
+D9 0638 L Y D9 D9 D9 D9 D9 D9 # ARABIC LETTER ZAH
+DA 0639 L Y DA DA DA DA DA DA # ARABIC LETTER AIN
+DB 063A L Y DB DB DB DB DB DB # ARABIC LETTER GHAIN
+DC 0640 l Y DC DC DC DC DC DC # ARABIC TATWEEL
+DD 0641 L Y DD DD DD DD DD DD # ARABIC LETTER FEH
+DE 0642 L Y DE DE DE DE DE DE # ARABIC LETTER QAF
+DF 0643 L Y DF DF DF DF DF DF # ARABIC LETTER KAF
+E0 00E0 L Y E0 E0 E0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 0644 L Y E1 E1 E1 E1 E1 E1 # ARABIC LETTER LAM
+E2 00E2 L Y E2 E2 E2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 0645 L Y E3 E3 E3 E3 E3 E3 # ARABIC LETTER MEEM
+E4 0646 L Y E4 E4 E4 E4 E4 E4 # ARABIC LETTER NOON
+E5 0647 L Y E5 E5 E5 E5 E5 E5 # ARABIC LETTER HEH
+E6 0648 L Y E6 E6 E6 E6 E6 E6 # ARABIC LETTER WAW
+E7 00E7 L Y E7 E7 E7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y E8 E8 E8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y E9 E9 E9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y EA EA EA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y EB EB EB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 0649 L Y EC EC EC EC EC EC # ARABIC LETTER ALEF MAKSURA
+ED 064A L Y ED ED ED ED ED ED # ARABIC LETTER YEH
+EE 00EE L Y EE EE EE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y EF EF EF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 064B M M F0 F0 F0 00 00 00 # ARABIC FATHATAN
+F1 064C M M F1 F1 F1 00 00 00 # ARABIC DAMMATAN
+F2 064D M M F2 F2 F2 00 00 00 # ARABIC KASRATAN
+F3 064E M M F3 F3 F3 00 00 00 # ARABIC FATHA
+F4 00F4 L Y F4 F4 F4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 064F M M F5 F5 F5 00 00 00 # ARABIC DAMMA
+F6 0650 M M F6 F6 F6 00 00 00 # ARABIC KASRA
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 0651 M M F8 F8 F8 00 00 00 # ARABIC SHADDA
+F9 00F9 L Y F9 F9 F9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 0652 M M FA FA FA 00 00 00 # ARABIC SUKUN
+FB 00FB L Y FB FB FB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y FC FC FC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK
+FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK
+FF 06D2 L Y FF FF FF FF FF FF # ARABIC LETTER YEH BARREE
diff --git a/data/cp1257.cmap b/data/cp1257.cmap
new file mode 100644 (file)
index 0000000..232d97e
--- /dev/null
@@ -0,0 +1,1962 @@
+INTERNAL
+/
+N 949
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0304 > C2
+     0308 > C4
+     030A > C5
+     0328 > C0
+     .
+0042 > 42
+0043 > 43 /
+     N 2
+     0301 > C3
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0301 > C9
+     0304 > C7
+     0307 > CB
+     0328 > C6
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > CC
+     .
+0048 > 48
+0049 > 49 /
+     N 2
+     0304 > CE
+     0328 > C1
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > CD
+     .
+004C > 4C /
+     N 1
+     0327 > CF
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     0327 > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0303 > D5
+     0304 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > AA
+     .
+0053 > 53 /
+     N 2
+     0301 > DA
+     030C > D0
+     .
+0054 > 54
+0055 > 55 /
+     N 3
+     0304 > DB
+     0308 > DC
+     0328 > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 3
+     0301 > CA
+     0307 > DD
+     030C > DE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0304 > E2
+     0308 > E4
+     030A > E5
+     0328 > E0
+     .
+0062 > 62
+0063 > 63 /
+     N 2
+     0301 > E3
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0301 > E9
+     0304 > E7
+     0307 > EB
+     0328 > E6
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > EC
+     .
+0068 > 68
+0069 > 69 /
+     N 2
+     0304 > EE
+     0328 > E1
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > ED
+     .
+006C > 6C /
+     N 1
+     0327 > EF
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     0327 > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0303 > F5
+     0304 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > BA
+     .
+0073 > 73 /
+     N 2
+     0301 > FA
+     030C > F0
+     .
+0074 > 74
+0075 > 75 /
+     N 3
+     0304 > FB
+     0308 > FC
+     0328 > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 3
+     0301 > EA
+     0307 > FD
+     030C > FE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0083 > 83
+0088 > 88
+008A > 8A
+008C > 8C
+0090 > 90
+0098 > 98
+009A > 9A
+009C > 9C
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A8 > 8D
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > 9D
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > 8F
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > C5
+00C6 > AF
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > D3
+00D4 > 4F # unsup: 004F 0302
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > A8
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > E5
+00E6 > BF
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > F3
+00F4 > 6F # unsup: 006F 0302
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > B8
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > C2
+0101 > E2
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > C0
+0105 > E0
+0106 > C3
+0107 > E3
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > C7
+0113 > E7
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > CB
+0117 > EB
+0118 > C6
+0119 > E6
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > CC
+0123 > EC
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > CE
+012B > EE
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > C1
+012F > E1
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > CD
+0137 > ED
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > CF
+013C > EF
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0141 > D9
+0142 > F9
+0143 > D1
+0144 > F1
+0145 > D2
+0146 > F2
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > D4
+014D > F4
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > AA
+0157 > BA
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > DA
+015B > FA
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > D0
+0161 > F0
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > DB
+016B > FB
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > D8
+0173 > F8
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > CA
+017A > EA
+017B > DD
+017C > FD
+017D > DE
+017E > FE
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 DE # compat
+01C5 > 44 FE # compat
+01C6 > 64 FE # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > AF # unsup: 00C6 0304
+01E3 > BF # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > AF # unsup: 00C6 0301
+01FD > BF # unsup: 00E6 0301
+01FE > A8 # unsup: 00D8 0301
+01FF > B8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C7 > 8E
+02D9 > FF
+02DB > 9E
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > 8D # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > C7 # unsup: 0112 0300
+1E15 > E7 # unsup: 0113 0300
+1E16 > C7 # unsup: 0112 0301
+1E17 > E7 # unsup: 0113 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > D4 # unsup: 014C 0300
+1E51 > F4 # unsup: 014D 0300
+1E52 > D4 # unsup: 014C 0301
+1E53 > F4 # unsup: 014D 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > DA # unsup: 015A 0307
+1E65 > FA # unsup: 015B 0307
+1E66 > D0 # unsup: 0160 0307
+1E67 > F0 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > DB # unsup: 016A 0308
+1E7B > FB # unsup: 016B 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > 8D # unsup: 00A8 0342
+1FED > 8D # unsup: 00A8 0300
+1FEE > 8D # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > 9D # compat
+FFE4 > A6 # compat
+.
+
+STRICT
+/
+N 258
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0304 > C2
+     0308 > C4
+     030A > C5
+     0328 > C0
+     .
+0042 > 42
+0043 > 43 /
+     N 2
+     0301 > C3
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0301 > C9
+     0304 > C7
+     0307 > CB
+     0328 > C6
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > CC
+     .
+0048 > 48
+0049 > 49 /
+     N 2
+     0304 > CE
+     0328 > C1
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > CD
+     .
+004C > 4C /
+     N 1
+     0327 > CF
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     0327 > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0303 > D5
+     0304 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > AA
+     .
+0053 > 53 /
+     N 2
+     0301 > DA
+     030C > D0
+     .
+0054 > 54
+0055 > 55 /
+     N 3
+     0304 > DB
+     0308 > DC
+     0328 > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 3
+     0301 > CA
+     0307 > DD
+     030C > DE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0304 > E2
+     0308 > E4
+     030A > E5
+     0328 > E0
+     .
+0062 > 62
+0063 > 63 /
+     N 2
+     0301 > E3
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0301 > E9
+     0304 > E7
+     0307 > EB
+     0328 > E6
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > EC
+     .
+0068 > 68
+0069 > 69 /
+     N 2
+     0304 > EE
+     0328 > E1
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > ED
+     .
+006C > 6C /
+     N 1
+     0327 > EF
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     0327 > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0303 > F5
+     0304 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > BA
+     .
+0073 > 73 /
+     N 2
+     0301 > FA
+     030C > F0
+     .
+0074 > 74
+0075 > 75 /
+     N 3
+     0304 > FB
+     0308 > FC
+     0328 > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 3
+     0301 > EA
+     0307 > FD
+     030C > FE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+0083 > 83
+0088 > 88
+008A > 8A
+008C > 8C
+0090 > 90
+0098 > 98
+009A > 9A
+009C > 9C
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A8 > 8D
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > 9D
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > 8F
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C4 > C4
+00C5 > C5
+00C6 > AF
+00C9 > C9
+00D3 > D3
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > A8
+00DC > DC
+00DF > DF
+00E4 > E4
+00E5 > E5
+00E6 > BF
+00E9 > E9
+00F3 > F3
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > B8
+00FC > FC
+0100 > C2
+0101 > E2
+0104 > C0
+0105 > E0
+0106 > C3
+0107 > E3
+010C > C8
+010D > E8
+0112 > C7
+0113 > E7
+0116 > CB
+0117 > EB
+0118 > C6
+0119 > E6
+0122 > CC
+0123 > EC
+012A > CE
+012B > EE
+012E > C1
+012F > E1
+0136 > CD
+0137 > ED
+013B > CF
+013C > EF
+0141 > D9
+0142 > F9
+0143 > D1
+0144 > F1
+0145 > D2
+0146 > F2
+014C > D4
+014D > F4
+0156 > AA
+0157 > BA
+015A > DA
+015B > FA
+0160 > D0
+0161 > F0
+016A > DB
+016B > FB
+0172 > D8
+0173 > F8
+0179 > CA
+017A > EA
+017B > DD
+017C > FD
+017D > DE
+017E > FE
+02C7 > 8E
+02D9 > FF
+02DB > 9E
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 254
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0083
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 00A8
+8E > 02C7
+8F > 00B8
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 00AF
+9E > 02DB
+9F > 009F
+A0 > 00A0
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A6 > 00A6
+A7 > 00A7
+A8 > 00D8
+A9 > 00A9
+AA > 0052 0327
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00C6
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00F8
+B9 > 00B9
+BA > 0072 0327
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00E6
+C0 > 0041 0328
+C1 > 0049 0328
+C2 > 0041 0304
+C3 > 0043 0301
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 0045 0328
+C7 > 0045 0304
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 005A 0301
+CB > 0045 0307
+CC > 0047 0327
+CD > 004B 0327
+CE > 0049 0304
+CF > 004C 0327
+D0 > 0053 030C
+D1 > 004E 0301
+D2 > 004E 0327
+D3 > 004F 0301
+D4 > 004F 0304
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 0055 0328
+D9 > 0141
+DA > 0053 0301
+DB > 0055 0304
+DC > 0055 0308
+DD > 005A 0307
+DE > 005A 030C
+DF > 00DF
+E0 > 0061 0328
+E1 > 0069 0328
+E2 > 0061 0304
+E3 > 0063 0301
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 0065 0328
+E7 > 0065 0304
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 007A 0301
+EB > 0065 0307
+EC > 0067 0327
+ED > 006B 0327
+EE > 0069 0304
+EF > 006C 0327
+F0 > 0073 030C
+F1 > 006E 0301
+F2 > 006E 0327
+F3 > 006F 0301
+F4 > 006F 0304
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 0075 0328
+F9 > 0142
+FA > 0073 0301
+FB > 0075 0304
+FC > 0075 0308
+FD > 007A 0307
+FE > 007A 030C
+FF > 02D9
+.
+
+NFC
+/
+N 254
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0083
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 0088
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 008C
+8D > 00A8
+8E > 02C7
+8F > 00B8
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 0098
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 009C
+9D > 00AF
+9E > 02DB
+9F > 009F
+A0 > 00A0
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A6 > 00A6
+A7 > 00A7
+A8 > 00D8
+A9 > 00A9
+AA > 0156
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00C6
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00F8
+B9 > 00B9
+BA > 0157
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00E6
+C0 > 0104
+C1 > 012E
+C2 > 0100
+C3 > 0106
+C4 > 00C4
+C5 > 00C5
+C6 > 0118
+C7 > 0112
+C8 > 010C
+C9 > 00C9
+CA > 0179
+CB > 0116
+CC > 0122
+CD > 0136
+CE > 012A
+CF > 013B
+D0 > 0160
+D1 > 0143
+D2 > 0145
+D3 > 00D3
+D4 > 014C
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 0172
+D9 > 0141
+DA > 015A
+DB > 016A
+DC > 00DC
+DD > 017B
+DE > 017D
+DF > 00DF
+E0 > 0105
+E1 > 012F
+E2 > 0101
+E3 > 0107
+E4 > 00E4
+E5 > 00E5
+E6 > 0119
+E7 > 0113
+E8 > 010D
+E9 > 00E9
+EA > 017A
+EB > 0117
+EC > 0123
+ED > 0137
+EE > 012B
+EF > 013C
+F0 > 0161
+F1 > 0144
+F2 > 0146
+F3 > 00F3
+F4 > 014D
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 0173
+F9 > 0142
+FA > 015B
+FB > 016B
+FC > 00FC
+FD > 017C
+FE > 017E
+FF > 02D9
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1257.cset b/data/cp1257.cset
new file mode 100644 (file)
index 0000000..696c15a
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1257
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 00A8 - Y 8D 8D 8D 00 00 00 # DIAERESIS
+8E 02C7 M Y 8E 8E 8E 00 00 00 # CARON
+8F 00B8 - Y 8F 8F 8F 00 00 00 # CEDILLA
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 00AF - Y 9D 9D 9D 00 00 00 # MACRON
+9E 02DB - Y 9E 9E 9E 00 00 00 # OGONEK
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 E0A1 . N A1 A1 A1 00 00 00 # <unused>
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 E0A5 . N A5 A5 A5 00 00 00 # <unused>
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00D8 L Y A8 B8 A8 A8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 0156 L Y AA BA AA 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00C6 L Y AF BF AF AF 2A 00 # LATIN CAPITAL LETTER AE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00F8 L Y A8 B8 A8 B8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 0157 L Y AA BA AA 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00E6 L Y AF BF AF BF 2A 00 # LATIN SMALL LETTER AE
+C0 0104 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+C1 012E L Y C1 E1 C1 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK
+C2 0100 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON
+C3 0106 L Y C3 E3 C3 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 0118 L Y C6 E6 C6 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+C7 0112 L Y C7 E7 C7 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0179 L Y CA EA CA 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE
+CB 0116 L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+CC 0122 L Y CC EC CC 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA
+CD 0136 L Y CD ED CD 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA
+CE 012A L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON
+CF 013B L Y CF EF CF 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA
+D0 0160 L Y D0 F0 D0 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE
+D2 0145 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 014C L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 0172 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK
+D9 0141 L Y D9 F9 D9 D9 F9 F9 # LATIN CAPITAL LETTER L WITH STROKE
+DA 015A L Y DA FA DA 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE
+DB 016A L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 017B L Y DD FD DD 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+DE 017D L Y DE FE DE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0105 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+E1 012F L Y C1 E1 C1 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK
+E2 0101 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH MACRON
+E3 0107 L Y C3 E3 C3 63 63 63 # LATIN SMALL LETTER C WITH ACUTE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 0119 L Y C6 E6 C6 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+E7 0113 L Y C7 E7 C7 65 2A 00 # LATIN SMALL LETTER E WITH MACRON
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 017A L Y CA EA CA 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE
+EB 0117 L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE
+EC 0123 L Y CC EC CC 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA
+ED 0137 L Y CD ED CD 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA
+EE 012B L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH MACRON
+EF 013C L Y CF EF CF 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA
+F0 0161 L Y D0 F0 D0 73 73 73 # LATIN SMALL LETTER S WITH CARON
+F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE
+F2 0146 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 014D L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 0173 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK
+F9 0142 L Y D9 F9 D9 F9 F9 F9 # LATIN SMALL LETTER L WITH STROKE
+FA 015B L Y DA FA DA 73 73 73 # LATIN SMALL LETTER S WITH ACUTE
+FB 016B L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH MACRON
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 017C L Y DD FD DD 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+FE 017E L Y DE FE DE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE
diff --git a/data/cp1258.cmap b/data/cp1258.cmap
new file mode 100644 (file)
index 0000000..859d742
--- /dev/null
@@ -0,0 +1,2403 @@
+INTERNAL
+/
+N 955
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 3
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     031B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     031B > DD
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > 9F
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 3
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     031B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     031B > FD
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008A > 8A
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009A > 9A
+009D > 9D
+009E > 9E
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > 41 DE
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > 49 CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > 4F CC
+00D3 > D3
+00D4 > D4
+00D5 > 4F DE
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 EC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > 61 DE
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > 69 CC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > 6F CC
+00F3 > F3
+00F4 > F4
+00F5 > 6F DE
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 EC
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > C3
+0103 > E3
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 EC
+0107 > 63 EC
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0110 > D0
+0111 > F0
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 DE
+0129 > 69 DE
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C EC
+013A > 6C EC
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E EC
+0144 > 6E EC
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 8C
+0153 > 9C
+0154 > 52 EC
+0155 > 72 EC
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 EC
+015B > 73 EC
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 DE
+0169 > 75 DE
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 9F
+0179 > 5A EC
+017A > 7A EC
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+0192 > 83
+01A0 > D5
+01A1 > F5
+01AF > DD
+01B0 > FD
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC EC
+01D8 > FC EC
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC CC
+01DC > FC CC
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 EC
+01F5 > 67 EC
+01F8 > 4E CC
+01F9 > 6E CC
+01FA > C5 EC
+01FB > E5 EC
+01FC > C6 EC
+01FD > E6 EC
+01FE > D8 EC
+01FF > F8 EC
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > 4F DE # unsup: 004F 0303 0304
+022D > 6F DE # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C6 > 88
+02DC > 98
+0300 > CC
+0301 > EC
+0302 > 0 # unsup
+0303 > DE
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > D2
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > F2
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > CC
+0341 > EC
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > EC # unsup: 0308 0301
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 EC
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 F2
+1E05 > 62 F2
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 EC
+1E09 > E7 EC
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 F2
+1E0D > 64 F2
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 CC # unsup: 0045 0304 0300
+1E15 > 65 CC # unsup: 0065 0304 0300
+1E16 > 45 EC # unsup: 0045 0304 0301
+1E17 > 65 EC # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 F2
+1E25 > 68 F2
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF EC
+1E2F > EF EC
+1E30 > 4B EC
+1E31 > 6B EC
+1E32 > 4B F2
+1E33 > 6B F2
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C F2
+1E37 > 6C F2
+1E38 > 4C F2 # unsup: 004C 0323 0304
+1E39 > 6C F2 # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D EC
+1E3F > 6D EC
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D F2
+1E43 > 6D F2
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E F2
+1E47 > 6E F2
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F DE EC
+1E4D > 6F DE EC
+1E4E > 4F DE # unsup: 004F 0303 0308
+1E4F > 6F DE # unsup: 006F 0303 0308
+1E50 > 4F CC # unsup: 004F 0304 0300
+1E51 > 6F CC # unsup: 006F 0304 0300
+1E52 > 4F EC # unsup: 004F 0304 0301
+1E53 > 6F EC # unsup: 006F 0304 0301
+1E54 > 50 EC
+1E55 > 70 EC
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 F2
+1E5B > 72 F2
+1E5C > 52 F2 # unsup: 0052 0323 0304
+1E5D > 72 F2 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 F2
+1E63 > 73 F2
+1E64 > 53 EC # unsup: 0053 0301 0307
+1E65 > 73 EC # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 F2 # unsup: 0053 0323 0307
+1E69 > 73 F2 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 F2
+1E6D > 74 F2
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 DE EC
+1E79 > 75 DE EC
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 DE
+1E7D > 76 DE
+1E7E > 56 F2
+1E7F > 76 F2
+1E80 > 57 CC
+1E81 > 77 CC
+1E82 > 57 EC
+1E83 > 77 EC
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 F2
+1E89 > 77 F2
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A F2
+1E93 > 7A F2
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 F2
+1EA1 > 61 F2
+1EA2 > 41 D2
+1EA3 > 61 D2
+1EA4 > C2 EC
+1EA5 > E2 EC
+1EA6 > C2 CC
+1EA7 > E2 CC
+1EA8 > C2 D2
+1EA9 > E2 D2
+1EAA > C2 DE
+1EAB > E2 DE
+1EAC > 41 F2 # unsup: 0041 0323 0302
+1EAD > 61 F2 # unsup: 0061 0323 0302
+1EAE > C3 EC
+1EAF > E3 EC
+1EB0 > C3 CC
+1EB1 > E3 CC
+1EB2 > C3 D2
+1EB3 > E3 D2
+1EB4 > C3 DE
+1EB5 > E3 DE
+1EB6 > 41 F2 # unsup: 0041 0323 0306
+1EB7 > 61 F2 # unsup: 0061 0323 0306
+1EB8 > 45 F2
+1EB9 > 65 F2
+1EBA > 45 D2
+1EBB > 65 D2
+1EBC > 45 DE
+1EBD > 65 DE
+1EBE > CA EC
+1EBF > EA EC
+1EC0 > CA CC
+1EC1 > EA CC
+1EC2 > CA D2
+1EC3 > EA D2
+1EC4 > CA DE
+1EC5 > EA DE
+1EC6 > 45 F2 # unsup: 0045 0323 0302
+1EC7 > 65 F2 # unsup: 0065 0323 0302
+1EC8 > 49 D2
+1EC9 > 69 D2
+1ECA > 49 F2
+1ECB > 69 F2
+1ECC > 4F F2
+1ECD > 6F F2
+1ECE > 4F D2
+1ECF > 6F D2
+1ED0 > D4 EC
+1ED1 > F4 EC
+1ED2 > D4 CC
+1ED3 > F4 CC
+1ED4 > D4 D2
+1ED5 > F4 D2
+1ED6 > D4 DE
+1ED7 > F4 DE
+1ED8 > 4F F2 # unsup: 004F 0323 0302
+1ED9 > 6F F2 # unsup: 006F 0323 0302
+1EDA > D5 EC
+1EDB > F5 EC
+1EDC > D5 CC
+1EDD > F5 CC
+1EDE > D5 D2
+1EDF > F5 D2
+1EE0 > D5 DE
+1EE1 > F5 DE
+1EE2 > D5 F2
+1EE3 > F5 F2
+1EE4 > 55 F2
+1EE5 > 75 F2
+1EE6 > 55 D2
+1EE7 > 75 D2
+1EE8 > DD EC
+1EE9 > FD EC
+1EEA > DD CC
+1EEB > FD CC
+1EEC > DD D2
+1EED > FD D2
+1EEE > DD DE
+1EEF > FD DE
+1EF0 > DD F2
+1EF1 > FD F2
+1EF2 > 59 CC
+1EF3 > 79 CC
+1EF4 > 59 F2
+1EF5 > 79 F2
+1EF6 > 59 D2
+1EF7 > 79 D2
+1EF8 > 59 DE
+1EF9 > 79 DE
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 CC
+1FEE > A8 EC
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 85
+202F > 20 # compat
+2030 > 89
+2039 > 8B
+203A > 9B
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AB > FE
+20AC > 80
+2122 > 99
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE31 > 97 # compat
+FE32 > 96 # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE58 > 97 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 433
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 3
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     031B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     031B > DD
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > 9F
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 3
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     031B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     031B > FD
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0081 > 81
+008A > 8A
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+009A > 9A
+009D > 9D
+009E > 9E
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > 41 DE
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > 49 CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > 4F CC
+00D3 > D3
+00D4 > D4
+00D5 > 4F DE
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 EC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > 61 DE
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > 69 CC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > 6F CC
+00F3 > F3
+00F4 > F4
+00F5 > 6F DE
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 EC
+00FF > FF
+0102 > C3
+0103 > E3
+0106 > 43 EC
+0107 > 63 EC
+0110 > D0
+0111 > F0
+0128 > 49 DE
+0129 > 69 DE
+0139 > 4C EC
+013A > 6C EC
+0143 > 4E EC
+0144 > 6E EC
+0152 > 8C
+0153 > 9C
+0154 > 52 EC
+0155 > 72 EC
+015A > 53 EC
+015B > 73 EC
+0168 > 55 DE
+0169 > 75 DE
+0178 > 9F
+0179 > 5A EC
+017A > 7A EC
+0192 > 83
+01A0 > D5
+01A1 > F5
+01AF > DD
+01B0 > FD
+01D7 > DC EC
+01D8 > FC EC
+01DB > DC CC
+01DC > FC CC
+01F4 > 47 EC
+01F5 > 67 EC
+01F8 > 4E CC
+01F9 > 6E CC
+01FA > C5 EC
+01FB > E5 EC
+01FC > C6 EC
+01FD > E6 EC
+01FE > D8 EC
+01FF > F8 EC
+02C6 > 88
+02DC > 98
+0300 > CC
+0301 > EC
+0303 > DE
+0309 > D2
+0323 > F2
+0340 > CC
+0341 > EC
+037E > 3B
+0385 > A8 EC
+0387 > B7
+1E04 > 42 F2
+1E05 > 62 F2
+1E08 > C7 EC
+1E09 > E7 EC
+1E0C > 44 F2
+1E0D > 64 F2
+1E24 > 48 F2
+1E25 > 68 F2
+1E2E > CF EC
+1E2F > EF EC
+1E30 > 4B EC
+1E31 > 6B EC
+1E32 > 4B F2
+1E33 > 6B F2
+1E36 > 4C F2
+1E37 > 6C F2
+1E3E > 4D EC
+1E3F > 6D EC
+1E42 > 4D F2
+1E43 > 6D F2
+1E46 > 4E F2
+1E47 > 6E F2
+1E4C > 4F DE EC
+1E4D > 6F DE EC
+1E54 > 50 EC
+1E55 > 70 EC
+1E5A > 52 F2
+1E5B > 72 F2
+1E62 > 53 F2
+1E63 > 73 F2
+1E6C > 54 F2
+1E6D > 74 F2
+1E78 > 55 DE EC
+1E79 > 75 DE EC
+1E7C > 56 DE
+1E7D > 76 DE
+1E7E > 56 F2
+1E7F > 76 F2
+1E80 > 57 CC
+1E81 > 77 CC
+1E82 > 57 EC
+1E83 > 77 EC
+1E88 > 57 F2
+1E89 > 77 F2
+1E92 > 5A F2
+1E93 > 7A F2
+1EA0 > 41 F2
+1EA1 > 61 F2
+1EA2 > 41 D2
+1EA3 > 61 D2
+1EA4 > C2 EC
+1EA5 > E2 EC
+1EA6 > C2 CC
+1EA7 > E2 CC
+1EA8 > C2 D2
+1EA9 > E2 D2
+1EAA > C2 DE
+1EAB > E2 DE
+1EAE > C3 EC
+1EAF > E3 EC
+1EB0 > C3 CC
+1EB1 > E3 CC
+1EB2 > C3 D2
+1EB3 > E3 D2
+1EB4 > C3 DE
+1EB5 > E3 DE
+1EB8 > 45 F2
+1EB9 > 65 F2
+1EBA > 45 D2
+1EBB > 65 D2
+1EBC > 45 DE
+1EBD > 65 DE
+1EBE > CA EC
+1EBF > EA EC
+1EC0 > CA CC
+1EC1 > EA CC
+1EC2 > CA D2
+1EC3 > EA D2
+1EC4 > CA DE
+1EC5 > EA DE
+1EC8 > 49 D2
+1EC9 > 69 D2
+1ECA > 49 F2
+1ECB > 69 F2
+1ECC > 4F F2
+1ECD > 6F F2
+1ECE > 4F D2
+1ECF > 6F D2
+1ED0 > D4 EC
+1ED1 > F4 EC
+1ED2 > D4 CC
+1ED3 > F4 CC
+1ED4 > D4 D2
+1ED5 > F4 D2
+1ED6 > D4 DE
+1ED7 > F4 DE
+1EDA > D5 EC
+1EDB > F5 EC
+1EDC > D5 CC
+1EDD > F5 CC
+1EDE > D5 D2
+1EDF > F5 D2
+1EE0 > D5 DE
+1EE1 > F5 DE
+1EE2 > D5 F2
+1EE3 > F5 F2
+1EE4 > 55 F2
+1EE5 > 75 F2
+1EE6 > 55 D2
+1EE7 > 75 D2
+1EE8 > DD EC
+1EE9 > FD EC
+1EEA > DD CC
+1EEB > FD CC
+1EEC > DD D2
+1EED > FD D2
+1EEE > DD DE
+1EEF > FD DE
+1EF0 > DD F2
+1EF1 > FD F2
+1EF2 > 59 CC
+1EF3 > 79 CC
+1EF4 > 59 F2
+1EF5 > 79 F2
+1EF6 > 59 D2
+1EF7 > 79 D2
+1EF8 > 59 DE
+1EF9 > 79 DE
+1FED > A8 CC
+1FEE > A8 EC
+1FEF > 60
+1FFD > B4
+2013 > 96
+2014 > 97
+2018 > 91
+2019 > 92
+201A > 82
+201C > 93
+201D > 94
+201E > 84
+2020 > 86
+2021 > 87
+2022 > 95
+2026 > 85
+2030 > 89
+2039 > 8B
+203A > 9B
+20AB > FE
+20AC > 80
+2122 > 99
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 009E
+9F > 0059 0308
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0306
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 0110
+D1 > 004E 0303
+D2 > 0309
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 031B
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0055 031B
+DE > 0303
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0306
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0301
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 0111
+F1 > 006E 0303
+F2 > 0323
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 031B
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0075 031B
+FE > 20AB
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041 /
+   N 3
+   D2 > 1EA2
+   DE > 00C3
+   F2 > 1EA0
+   .
+42 > 0042 /
+   N 1
+   F2 > 1E04
+   .
+43 > 0043 /
+   N 1
+   EC > 0106
+   .
+44 > 0044 /
+   N 1
+   F2 > 1E0C
+   .
+45 > 0045 /
+   N 3
+   D2 > 1EBA
+   DE > 1EBC
+   F2 > 1EB8
+   .
+46 > 0046
+47 > 0047 /
+   N 1
+   EC > 01F4
+   .
+48 > 0048 /
+   N 1
+   F2 > 1E24
+   .
+49 > 0049 /
+   N 4
+   CC > 00CC
+   D2 > 1EC8
+   DE > 0128
+   F2 > 1ECA
+   .
+4A > 004A
+4B > 004B /
+   N 2
+   EC > 1E30
+   F2 > 1E32
+   .
+4C > 004C /
+   N 2
+   EC > 0139
+   F2 > 1E36
+   .
+4D > 004D /
+   N 2
+   EC > 1E3E
+   F2 > 1E42
+   .
+4E > 004E /
+   N 3
+   CC > 01F8
+   EC > 0143
+   F2 > 1E46
+   .
+4F > 004F /
+   N 4
+   CC > 00D2
+   D2 > 1ECE
+   DE > 00D5 /
+      N 1
+      EC > 1E4C
+      .
+   F2 > 1ECC
+   .
+50 > 0050 /
+   N 1
+   EC > 1E54
+   .
+51 > 0051
+52 > 0052 /
+   N 2
+   EC > 0154
+   F2 > 1E5A
+   .
+53 > 0053 /
+   N 2
+   EC > 015A
+   F2 > 1E62
+   .
+54 > 0054 /
+   N 1
+   F2 > 1E6C
+   .
+55 > 0055 /
+   N 3
+   D2 > 1EE6
+   DE > 0168 /
+      N 1
+      EC > 1E78
+      .
+   F2 > 1EE4
+   .
+56 > 0056 /
+   N 2
+   DE > 1E7C
+   F2 > 1E7E
+   .
+57 > 0057 /
+   N 3
+   CC > 1E80
+   EC > 1E82
+   F2 > 1E88
+   .
+58 > 0058
+59 > 0059 /
+   N 5
+   CC > 1EF2
+   D2 > 1EF6
+   DE > 1EF8
+   EC > 00DD
+   F2 > 1EF4
+   .
+5A > 005A /
+   N 2
+   EC > 0179
+   F2 > 1E92
+   .
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061 /
+   N 3
+   D2 > 1EA3
+   DE > 00E3
+   F2 > 1EA1
+   .
+62 > 0062 /
+   N 1
+   F2 > 1E05
+   .
+63 > 0063 /
+   N 1
+   EC > 0107
+   .
+64 > 0064 /
+   N 1
+   F2 > 1E0D
+   .
+65 > 0065 /
+   N 3
+   D2 > 1EBB
+   DE > 1EBD
+   F2 > 1EB9
+   .
+66 > 0066
+67 > 0067 /
+   N 1
+   EC > 01F5
+   .
+68 > 0068 /
+   N 1
+   F2 > 1E25
+   .
+69 > 0069 /
+   N 4
+   CC > 00EC
+   D2 > 1EC9
+   DE > 0129
+   F2 > 1ECB
+   .
+6A > 006A
+6B > 006B /
+   N 2
+   EC > 1E31
+   F2 > 1E33
+   .
+6C > 006C /
+   N 2
+   EC > 013A
+   F2 > 1E37
+   .
+6D > 006D /
+   N 2
+   EC > 1E3F
+   F2 > 1E43
+   .
+6E > 006E /
+   N 3
+   CC > 01F9
+   EC > 0144
+   F2 > 1E47
+   .
+6F > 006F /
+   N 4
+   CC > 00F2
+   D2 > 1ECF
+   DE > 00F5 /
+      N 1
+      EC > 1E4D
+      .
+   F2 > 1ECD
+   .
+70 > 0070 /
+   N 1
+   EC > 1E55
+   .
+71 > 0071
+72 > 0072 /
+   N 2
+   EC > 0155
+   F2 > 1E5B
+   .
+73 > 0073 /
+   N 2
+   EC > 015B
+   F2 > 1E63
+   .
+74 > 0074 /
+   N 1
+   F2 > 1E6D
+   .
+75 > 0075 /
+   N 3
+   D2 > 1EE7
+   DE > 0169 /
+      N 1
+      EC > 1E79
+      .
+   F2 > 1EE5
+   .
+76 > 0076 /
+   N 2
+   DE > 1E7D
+   F2 > 1E7F
+   .
+77 > 0077 /
+   N 3
+   CC > 1E81
+   EC > 1E83
+   F2 > 1E89
+   .
+78 > 0078
+79 > 0079 /
+   N 5
+   CC > 1EF3
+   D2 > 1EF7
+   DE > 1EF9
+   EC > 00FD
+   F2 > 1EF5
+   .
+7A > 007A /
+   N 2
+   EC > 017A
+   F2 > 1E93
+   .
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 20AC
+81 > 0081
+82 > 201A
+83 > 0192
+84 > 201E
+85 > 2026
+86 > 2020
+87 > 2021
+88 > 02C6
+89 > 2030
+8A > 008A
+8B > 2039
+8C > 0152
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 2018
+92 > 2019
+93 > 201C
+94 > 201D
+95 > 2022
+96 > 2013
+97 > 2014
+98 > 02DC
+99 > 2122
+9A > 009A
+9B > 203A
+9C > 0153
+9D > 009D
+9E > 009E
+9F > 0178
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8 /
+   N 2
+   CC > 1FED
+   EC > 0385
+   .
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2 /
+   N 4
+   CC > 1EA6
+   D2 > 1EA8
+   DE > 1EAA
+   EC > 1EA4
+   .
+C3 > 0102 /
+   N 4
+   CC > 1EB0
+   D2 > 1EB2
+   DE > 1EB4
+   EC > 1EAE
+   .
+C4 > 00C4
+C5 > 00C5 /
+   N 1
+   EC > 01FA
+   .
+C6 > 00C6 /
+   N 1
+   EC > 01FC
+   .
+C7 > 00C7 /
+   N 1
+   EC > 1E08
+   .
+C8 > 00C8
+C9 > 00C9
+CA > 00CA /
+   N 4
+   CC > 1EC0
+   D2 > 1EC2
+   DE > 1EC4
+   EC > 1EBE
+   .
+CB > 00CB
+CC > 0300
+CD > 00CD
+CE > 00CE
+CF > 00CF /
+   N 1
+   EC > 1E2E
+   .
+D0 > 0110
+D1 > 00D1
+D2 > 0309
+D3 > 00D3
+D4 > 00D4 /
+   N 4
+   CC > 1ED2
+   D2 > 1ED4
+   DE > 1ED6
+   EC > 1ED0
+   .
+D5 > 01A0 /
+   N 5
+   CC > 1EDC
+   D2 > 1EDE
+   DE > 1EE0
+   EC > 1EDA
+   F2 > 1EE2
+   .
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8 /
+   N 1
+   EC > 01FE
+   .
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC /
+   N 2
+   CC > 01DB
+   EC > 01D7
+   .
+DD > 01AF /
+   N 5
+   CC > 1EEA
+   D2 > 1EEC
+   DE > 1EEE
+   EC > 1EE8
+   F2 > 1EF0
+   .
+DE > 0303
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2 /
+   N 4
+   CC > 1EA7
+   D2 > 1EA9
+   DE > 1EAB
+   EC > 1EA5
+   .
+E3 > 0103 /
+   N 4
+   CC > 1EB1
+   D2 > 1EB3
+   DE > 1EB5
+   EC > 1EAF
+   .
+E4 > 00E4
+E5 > 00E5 /
+   N 1
+   EC > 01FB
+   .
+E6 > 00E6 /
+   N 1
+   EC > 01FD
+   .
+E7 > 00E7 /
+   N 1
+   EC > 1E09
+   .
+E8 > 00E8
+E9 > 00E9
+EA > 00EA /
+   N 4
+   CC > 1EC1
+   D2 > 1EC3
+   DE > 1EC5
+   EC > 1EBF
+   .
+EB > 00EB
+EC > 0301
+ED > 00ED
+EE > 00EE
+EF > 00EF /
+   N 1
+   EC > 1E2F
+   .
+F0 > 0111
+F1 > 00F1
+F2 > 0323
+F3 > 00F3
+F4 > 00F4 /
+   N 4
+   CC > 1ED3
+   D2 > 1ED5
+   DE > 1ED7
+   EC > 1ED1
+   .
+F5 > 01A1 /
+   N 5
+   CC > 1EDD
+   D2 > 1EDF
+   DE > 1EE1
+   EC > 1EDB
+   F2 > 1EE3
+   .
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8 /
+   N 1
+   EC > 01FF
+   .
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC /
+   N 2
+   CC > 01DC
+   EC > 01D8
+   .
+FD > 01B0 /
+   N 5
+   CC > 1EEB
+   D2 > 1EED
+   DE > 1EEF
+   EC > 1EE9
+   F2 > 1EF1
+   .
+FE > 20AB
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/cp1258.cset b/data/cp1258.cset
new file mode 100644 (file)
index 0000000..cb93de8
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= cp1258
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 20AC - Y 80 80 80 00 00 00 # EURO SIGN
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK
+83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK
+84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS
+86 2020 - Y 86 86 86 00 00 00 # DAGGER
+87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER
+88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT
+89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK
+92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK
+93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK
+94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 2013 - Y 96 96 96 00 00 00 # EN DASH
+97 2014 - Y 97 97 97 00 00 00 # EM DASH
+98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE
+99 2122 . N 99 99 99 00 00 00 # <unused special>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 0300 M M CC CC CC 00 00 00 # COMBINING GRAVE ACCENT
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 0309 M M D2 D2 D2 00 00 00 # COMBINING HOOK ABOVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 01A0 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH HORN
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 01AF L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH HORN
+DE 0303 M M DE DE DE 00 00 00 # COMBINING TILDE
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 0301 M M EC EC EC 00 00 00 # COMBINING ACUTE ACCENT
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 0323 M M F2 F2 F2 00 00 00 # COMBINING DOT BELOW
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 01A1 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH HORN
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 01B0 L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH HORN
+FE 20AB - Y FE FE FE 00 00 00 # DONG SIGN
+FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/dvorak.kbd b/data/dvorak.kbd
new file mode 100644 (file)
index 0000000..c2707d0
--- /dev/null
@@ -0,0 +1,25 @@
+# Dvorak keyboard data file
+
+py
+yf
+fg
+gc
+cr
+rl
+ao
+oe
+eu
+ui
+id
+dh
+ht
+tn
+ns
+qj
+jk
+kx
+xb
+bm
+mw
+wv
+vz
diff --git a/data/iso-8859-1.cmap b/data/iso-8859-1.cmap
new file mode 100644 (file)
index 0000000..ed87552
--- /dev/null
@@ -0,0 +1,1922 @@
+INTERNAL
+/
+N 957
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 00D0
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0059 0301
+DE > 00DE
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 00F0
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0079 0301
+FE > 00FE
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 00D0
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 00DD
+DE > 00DE
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 00F0
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 00FD
+FE > 00FE
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-1.cset b/data/iso-8859-1.cset
new file mode 100644 (file)
index 0000000..6526987
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-1
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN
+FF 00FF L Y FF FF FF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/iso-8859-10.cmap b/data/iso-8859-10.cmap
new file mode 100644 (file)
index 0000000..b3e2364
--- /dev/null
@@ -0,0 +1,1971 @@
+INTERNAL
+/
+N 925
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 7
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0304 > C0
+     0308 > C4
+     030A > C5
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0301 > C9
+     0304 > A2
+     0307 > CC
+     0308 > CB
+     0328 > CA
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > A3
+     .
+0048 > 48
+0049 > 49 /
+     N 6
+     0301 > CD
+     0302 > CE
+     0303 > A5
+     0304 > A4
+     0308 > CF
+     0328 > C7
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > A6
+     .
+004C > 4C /
+     N 1
+     0327 > A8
+     .
+004D > 4D
+004E > 4E /
+     N 1
+     0327 > D1
+     .
+004F > 4F /
+     N 5
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0304 > D2
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > AA
+     .
+0054 > 54
+0055 > 55 /
+     N 6
+     0301 > DA
+     0302 > DB
+     0303 > D7
+     0304 > AE
+     0308 > DC
+     0328 > D9
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 1
+     030C > AC
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 7
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0304 > E0
+     0308 > E4
+     030A > E5
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0301 > E9
+     0304 > B2
+     0307 > EC
+     0308 > EB
+     0328 > EA
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > B3
+     .
+0068 > 68
+0069 > 69 /
+     N 6
+     0301 > ED
+     0302 > EE
+     0303 > B5
+     0304 > B4
+     0308 > EF
+     0328 > E7
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > B6
+     .
+006C > 6C /
+     N 1
+     0327 > B8
+     .
+006D > 6D
+006E > 6E /
+     N 1
+     0327 > F1
+     .
+006F > 6F /
+     N 5
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0304 > F2
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > BA
+     .
+0074 > 74
+0075 > 75 /
+     N 6
+     0301 > FA
+     0302 > FB
+     0303 > F7
+     0304 > BE
+     0308 > FC
+     0328 > F9
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 1
+     030C > BC
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > A7
+00AD > AD
+00B0 > B0
+00B7 > B7
+00C0 > 41 # unsup: 0041 0300
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > CB
+00CC > 49 # unsup: 0049 0300
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D8 > D8
+00D9 > 55 # unsup: 0055 0300
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > EB
+00EC > 69 # unsup: 0069 0300
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F8 > F8
+00F9 > 75 # unsup: 0075 0300
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > 79 # unsup: 0079 0308
+0100 > C0
+0101 > E0
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > A1
+0105 > B1
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0110 > A9
+0111 > B9
+0112 > A2
+0113 > B2
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > CC
+0117 > EC
+0118 > CA
+0119 > EA
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > A3
+0123 > B3
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > A5
+0129 > B5
+012A > A4
+012B > B4
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > C7
+012F > E7
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > A6
+0137 > B6
+0138 > FF
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > A8
+013C > B8
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > D1
+0146 > F1
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014A > AF
+014B > BF
+014C > D2
+014D > F2
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > AA
+0161 > BA
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0166 > AB
+0167 > BB
+0168 > D7
+0169 > F7
+016A > AE
+016B > BE
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > D9
+0173 > F9
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > AC
+017E > BC
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 AC # compat
+01C5 > 44 BC # compat
+01C6 > 64 BC # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > A2 # unsup: 0112 0300
+1E15 > B2 # unsup: 0113 0300
+1E16 > A2 # unsup: 0112 0301
+1E17 > B2 # unsup: 0113 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > D2 # unsup: 014C 0300
+1E51 > F2 # unsup: 014D 0300
+1E52 > D2 # unsup: 014C 0301
+1E53 > F2 # unsup: 014D 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > AA # unsup: 0160 0307
+1E67 > BA # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > D7 # unsup: 0168 0301
+1E79 > F7 # unsup: 0169 0301
+1E7A > AE # unsup: 016A 0308
+1E7B > BE # unsup: 016B 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2015 > BD
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 7
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0304 > C0
+     0308 > C4
+     030A > C5
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0301 > C9
+     0304 > A2
+     0307 > CC
+     0308 > CB
+     0328 > CA
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > A3
+     .
+0048 > 48
+0049 > 49 /
+     N 6
+     0301 > CD
+     0302 > CE
+     0303 > A5
+     0304 > A4
+     0308 > CF
+     0328 > C7
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > A6
+     .
+004C > 4C /
+     N 1
+     0327 > A8
+     .
+004D > 4D
+004E > 4E /
+     N 1
+     0327 > D1
+     .
+004F > 4F /
+     N 5
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0304 > D2
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > AA
+     .
+0054 > 54
+0055 > 55 /
+     N 6
+     0301 > DA
+     0302 > DB
+     0303 > D7
+     0304 > AE
+     0308 > DC
+     0328 > D9
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 1
+     030C > AC
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 7
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0304 > E0
+     0308 > E4
+     030A > E5
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0301 > E9
+     0304 > B2
+     0307 > EC
+     0308 > EB
+     0328 > EA
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > B3
+     .
+0068 > 68
+0069 > 69 /
+     N 6
+     0301 > ED
+     0302 > EE
+     0303 > B5
+     0304 > B4
+     0308 > EF
+     0328 > E7
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > B6
+     .
+006C > 6C /
+     N 1
+     0327 > B8
+     .
+006D > 6D
+006E > 6E /
+     N 1
+     0327 > F1
+     .
+006F > 6F /
+     N 5
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0304 > F2
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > BA
+     .
+0074 > 74
+0075 > 75 /
+     N 6
+     0301 > FA
+     0302 > FB
+     0303 > F7
+     0304 > BE
+     0308 > FC
+     0328 > F9
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 1
+     030C > BC
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > A7
+00AD > AD
+00B0 > B0
+00B7 > B7
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C9 > C9
+00CB > CB
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D8 > D8
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E9 > E9
+00EB > EB
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F8 > F8
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+0100 > C0
+0101 > E0
+0104 > A1
+0105 > B1
+010C > C8
+010D > E8
+0110 > A9
+0111 > B9
+0112 > A2
+0113 > B2
+0116 > CC
+0117 > EC
+0118 > CA
+0119 > EA
+0122 > A3
+0123 > B3
+0128 > A5
+0129 > B5
+012A > A4
+012B > B4
+012E > C7
+012F > E7
+0136 > A6
+0137 > B6
+0138 > FF
+013B > A8
+013C > B8
+0145 > D1
+0146 > F1
+014A > AF
+014B > BF
+014C > D2
+014D > F2
+0160 > AA
+0161 > BA
+0166 > AB
+0167 > BB
+0168 > D7
+0169 > F7
+016A > AE
+016B > BE
+0172 > D9
+0173 > F9
+017D > AC
+017E > BC
+037E > 3B
+0387 > B7
+1FEF > 60
+2015 > BD
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0041 0328
+A2 > 0045 0304
+A3 > 0047 0327
+A4 > 0049 0304
+A5 > 0049 0303
+A6 > 004B 0327
+A7 > 00A7
+A8 > 004C 0327
+A9 > 0110
+AA > 0053 030C
+AB > 0166
+AC > 005A 030C
+AD > 00AD
+AE > 0055 0304
+AF > 014A
+B0 > 00B0
+B1 > 0061 0328
+B2 > 0065 0304
+B3 > 0067 0327
+B4 > 0069 0304
+B5 > 0069 0303
+B6 > 006B 0327
+B7 > 00B7
+B8 > 006C 0327
+B9 > 0111
+BA > 0073 030C
+BB > 0167
+BC > 007A 030C
+BD > 2015
+BE > 0075 0304
+BF > 014B
+C0 > 0041 0304
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0049 0328
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 0045 0328
+CB > 0045 0308
+CC > 0045 0307
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 00D0
+D1 > 004E 0327
+D2 > 004F 0304
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 0055 0303
+D8 > 00D8
+D9 > 0055 0328
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0059 0301
+DE > 00DE
+DF > 00DF
+E0 > 0061 0304
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0069 0328
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 0065 0328
+EB > 0065 0308
+EC > 0065 0307
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 00F0
+F1 > 006E 0327
+F2 > 006F 0304
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 0075 0303
+F8 > 00F8
+F9 > 0075 0328
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0079 0301
+FE > 00FE
+FF > 0138
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0104
+A2 > 0112
+A3 > 0122
+A4 > 012A
+A5 > 0128
+A6 > 0136
+A7 > 00A7
+A8 > 013B
+A9 > 0110
+AA > 0160
+AB > 0166
+AC > 017D
+AD > 00AD
+AE > 016A
+AF > 014A
+B0 > 00B0
+B1 > 0105
+B2 > 0113
+B3 > 0123
+B4 > 012B
+B5 > 0129
+B6 > 0137
+B7 > 00B7
+B8 > 013C
+B9 > 0111
+BA > 0161
+BB > 0167
+BC > 017E
+BD > 2015
+BE > 016B
+BF > 014B
+C0 > 0100
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 012E
+C8 > 010C
+C9 > 00C9
+CA > 0118
+CB > 00CB
+CC > 0116
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 00D0
+D1 > 0145
+D2 > 014C
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 0168
+D8 > 00D8
+D9 > 0172
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 00DD
+DE > 00DE
+DF > 00DF
+E0 > 0101
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 012F
+E8 > 010D
+E9 > 00E9
+EA > 0119
+EB > 00EB
+EC > 0117
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 00F0
+F1 > 0146
+F2 > 014D
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 0169
+F8 > 00F8
+F9 > 0173
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 00FD
+FE > 00FE
+FF > 0138
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-10.cset b/data/iso-8859-10.cset
new file mode 100644 (file)
index 0000000..20bebb8
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-10
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+A2 0112 L Y A2 B2 A2 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON
+A3 0122 L Y A3 B3 A3 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA
+A4 012A L Y A4 B4 A4 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON
+A5 0128 L Y A5 B5 A5 49 2A 00 # LATIN CAPITAL LETTER I WITH TILDE
+A6 0136 L Y A6 B6 A6 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 013B L Y A8 B8 A8 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA
+A9 0110 L Y A9 B9 A9 A9 B9 B9 # LATIN CAPITAL LETTER D WITH STROKE
+AA 0160 L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+AB 0166 L Y AB BB AB AB BB BB # LATIN CAPITAL LETTER T WITH STROKE
+AC 017D L Y AC BC AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 016A L Y AE BE AE 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON
+AF 014A L Y AF BF AF AF BF BF # LATIN CAPITAL LETTER ENG
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+B2 0113 L Y A2 B2 A2 65 2A 00 # LATIN SMALL LETTER E WITH MACRON
+B3 0123 L Y A3 B3 A3 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA
+B4 012B L Y A4 B4 A4 69 2A 00 # LATIN SMALL LETTER I WITH MACRON
+B5 0129 L Y A5 B5 A5 69 2A 00 # LATIN SMALL LETTER I WITH TILDE
+B6 0137 L Y A6 B6 A6 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 013C L Y A8 B8 A8 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA
+B9 0111 L Y A9 B9 A9 B9 B9 B9 # LATIN SMALL LETTER D WITH STROKE
+BA 0161 L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CARON
+BB 0167 L Y AB BB AB BB BB BB # LATIN SMALL LETTER T WITH STROKE
+BC 017E L Y AC BC AC 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+BD 2015 - Y BD BD BD 00 00 00 # HORIZONTAL BAR
+BE 016B L Y AE BE AE 75 2A 00 # LATIN SMALL LETTER U WITH MACRON
+BF 014B L Y AF BF AF BF BF BF # LATIN SMALL LETTER ENG
+C0 0100 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 012E L Y C7 E7 C7 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 0116 L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH
+D1 0145 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA
+D2 014C L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 0168 L Y D7 F7 D7 55 2A 00 # LATIN CAPITAL LETTER U WITH TILDE
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 0172 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0101 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH MACRON
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 012F L Y C7 E7 C7 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 0117 L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH
+F1 0146 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA
+F2 014D L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 0169 L Y D7 F7 D7 75 2A 00 # LATIN SMALL LETTER U WITH TILDE
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 0173 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN
+FF 0138 L Y FF FF FF FF FF FF # LATIN SMALL LETTER KRA
diff --git a/data/iso-8859-11.cmap b/data/iso-8859-11.cmap
new file mode 100644 (file)
index 0000000..5a14b8d
--- /dev/null
@@ -0,0 +1,1508 @@
+INTERNAL
+/
+N 988
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0E01 > A1
+0E02 > A2
+0E03 > A3
+0E04 > A4
+0E05 > A5
+0E06 > A6
+0E07 > A7
+0E08 > A8
+0E09 > A9
+0E0A > AA
+0E0B > AB
+0E0C > AC
+0E0D > AD
+0E0E > AE
+0E0F > AF
+0E10 > B0
+0E11 > B1
+0E12 > B2
+0E13 > B3
+0E14 > B4
+0E15 > B5
+0E16 > B6
+0E17 > B7
+0E18 > B8
+0E19 > B9
+0E1A > BA
+0E1B > BB
+0E1C > BC
+0E1D > BD
+0E1E > BE
+0E1F > BF
+0E20 > C0
+0E21 > C1
+0E22 > C2
+0E23 > C3
+0E24 > C4
+0E25 > C5
+0E26 > C6
+0E27 > C7
+0E28 > C8
+0E29 > C9
+0E2A > CA
+0E2B > CB
+0E2C > CC
+0E2D > CD
+0E2E > CE
+0E2F > CF
+0E30 > D0
+0E31 > D1
+0E32 > D2
+0E33 > D3
+0E34 > D4
+0E35 > D5
+0E36 > D6
+0E37 > D7
+0E38 > D8
+0E39 > D9
+0E3A > DA
+0E3F > DF
+0E40 > E0
+0E41 > E1
+0E42 > E2
+0E43 > E3
+0E44 > E4
+0E45 > E5
+0E46 > E6
+0E47 > E7
+0E48 > E8
+0E49 > E9
+0E4A > EA
+0E4B > EB
+0E4C > EC
+0E4D > ED
+0E4E > EE
+0E4F > EF
+0E50 > F0
+0E51 > F1
+0E52 > F2
+0E53 > F3
+0E54 > F4
+0E55 > F5
+0E56 > F6
+0E57 > F7
+0E58 > F8
+0E59 > F9
+0E5A > FA
+0E5B > FB
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 250
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+037E > 3B
+0E01 > A1
+0E02 > A2
+0E03 > A3
+0E04 > A4
+0E05 > A5
+0E06 > A6
+0E07 > A7
+0E08 > A8
+0E09 > A9
+0E0A > AA
+0E0B > AB
+0E0C > AC
+0E0D > AD
+0E0E > AE
+0E0F > AF
+0E10 > B0
+0E11 > B1
+0E12 > B2
+0E13 > B3
+0E14 > B4
+0E15 > B5
+0E16 > B6
+0E17 > B7
+0E18 > B8
+0E19 > B9
+0E1A > BA
+0E1B > BB
+0E1C > BC
+0E1D > BD
+0E1E > BE
+0E1F > BF
+0E20 > C0
+0E21 > C1
+0E22 > C2
+0E23 > C3
+0E24 > C4
+0E25 > C5
+0E26 > C6
+0E27 > C7
+0E28 > C8
+0E29 > C9
+0E2A > CA
+0E2B > CB
+0E2C > CC
+0E2D > CD
+0E2E > CE
+0E2F > CF
+0E30 > D0
+0E31 > D1
+0E32 > D2
+0E33 > D3
+0E34 > D4
+0E35 > D5
+0E36 > D6
+0E37 > D7
+0E38 > D8
+0E39 > D9
+0E3A > DA
+0E3F > DF
+0E40 > E0
+0E41 > E1
+0E42 > E2
+0E43 > E3
+0E44 > E4
+0E45 > E5
+0E46 > E6
+0E47 > E7
+0E48 > E8
+0E49 > E9
+0E4A > EA
+0E4B > EB
+0E4C > EC
+0E4D > ED
+0E4E > EE
+0E4F > EF
+0E50 > F0
+0E51 > F1
+0E52 > F2
+0E53 > F3
+0E54 > F4
+0E55 > F5
+0E56 > F6
+0E57 > F7
+0E58 > F8
+0E59 > F9
+0E5A > FA
+0E5B > FB
+1FEF > 60
+.
+
+NFD
+/
+N 248
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0E01
+A2 > 0E02
+A3 > 0E03
+A4 > 0E04
+A5 > 0E05
+A6 > 0E06
+A7 > 0E07
+A8 > 0E08
+A9 > 0E09
+AA > 0E0A
+AB > 0E0B
+AC > 0E0C
+AD > 0E0D
+AE > 0E0E
+AF > 0E0F
+B0 > 0E10
+B1 > 0E11
+B2 > 0E12
+B3 > 0E13
+B4 > 0E14
+B5 > 0E15
+B6 > 0E16
+B7 > 0E17
+B8 > 0E18
+B9 > 0E19
+BA > 0E1A
+BB > 0E1B
+BC > 0E1C
+BD > 0E1D
+BE > 0E1E
+BF > 0E1F
+C0 > 0E20
+C1 > 0E21
+C2 > 0E22
+C3 > 0E23
+C4 > 0E24
+C5 > 0E25
+C6 > 0E26
+C7 > 0E27
+C8 > 0E28
+C9 > 0E29
+CA > 0E2A
+CB > 0E2B
+CC > 0E2C
+CD > 0E2D
+CE > 0E2E
+CF > 0E2F
+D0 > 0E30
+D1 > 0E31
+D2 > 0E32
+D3 > 0E33
+D4 > 0E34
+D5 > 0E35
+D6 > 0E36
+D7 > 0E37
+D8 > 0E38
+D9 > 0E39
+DA > 0E3A
+DF > 0E3F
+E0 > 0E40
+E1 > 0E41
+E2 > 0E42
+E3 > 0E43
+E4 > 0E44
+E5 > 0E45
+E6 > 0E46
+E7 > 0E47
+E8 > 0E48
+E9 > 0E49
+EA > 0E4A
+EB > 0E4B
+EC > 0E4C
+ED > 0E4D
+EE > 0E4E
+EF > 0E4F
+F0 > 0E50
+F1 > 0E51
+F2 > 0E52
+F3 > 0E53
+F4 > 0E54
+F5 > 0E55
+F6 > 0E56
+F7 > 0E57
+F8 > 0E58
+F9 > 0E59
+FA > 0E5A
+FB > 0E5B
+.
+
+NFC
+= NFD
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-11.cset b/data/iso-8859-11.cset
new file mode 100644 (file)
index 0000000..75a2702
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-11
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0E01 l Y A1 A1 A1 A1 A1 A1 # THAI CHARACTER KO KAI
+A2 0E02 l Y A2 A2 A2 A2 A2 A2 # THAI CHARACTER KHO KHAI
+A3 0E03 l Y A3 A3 A3 A3 A3 A3 # THAI CHARACTER KHO KHUAT
+A4 0E04 l Y A4 A4 A4 A4 A4 A4 # THAI CHARACTER KHO KHWAI
+A5 0E05 l Y A5 A5 A5 A5 A5 A5 # THAI CHARACTER KHO KHON
+A6 0E06 l Y A6 A6 A6 A6 A6 A6 # THAI CHARACTER KHO RAKHANG
+A7 0E07 l Y A7 A7 A7 A7 A7 A7 # THAI CHARACTER NGO NGU
+A8 0E08 l Y A8 A8 A8 A8 A8 A8 # THAI CHARACTER CHO CHAN
+A9 0E09 l Y A9 A9 A9 A9 A9 A9 # THAI CHARACTER CHO CHING
+AA 0E0A l Y AA AA AA AA AA AA # THAI CHARACTER CHO CHANG
+AB 0E0B l Y AB AB AB AB AB AB # THAI CHARACTER SO SO
+AC 0E0C l Y AC AC AC AC AC AC # THAI CHARACTER CHO CHOE
+AD 0E0D l Y AD AD AD AD AD AD # THAI CHARACTER YO YING
+AE 0E0E l Y AE AE AE AE AE AE # THAI CHARACTER DO CHADA
+AF 0E0F l Y AF AF AF AF AF AF # THAI CHARACTER TO PATAK
+B0 0E10 l Y B0 B0 B0 B0 B0 B0 # THAI CHARACTER THO THAN
+B1 0E11 l Y B1 B1 B1 B1 B1 B1 # THAI CHARACTER THO NANGMONTHO
+B2 0E12 l Y B2 B2 B2 B2 B2 B2 # THAI CHARACTER THO PHUTHAO
+B3 0E13 l Y B3 B3 B3 B3 B3 B3 # THAI CHARACTER NO NEN
+B4 0E14 l Y B4 B4 B4 B4 B4 B4 # THAI CHARACTER DO DEK
+B5 0E15 l Y B5 B5 B5 B5 B5 B5 # THAI CHARACTER TO TAO
+B6 0E16 l Y B6 B6 B6 B6 B6 B6 # THAI CHARACTER THO THUNG
+B7 0E17 l Y B7 B7 B7 B7 B7 B7 # THAI CHARACTER THO THAHAN
+B8 0E18 l Y B8 B8 B8 B8 B8 B8 # THAI CHARACTER THO THONG
+B9 0E19 l Y B9 B9 B9 B9 B9 B9 # THAI CHARACTER NO NU
+BA 0E1A l Y BA BA BA BA BA BA # THAI CHARACTER BO BAIMAI
+BB 0E1B l Y BB BB BB BB BB BB # THAI CHARACTER PO PLA
+BC 0E1C l Y BC BC BC BC BC BC # THAI CHARACTER PHO PHUNG
+BD 0E1D l Y BD BD BD BD BD BD # THAI CHARACTER FO FA
+BE 0E1E l Y BE BE BE BE BE BE # THAI CHARACTER PHO PHAN
+BF 0E1F l Y BF BF BF BF BF BF # THAI CHARACTER FO FAN
+C0 0E20 l Y C0 C0 C0 C0 C0 C0 # THAI CHARACTER PHO SAMPHAO
+C1 0E21 l Y C1 C1 C1 C1 C1 C1 # THAI CHARACTER MO MA
+C2 0E22 l Y C2 C2 C2 C2 C2 C2 # THAI CHARACTER YO YAK
+C3 0E23 l Y C3 C3 C3 C3 C3 C3 # THAI CHARACTER RO RUA
+C4 0E24 l Y C4 C4 C4 C4 C4 C4 # THAI CHARACTER RU
+C5 0E25 l Y C5 C5 C5 C5 C5 C5 # THAI CHARACTER LO LING
+C6 0E26 l Y C6 C6 C6 C6 C6 C6 # THAI CHARACTER LU
+C7 0E27 l Y C7 C7 C7 C7 C7 C7 # THAI CHARACTER WO WAEN
+C8 0E28 l Y C8 C8 C8 C8 C8 C8 # THAI CHARACTER SO SALA
+C9 0E29 l Y C9 C9 C9 C9 C9 C9 # THAI CHARACTER SO RUSI
+CA 0E2A l Y CA CA CA CA CA CA # THAI CHARACTER SO SUA
+CB 0E2B l Y CB CB CB CB CB CB # THAI CHARACTER HO HIP
+CC 0E2C l Y CC CC CC CC CC CC # THAI CHARACTER LO CHULA
+CD 0E2D l Y CD CD CD CD CD CD # THAI CHARACTER O ANG
+CE 0E2E l Y CE CE CE CE CE CE # THAI CHARACTER HO NOKHUK
+CF 0E2F l Y CF CF CF CF CF CF # THAI CHARACTER PAIYANNOI
+D0 0E30 l Y D0 D0 D0 D0 D0 D0 # THAI CHARACTER SARA A
+D1 0E31 l M D1 D1 D1 D1 D1 D1 # THAI CHARACTER MAI HAN-AKAT
+D2 0E32 l Y D2 D2 D2 D2 D2 D2 # THAI CHARACTER SARA AA
+D3 0E33 l Y D3 D3 D3 D2 D2 D2 # THAI CHARACTER SARA AM
+D4 0E34 l M D4 D4 D4 D4 D4 D4 # THAI CHARACTER SARA I
+D5 0E35 l M D5 D5 D5 D5 D5 D5 # THAI CHARACTER SARA II
+D6 0E36 l M D6 D6 D6 D6 D6 D6 # THAI CHARACTER SARA UE
+D7 0E37 l M D7 D7 D7 D7 D7 D7 # THAI CHARACTER SARA UEE
+D8 0E38 l M D8 D8 D8 D8 D8 D8 # THAI CHARACTER SARA U
+D9 0E39 l M D9 D9 D9 D9 D9 D9 # THAI CHARACTER SARA UU
+DA 0E3A l M DA DA DA DA DA DA # THAI CHARACTER PHINTHU
+DB E0DB . N DB DB DB 00 00 00 # <unused>
+DC E0DC . N DC DC DC 00 00 00 # <unused>
+DD E0DD . N DD DD DD 00 00 00 # <unused>
+DE E0DE . N DE DE DE 00 00 00 # <unused>
+DF 0E3F - Y DF DF DF 00 00 00 # THAI CURRENCY SYMBOL BAHT
+E0 0E40 l Y E0 E0 E0 E0 E0 E0 # THAI CHARACTER SARA E
+E1 0E41 l Y E1 E1 E1 E1 E1 E1 # THAI CHARACTER SARA AE
+E2 0E42 l Y E2 E2 E2 E2 E2 E2 # THAI CHARACTER SARA O
+E3 0E43 l Y E3 E3 E3 E3 E3 E3 # THAI CHARACTER SARA AI MAIMUAN
+E4 0E44 l Y E4 E4 E4 E4 E4 E4 # THAI CHARACTER SARA AI MAIMALAI
+E5 0E45 l Y E5 E5 E5 E5 E5 E5 # THAI CHARACTER LAKKHANGYAO
+E6 0E46 l Y E6 E6 E6 E6 E6 E6 # THAI CHARACTER MAIYAMOK
+E7 0E47 M M E7 E7 E7 00 00 00 # THAI CHARACTER MAITAIKHU
+E8 0E48 M M E8 E8 E8 00 00 00 # THAI CHARACTER MAI EK
+E9 0E49 M M E9 E9 E9 00 00 00 # THAI CHARACTER MAI THO
+EA 0E4A M M EA EA EA 00 00 00 # THAI CHARACTER MAI TRI
+EB 0E4B M M EB EB EB 00 00 00 # THAI CHARACTER MAI CHATTAWA
+EC 0E4C M M EC EC EC 00 00 00 # THAI CHARACTER THANTHAKHAT
+ED 0E4D l M ED ED ED ED ED ED # THAI CHARACTER NIKHAHIT
+EE 0E4E M M EE EE EE 00 00 00 # THAI CHARACTER YAMAKKAN
+EF 0E4F - Y EF EF EF 00 00 00 # THAI CHARACTER FONGMAN
+F0 0E50 D Y F0 F0 F0 00 00 00 # THAI DIGIT ZERO
+F1 0E51 D Y F1 F1 F1 00 00 00 # THAI DIGIT ONE
+F2 0E52 D Y F2 F2 F2 00 00 00 # THAI DIGIT TWO
+F3 0E53 D Y F3 F3 F3 00 00 00 # THAI DIGIT THREE
+F4 0E54 D Y F4 F4 F4 00 00 00 # THAI DIGIT FOUR
+F5 0E55 D Y F5 F5 F5 00 00 00 # THAI DIGIT FIVE
+F6 0E56 D Y F6 F6 F6 00 00 00 # THAI DIGIT SIX
+F7 0E57 D Y F7 F7 F7 00 00 00 # THAI DIGIT SEVEN
+F8 0E58 D Y F8 F8 F8 00 00 00 # THAI DIGIT EIGHT
+F9 0E59 D Y F9 F9 F9 00 00 00 # THAI DIGIT NINE
+FA 0E5A - Y FA FA FA 00 00 00 # THAI CHARACTER ANGKHANKHU
+FB 0E5B - Y FB FB FB 00 00 00 # THAI CHARACTER KHOMUT
+FC E0FC . N FC FC FC 00 00 00 # <unused>
+FD E0FD . N FD FD FD 00 00 00 # <unused>
+FE E0FE . N FE FE FE 00 00 00 # <unused>
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/iso-8859-13.cmap b/data/iso-8859-13.cmap
new file mode 100644 (file)
index 0000000..66e01d4
--- /dev/null
@@ -0,0 +1,1961 @@
+INTERNAL
+/
+N 943
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0304 > C2
+     0308 > C4
+     030A > C5
+     0328 > C0
+     .
+0042 > 42
+0043 > 43 /
+     N 2
+     0301 > C3
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0301 > C9
+     0304 > C7
+     0307 > CB
+     0328 > C6
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > CC
+     .
+0048 > 48
+0049 > 49 /
+     N 2
+     0304 > CE
+     0328 > C1
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > CD
+     .
+004C > 4C /
+     N 1
+     0327 > CF
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     0327 > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0303 > D5
+     0304 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > AA
+     .
+0053 > 53 /
+     N 2
+     0301 > DA
+     030C > D0
+     .
+0054 > 54
+0055 > 55 /
+     N 3
+     0304 > DB
+     0308 > DC
+     0328 > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 3
+     0301 > CA
+     0307 > DD
+     030C > DE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0304 > E2
+     0308 > E4
+     030A > E5
+     0328 > E0
+     .
+0062 > 62
+0063 > 63 /
+     N 2
+     0301 > E3
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0301 > E9
+     0304 > E7
+     0307 > EB
+     0328 > E6
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > EC
+     .
+0068 > 68
+0069 > 69 /
+     N 2
+     0304 > EE
+     0328 > E1
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > ED
+     .
+006C > 6C /
+     N 1
+     0327 > EF
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     0327 > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0303 > F5
+     0304 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > BA
+     .
+0073 > 73 /
+     N 2
+     0301 > FA
+     030C > F0
+     .
+0074 > 74
+0075 > 75 /
+     N 3
+     0304 > FB
+     0308 > FC
+     0328 > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 3
+     0301 > EA
+     0307 > FD
+     030C > FE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > C5
+00C6 > AF
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > D3
+00D4 > 4F # unsup: 004F 0302
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > A8
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > E5
+00E6 > BF
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > F3
+00F4 > 6F # unsup: 006F 0302
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > B8
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > C2
+0101 > E2
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > C0
+0105 > E0
+0106 > C3
+0107 > E3
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > C7
+0113 > E7
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > CB
+0117 > EB
+0118 > C6
+0119 > E6
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > CC
+0123 > EC
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > CE
+012B > EE
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > C1
+012F > E1
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > CD
+0137 > ED
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > CF
+013C > EF
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0141 > D9
+0142 > F9
+0143 > D1
+0144 > F1
+0145 > D2
+0146 > F2
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > D4
+014D > F4
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > AA
+0157 > BA
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > DA
+015B > FA
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > D0
+0161 > F0
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > DB
+016B > FB
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > D8
+0173 > F8
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > CA
+017A > EA
+017B > DD
+017C > FD
+017D > DE
+017E > FE
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 DE # compat
+01C5 > 44 FE # compat
+01C6 > 64 FE # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > AF # unsup: 00C6 0304
+01E3 > BF # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > AF # unsup: 00C6 0301
+01FD > BF # unsup: 00E6 0301
+01FE > A8 # unsup: 00D8 0301
+01FF > B8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > C7 # unsup: 0112 0300
+1E15 > E7 # unsup: 0113 0300
+1E16 > C7 # unsup: 0112 0301
+1E17 > E7 # unsup: 0113 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > D4 # unsup: 014C 0300
+1E51 > F4 # unsup: 014D 0300
+1E52 > D4 # unsup: 014C 0301
+1E53 > F4 # unsup: 014D 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > DA # unsup: 015A 0307
+1E65 > FA # unsup: 015B 0307
+1E66 > D0 # unsup: 0160 0307
+1E67 > F0 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > DB # unsup: 016A 0308
+1E7B > FB # unsup: 016B 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2019 > FF
+201C > B4
+201D > A1
+201E > A5
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE4 > A6 # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0304 > C2
+     0308 > C4
+     030A > C5
+     0328 > C0
+     .
+0042 > 42
+0043 > 43 /
+     N 2
+     0301 > C3
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0301 > C9
+     0304 > C7
+     0307 > CB
+     0328 > C6
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > CC
+     .
+0048 > 48
+0049 > 49 /
+     N 2
+     0304 > CE
+     0328 > C1
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > CD
+     .
+004C > 4C /
+     N 1
+     0327 > CF
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     0327 > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0303 > D5
+     0304 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > AA
+     .
+0053 > 53 /
+     N 2
+     0301 > DA
+     030C > D0
+     .
+0054 > 54
+0055 > 55 /
+     N 3
+     0304 > DB
+     0308 > DC
+     0328 > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 3
+     0301 > CA
+     0307 > DD
+     030C > DE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0304 > E2
+     0308 > E4
+     030A > E5
+     0328 > E0
+     .
+0062 > 62
+0063 > 63 /
+     N 2
+     0301 > E3
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0301 > E9
+     0304 > E7
+     0307 > EB
+     0328 > E6
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > EC
+     .
+0068 > 68
+0069 > 69 /
+     N 2
+     0304 > EE
+     0328 > E1
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > ED
+     .
+006C > 6C /
+     N 1
+     0327 > EF
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     0327 > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0303 > F5
+     0304 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > BA
+     .
+0073 > 73 /
+     N 2
+     0301 > FA
+     030C > F0
+     .
+0074 > 74
+0075 > 75 /
+     N 3
+     0304 > FB
+     0308 > FC
+     0328 > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 3
+     0301 > EA
+     0307 > FD
+     030C > FE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A6 > A6
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C4 > C4
+00C5 > C5
+00C6 > AF
+00C9 > C9
+00D3 > D3
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > A8
+00DC > DC
+00DF > DF
+00E4 > E4
+00E5 > E5
+00E6 > BF
+00E9 > E9
+00F3 > F3
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > B8
+00FC > FC
+0100 > C2
+0101 > E2
+0104 > C0
+0105 > E0
+0106 > C3
+0107 > E3
+010C > C8
+010D > E8
+0112 > C7
+0113 > E7
+0116 > CB
+0117 > EB
+0118 > C6
+0119 > E6
+0122 > CC
+0123 > EC
+012A > CE
+012B > EE
+012E > C1
+012F > E1
+0136 > CD
+0137 > ED
+013B > CF
+013C > EF
+0141 > D9
+0142 > F9
+0143 > D1
+0144 > F1
+0145 > D2
+0146 > F2
+014C > D4
+014D > F4
+0156 > AA
+0157 > BA
+015A > DA
+015B > FA
+0160 > D0
+0161 > F0
+016A > DB
+016B > FB
+0172 > D8
+0173 > F8
+0179 > CA
+017A > EA
+017B > DD
+017C > FD
+017D > DE
+017E > FE
+037E > 3B
+0387 > B7
+1FEF > 60
+2019 > FF
+201C > B4
+201D > A1
+201E > A5
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 201D
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 201E
+A6 > 00A6
+A7 > 00A7
+A8 > 00D8
+A9 > 00A9
+AA > 0052 0327
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00C6
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 201C
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00F8
+B9 > 00B9
+BA > 0072 0327
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00E6
+C0 > 0041 0328
+C1 > 0049 0328
+C2 > 0041 0304
+C3 > 0043 0301
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 0045 0328
+C7 > 0045 0304
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 005A 0301
+CB > 0045 0307
+CC > 0047 0327
+CD > 004B 0327
+CE > 0049 0304
+CF > 004C 0327
+D0 > 0053 030C
+D1 > 004E 0301
+D2 > 004E 0327
+D3 > 004F 0301
+D4 > 004F 0304
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 0055 0328
+D9 > 0141
+DA > 0053 0301
+DB > 0055 0304
+DC > 0055 0308
+DD > 005A 0307
+DE > 005A 030C
+DF > 00DF
+E0 > 0061 0328
+E1 > 0069 0328
+E2 > 0061 0304
+E3 > 0063 0301
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 0065 0328
+E7 > 0065 0304
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 007A 0301
+EB > 0065 0307
+EC > 0067 0327
+ED > 006B 0327
+EE > 0069 0304
+EF > 006C 0327
+F0 > 0073 030C
+F1 > 006E 0301
+F2 > 006E 0327
+F3 > 006F 0301
+F4 > 006F 0304
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 0075 0328
+F9 > 0142
+FA > 0073 0301
+FB > 0075 0304
+FC > 0075 0308
+FD > 007A 0307
+FE > 007A 030C
+FF > 2019
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 201D
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 201E
+A6 > 00A6
+A7 > 00A7
+A8 > 00D8
+A9 > 00A9
+AA > 0156
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00C6
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 201C
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00F8
+B9 > 00B9
+BA > 0157
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00E6
+C0 > 0104
+C1 > 012E
+C2 > 0100
+C3 > 0106
+C4 > 00C4
+C5 > 00C5
+C6 > 0118
+C7 > 0112
+C8 > 010C
+C9 > 00C9
+CA > 0179
+CB > 0116
+CC > 0122
+CD > 0136
+CE > 012A
+CF > 013B
+D0 > 0160
+D1 > 0143
+D2 > 0145
+D3 > 00D3
+D4 > 014C
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 0172
+D9 > 0141
+DA > 015A
+DB > 016A
+DC > 00DC
+DD > 017B
+DE > 017D
+DF > 00DF
+E0 > 0105
+E1 > 012F
+E2 > 0101
+E3 > 0107
+E4 > 00E4
+E5 > 00E5
+E6 > 0119
+E7 > 0113
+E8 > 010D
+E9 > 00E9
+EA > 017A
+EB > 0117
+EC > 0123
+ED > 0137
+EE > 012B
+EF > 013C
+F0 > 0161
+F1 > 0144
+F2 > 0146
+F3 > 00F3
+F4 > 014D
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 0173
+F9 > 0142
+FA > 015B
+FB > 016B
+FC > 00FC
+FD > 017C
+FE > 017E
+FF > 2019
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-13.cset b/data/iso-8859-13.cset
new file mode 100644 (file)
index 0000000..512cf60
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-13
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 201D - Y A1 A1 A1 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 201E - Y A5 A5 A5 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00D8 L Y A8 B8 A8 A8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 0156 L Y AA BA AA 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00C6 L Y AF BF AF AF 2A 00 # LATIN CAPITAL LETTER AE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 201C - Y B4 B4 B4 00 00 00 # LEFT DOUBLE QUOTATION MARK
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00F8 L Y A8 B8 A8 B8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 0157 L Y AA BA AA 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00E6 L Y AF BF AF BF 2A 00 # LATIN SMALL LETTER AE
+C0 0104 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+C1 012E L Y C1 E1 C1 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK
+C2 0100 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON
+C3 0106 L Y C3 E3 C3 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 0118 L Y C6 E6 C6 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+C7 0112 L Y C7 E7 C7 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0179 L Y CA EA CA 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE
+CB 0116 L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+CC 0122 L Y CC EC CC 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA
+CD 0136 L Y CD ED CD 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA
+CE 012A L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON
+CF 013B L Y CF EF CF 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA
+D0 0160 L Y D0 F0 D0 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE
+D2 0145 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 014C L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 0172 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK
+D9 0141 L Y D9 F9 D9 D9 F9 F9 # LATIN CAPITAL LETTER L WITH STROKE
+DA 015A L Y DA FA DA 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE
+DB 016A L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 017B L Y DD FD DD 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+DE 017D L Y DE FE DE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0105 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+E1 012F L Y C1 E1 C1 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK
+E2 0101 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH MACRON
+E3 0107 L Y C3 E3 C3 63 63 63 # LATIN SMALL LETTER C WITH ACUTE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 0119 L Y C6 E6 C6 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+E7 0113 L Y C7 E7 C7 65 2A 00 # LATIN SMALL LETTER E WITH MACRON
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 017A L Y CA EA CA 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE
+EB 0117 L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE
+EC 0123 L Y CC EC CC 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA
+ED 0137 L Y CD ED CD 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA
+EE 012B L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH MACRON
+EF 013C L Y CF EF CF 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA
+F0 0161 L Y D0 F0 D0 73 73 73 # LATIN SMALL LETTER S WITH CARON
+F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE
+F2 0146 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 014D L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 0173 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK
+F9 0142 L Y D9 F9 D9 F9 F9 F9 # LATIN SMALL LETTER L WITH STROKE
+FA 015B L Y DA FA DA 73 73 73 # LATIN SMALL LETTER S WITH ACUTE
+FB 016B L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH MACRON
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 017C L Y DD FD DD 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+FE 017E L Y DE FE DE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+FF 2019 - Y FF FF FF 00 00 00 # RIGHT SINGLE QUOTATION MARK
diff --git a/data/iso-8859-14.cmap b/data/iso-8859-14.cmap
new file mode 100644 (file)
index 0000000..ef6006c
--- /dev/null
@@ -0,0 +1,2010 @@
+INTERNAL
+/
+N 913
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42 /
+     N 1
+     0307 > A1
+     .
+0043 > 43 /
+     N 2
+     0307 > A4
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     0307 > A6
+     .
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46 /
+     N 1
+     0307 > B0
+     .
+0047 > 47 /
+     N 1
+     0307 > B2
+     .
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D /
+     N 1
+     0307 > B4
+     .
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50 /
+     N 1
+     0307 > B7
+     .
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     0307 > BB
+     .
+0054 > 54 /
+     N 1
+     0307 > D7
+     .
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57 /
+     N 4
+     0300 > A8
+     0301 > AA
+     0302 > D0
+     0308 > BD
+     .
+0058 > 58
+0059 > 59 /
+     N 4
+     0300 > AC
+     0301 > DD
+     0302 > DE
+     0308 > AF
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62 /
+     N 1
+     0307 > A2
+     .
+0063 > 63 /
+     N 2
+     0307 > A5
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     0307 > AB
+     .
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66 /
+     N 1
+     0307 > B1
+     .
+0067 > 67 /
+     N 1
+     0307 > B3
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D /
+     N 1
+     0307 > B5
+     .
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70 /
+     N 1
+     0307 > B9
+     .
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     0307 > BF
+     .
+0074 > 74 /
+     N 1
+     0307 > F7
+     .
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77 /
+     N 4
+     0300 > B8
+     0301 > BA
+     0302 > F0
+     0308 > BE
+     .
+0078 > 78
+0079 > 79 /
+     N 4
+     0300 > BC
+     0301 > FD
+     0302 > FE
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A7 > A7
+00A9 > A9
+00AD > AD
+00AE > AE
+00B6 > B6
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > A4
+010B > A5
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > B2
+0121 > B3
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > D0
+0175 > F0
+0176 > DE
+0177 > FE
+0178 > AF
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > A1
+1E03 > A2
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > A6
+1E0B > AB
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > B0
+1E1F > B1
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > B4
+1E41 > B5
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > B7
+1E57 > B9
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > BB
+1E61 > BF
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > D7
+1E6B > F7
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > A8
+1E81 > B8
+1E82 > AA
+1E83 > BA
+1E84 > BD
+1E85 > BE
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > AC
+1EF3 > BC
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE1 > A3 # compat
+.
+
+STRICT
+/
+N 258
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42 /
+     N 1
+     0307 > A1
+     .
+0043 > 43 /
+     N 2
+     0307 > A4
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     0307 > A6
+     .
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46 /
+     N 1
+     0307 > B0
+     .
+0047 > 47 /
+     N 1
+     0307 > B2
+     .
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D /
+     N 1
+     0307 > B4
+     .
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50 /
+     N 1
+     0307 > B7
+     .
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     0307 > BB
+     .
+0054 > 54 /
+     N 1
+     0307 > D7
+     .
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57 /
+     N 4
+     0300 > A8
+     0301 > AA
+     0302 > D0
+     0308 > BD
+     .
+0058 > 58
+0059 > 59 /
+     N 4
+     0300 > AC
+     0301 > DD
+     0302 > DE
+     0308 > AF
+     .
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62 /
+     N 1
+     0307 > A2
+     .
+0063 > 63 /
+     N 2
+     0307 > A5
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     0307 > AB
+     .
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66 /
+     N 1
+     0307 > B1
+     .
+0067 > 67 /
+     N 1
+     0307 > B3
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D /
+     N 1
+     0307 > B5
+     .
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70 /
+     N 1
+     0307 > B9
+     .
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     0307 > BF
+     .
+0074 > 74 /
+     N 1
+     0307 > F7
+     .
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77 /
+     N 4
+     0300 > B8
+     0301 > BA
+     0302 > F0
+     0308 > BE
+     .
+0078 > 78
+0079 > 79 /
+     N 4
+     0300 > BC
+     0301 > FD
+     0302 > FE
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A7 > A7
+00A9 > A9
+00AD > AD
+00AE > AE
+00B6 > B6
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FF > FF
+010A > A4
+010B > A5
+0120 > B2
+0121 > B3
+0174 > D0
+0175 > F0
+0176 > DE
+0177 > FE
+0178 > AF
+037E > 3B
+1E02 > A1
+1E03 > A2
+1E0A > A6
+1E0B > AB
+1E1E > B0
+1E1F > B1
+1E40 > B4
+1E41 > B5
+1E56 > B7
+1E57 > B9
+1E60 > BB
+1E61 > BF
+1E6A > D7
+1E6B > F7
+1E80 > A8
+1E81 > B8
+1E82 > AA
+1E83 > BA
+1E84 > BD
+1E85 > BE
+1EF2 > AC
+1EF3 > BC
+1FEF > 60
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0042 0307
+A2 > 0062 0307
+A3 > 00A3
+A4 > 0043 0307
+A5 > 0063 0307
+A6 > 0044 0307
+A7 > 00A7
+A8 > 0057 0300
+A9 > 00A9
+AA > 0057 0301
+AB > 0064 0307
+AC > 0059 0300
+AD > 00AD
+AE > 00AE
+AF > 0059 0308
+B0 > 0046 0307
+B1 > 0066 0307
+B2 > 0047 0307
+B3 > 0067 0307
+B4 > 004D 0307
+B5 > 006D 0307
+B6 > 00B6
+B7 > 0050 0307
+B8 > 0077 0300
+B9 > 0070 0307
+BA > 0077 0301
+BB > 0053 0307
+BC > 0079 0300
+BD > 0057 0308
+BE > 0077 0308
+BF > 0073 0307
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 0057 0302
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 0054 0307
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0059 0301
+DE > 0059 0302
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 0077 0302
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 0074 0307
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0079 0301
+FE > 0079 0302
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 1E02
+A2 > 1E03
+A3 > 00A3
+A4 > 010A
+A5 > 010B
+A6 > 1E0A
+A7 > 00A7
+A8 > 1E80
+A9 > 00A9
+AA > 1E82
+AB > 1E0B
+AC > 1EF2
+AD > 00AD
+AE > 00AE
+AF > 0178
+B0 > 1E1E
+B1 > 1E1F
+B2 > 0120
+B3 > 0121
+B4 > 1E40
+B5 > 1E41
+B6 > 00B6
+B7 > 1E56
+B8 > 1E81
+B9 > 1E57
+BA > 1E83
+BB > 1E60
+BC > 1EF3
+BD > 1E84
+BE > 1E85
+BF > 1E61
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 0174
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 1E6A
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 00DD
+DE > 0176
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 0175
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 1E6B
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 00FD
+FE > 0177
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-14.cset b/data/iso-8859-14.cset
new file mode 100644 (file)
index 0000000..c37a862
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-14
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 1E02 L Y A1 A2 A1 42 62 62 # LATIN CAPITAL LETTER B WITH DOT ABOVE
+A2 1E03 L Y A1 A2 A1 62 62 62 # LATIN SMALL LETTER B WITH DOT ABOVE
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 010A L Y A4 A5 A4 43 63 63 # LATIN CAPITAL LETTER C WITH DOT ABOVE
+A5 010B L Y A4 A5 A4 63 63 63 # LATIN SMALL LETTER C WITH DOT ABOVE
+A6 1E0A L Y A6 AB A6 44 64 64 # LATIN CAPITAL LETTER D WITH DOT ABOVE
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 1E80 L Y A8 B8 A8 57 77 77 # LATIN CAPITAL LETTER W WITH GRAVE
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 1E82 L Y AA BA AA 57 77 77 # LATIN CAPITAL LETTER W WITH ACUTE
+AB 1E0B L Y A6 AB A6 64 64 64 # LATIN SMALL LETTER D WITH DOT ABOVE
+AC 1EF2 L Y AC BC AC 59 79 79 # LATIN CAPITAL LETTER Y WITH GRAVE
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 0178 L Y AF FF AF 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+B0 1E1E L Y B0 B1 B0 46 66 66 # LATIN CAPITAL LETTER F WITH DOT ABOVE
+B1 1E1F L Y B0 B1 B0 66 66 66 # LATIN SMALL LETTER F WITH DOT ABOVE
+B2 0120 L Y B2 B3 B2 47 67 67 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+B3 0121 L Y B2 B3 B2 67 67 67 # LATIN SMALL LETTER G WITH DOT ABOVE
+B4 1E40 L Y B4 B5 B4 4D 6D 6D # LATIN CAPITAL LETTER M WITH DOT ABOVE
+B5 1E41 L Y B4 B5 B4 6D 6D 6D # LATIN SMALL LETTER M WITH DOT ABOVE
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 1E56 L Y B7 B9 B7 50 70 70 # LATIN CAPITAL LETTER P WITH DOT ABOVE
+B8 1E81 L Y A8 B8 A8 77 77 77 # LATIN SMALL LETTER W WITH GRAVE
+B9 1E57 L Y B7 B9 B7 70 70 70 # LATIN SMALL LETTER P WITH DOT ABOVE
+BA 1E83 L Y AA BA AA 77 77 77 # LATIN SMALL LETTER W WITH ACUTE
+BB 1E60 L Y BB BF BB 53 73 73 # LATIN CAPITAL LETTER S WITH DOT ABOVE
+BC 1EF3 L Y AC BC AC 79 79 79 # LATIN SMALL LETTER Y WITH GRAVE
+BD 1E84 L Y BD BE BD 57 77 77 # LATIN CAPITAL LETTER W WITH DIAERESIS
+BE 1E85 L Y BD BE BD 77 77 77 # LATIN SMALL LETTER W WITH DIAERESIS
+BF 1E61 L Y BB BF BB 73 73 73 # LATIN SMALL LETTER S WITH DOT ABOVE
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 0174 L Y D0 F0 D0 57 77 77 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 1E6A L Y D7 F7 D7 54 74 74 # LATIN CAPITAL LETTER T WITH DOT ABOVE
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 0176 L Y DE FE DE 59 79 79 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 0175 L Y D0 F0 D0 77 77 77 # LATIN SMALL LETTER W WITH CIRCUMFLEX
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 1E6B L Y D7 F7 D7 74 74 74 # LATIN SMALL LETTER T WITH DOT ABOVE
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 0177 L Y DE FE DE 79 79 79 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+FF 00FF L Y AF FF AF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/iso-8859-15.cmap b/data/iso-8859-15.cmap
new file mode 100644 (file)
index 0000000..b028cc6
--- /dev/null
@@ -0,0 +1,1934 @@
+INTERNAL
+/
+N 944
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > A6
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 2
+     0301 > DD
+     0308 > BE
+     .
+005A > 5A /
+     N 1
+     030C > B4
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > A8
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A /
+     N 1
+     030C > B8
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A5 > A5
+00A7 > A7
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B9 > B9
+00BA > BA
+00BB > BB
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > BC
+0153 > BD
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > A6
+0161 > A8
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > BE
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > B4
+017E > B8
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 B4 # compat
+01C5 > 44 B8 # compat
+01C6 > 64 B8 # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > A6 # unsup: 0160 0307
+1E67 > A8 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > A4
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     030C > A6
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 2
+     0301 > DD
+     0308 > BE
+     .
+005A > 5A /
+     N 1
+     030C > B4
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     030C > A8
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 2
+     0301 > FD
+     0308 > FF
+     .
+007A > 7A /
+     N 1
+     030C > B8
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A5 > A5
+00A7 > A7
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B9 > B9
+00BA > BA
+00BB > BB
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D0 > D0
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > DD
+00DE > DE
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F0 > F0
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > FD
+00FE > FE
+00FF > FF
+0152 > BC
+0153 > BD
+0160 > A6
+0161 > A8
+0178 > BE
+017D > B4
+017E > B8
+037E > 3B
+0387 > B7
+1FEF > 60
+20AC > A4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 20AC
+A5 > 00A5
+A6 > 0053 030C
+A7 > 00A7
+A8 > 0073 030C
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 005A 030C
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 007A 030C
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 0152
+BD > 0153
+BE > 0059 0308
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 00D0
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0059 0301
+DE > 00DE
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 00F0
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0079 0301
+FE > 00FE
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 20AC
+A5 > 00A5
+A6 > 0160
+A7 > 00A7
+A8 > 0161
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 017D
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 017E
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 0152
+BD > 0153
+BE > 0178
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 00D0
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 00DD
+DE > 00DE
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 00F0
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 00FD
+FE > 00FE
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-15.cset b/data/iso-8859-15.cset
new file mode 100644 (file)
index 0000000..8bf89d4
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-15
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 0160 L Y A6 A8 A6 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 0161 L Y A6 A8 A6 73 73 73 # LATIN SMALL LETTER S WITH CARON
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 017D L Y B4 B8 B4 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 017E L Y B4 B8 B4 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 0152 L Y BC BD BC BC 2A 00 # LATIN CAPITAL LIGATURE OE
+BD 0153 L Y BC BD BC BD 2A 00 # LATIN SMALL LIGATURE OE
+BE 0178 L Y BE FF BE 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN
+FF 00FF L Y BE FF BE 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/iso-8859-16.cmap b/data/iso-8859-16.cmap
new file mode 100644 (file)
index 0000000..fbfbd33
--- /dev/null
@@ -0,0 +1,1951 @@
+INTERNAL
+/
+N 921
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C5
+     030C > B2
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     0328 > DD
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0301 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 3
+     0301 > D7
+     030C > A6
+     0326 > AA
+     .
+0054 > 54 /
+     N 1
+     0326 > DE
+     .
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     030B > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > BE
+     .
+005A > 5A /
+     N 3
+     0301 > AC
+     0307 > AF
+     030C > B4
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > A2
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E5
+     030C > B9
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     0328 > FD
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0301 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 3
+     0301 > F7
+     030C > A8
+     0326 > BA
+     .
+0074 > 74 /
+     N 1
+     0326 > FE
+     .
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     030B > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A /
+     N 3
+     0301 > AE
+     0307 > BF
+     030C > B8
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AD > AD
+00B0 > B0
+00B1 > B1
+00B6 > B6
+00B7 > B7
+00BB > BB
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > 41 # unsup: 0041 030A
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > 4E # unsup: 004E 0303
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > 4F # unsup: 004F 0303
+00D6 > D6
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > 61 # unsup: 0061 030A
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > 6E # unsup: 006E 0303
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > 6F # unsup: 006F 0303
+00F6 > F6
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > C3
+0103 > E3
+0104 > A1
+0105 > A2
+0106 > C5
+0107 > E5
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > B2
+010D > B9
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0110 > D0
+0111 > F0
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > DD
+0119 > FD
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > D5
+0151 > F5
+0152 > BC
+0153 > BD
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > D7
+015B > F7
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > A6
+0161 > A8
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > D8
+0171 > F8
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > BE
+0179 > AC
+017A > AE
+017B > AF
+017C > BF
+017D > B4
+017E > B8
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 B4 # compat
+01C5 > 44 B8 # compat
+01C6 > 64 B8 # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > AA
+0219 > BA
+021A > DE
+021B > FE
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > D7 # unsup: 015A 0307
+1E65 > F7 # unsup: 015B 0307
+1E66 > A6 # unsup: 0160 0307
+1E67 > A8 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > C3 # unsup: 0102 0301
+1EAF > E3 # unsup: 0103 0301
+1EB0 > C3 # unsup: 0102 0300
+1EB1 > E3 # unsup: 0103 0300
+1EB2 > C3 # unsup: 0102 0309
+1EB3 > E3 # unsup: 0103 0309
+1EB4 > C3 # unsup: 0102 0303
+1EB5 > E3 # unsup: 0103 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+201D > B5
+201E > A5
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > A4
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C5
+     030C > B2
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     0328 > DD
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 4
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0301 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 3
+     0301 > D7
+     030C > A6
+     0326 > AA
+     .
+0054 > 54 /
+     N 1
+     0326 > DE
+     .
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     030B > D8
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0308 > BE
+     .
+005A > 5A /
+     N 3
+     0301 > AC
+     0307 > AF
+     030C > B4
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > A2
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E5
+     030C > B9
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     0328 > FD
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0301 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 3
+     0301 > F7
+     030C > A8
+     0326 > BA
+     .
+0074 > 74 /
+     N 1
+     0326 > FE
+     .
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     030B > F8
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A /
+     N 3
+     0301 > AE
+     0307 > BF
+     030C > B8
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > A7
+00A9 > A9
+00AB > AB
+00AD > AD
+00B0 > B0
+00B1 > B1
+00B6 > B6
+00B7 > B7
+00BB > BB
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C4 > C4
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D6 > D6
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E4 > E4
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F6 > F6
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FF > FF
+0102 > C3
+0103 > E3
+0104 > A1
+0105 > A2
+0106 > C5
+0107 > E5
+010C > B2
+010D > B9
+0110 > D0
+0111 > F0
+0118 > DD
+0119 > FD
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0150 > D5
+0151 > F5
+0152 > BC
+0153 > BD
+015A > D7
+015B > F7
+0160 > A6
+0161 > A8
+0170 > D8
+0171 > F8
+0178 > BE
+0179 > AC
+017A > AE
+017B > AF
+017C > BF
+017D > B4
+017E > B8
+0218 > AA
+0219 > BA
+021A > DE
+021B > FE
+037E > 3B
+0387 > B7
+1FEF > 60
+201D > B5
+201E > A5
+20AC > A4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0041 0328
+A2 > 0061 0328
+A3 > 0141
+A4 > 20AC
+A5 > 201E
+A6 > 0053 030C
+A7 > 00A7
+A8 > 0073 030C
+A9 > 00A9
+AA > 0053 0326
+AB > 00AB
+AC > 005A 0301
+AD > 00AD
+AE > 007A 0301
+AF > 005A 0307
+B0 > 00B0
+B1 > 00B1
+B2 > 0043 030C
+B3 > 0142
+B4 > 005A 030C
+B5 > 201D
+B6 > 00B6
+B7 > 00B7
+B8 > 007A 030C
+B9 > 0063 030C
+BA > 0073 0326
+BB > 00BB
+BC > 0152
+BD > 0153
+BE > 0059 0308
+BF > 007A 0307
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0306
+C4 > 0041 0308
+C5 > 0043 0301
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 0110
+D1 > 004E 0301
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 030B
+D6 > 004F 0308
+D7 > 0053 0301
+D8 > 0055 030B
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0045 0328
+DE > 0054 0326
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0306
+E4 > 0061 0308
+E5 > 0063 0301
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 0111
+F1 > 006E 0301
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 030B
+F6 > 006F 0308
+F7 > 0073 0301
+F8 > 0075 030B
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0065 0328
+FE > 0074 0326
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0104
+A2 > 0105
+A3 > 0141
+A4 > 20AC
+A5 > 201E
+A6 > 0160
+A7 > 00A7
+A8 > 0161
+A9 > 00A9
+AA > 0218
+AB > 00AB
+AC > 0179
+AD > 00AD
+AE > 017A
+AF > 017B
+B0 > 00B0
+B1 > 00B1
+B2 > 010C
+B3 > 0142
+B4 > 017D
+B5 > 201D
+B6 > 00B6
+B7 > 00B7
+B8 > 017E
+B9 > 010D
+BA > 0219
+BB > 00BB
+BC > 0152
+BD > 0153
+BE > 0178
+BF > 017C
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 0102
+C4 > 00C4
+C5 > 0106
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 0110
+D1 > 0143
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 0150
+D6 > 00D6
+D7 > 015A
+D8 > 0170
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 0118
+DE > 021A
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 0103
+E4 > 00E4
+E5 > 0107
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 0111
+F1 > 0144
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 0151
+F6 > 00F6
+F7 > 015B
+F8 > 0171
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 0119
+FE > 021B
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-16.cset b/data/iso-8859-16.cset
new file mode 100644 (file)
index 0000000..56a71ee
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-16
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0104 L Y A1 A2 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+A2 0105 L Y A1 A2 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE
+A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN
+A5 201E - Y A5 A5 A5 00 00 00 # DOUBLE LOW-9 QUOTATION MARK
+A6 0160 L Y A6 A8 A6 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 0161 L Y A6 A8 A6 73 73 73 # LATIN SMALL LETTER S WITH CARON
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 0218 L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH COMMA BELOW
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 0179 L Y AC AE AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 017A L Y AC AE AC 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE
+AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 010C L Y B2 B9 B2 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE
+B4 017D L Y B4 B8 B4 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+B5 201D - Y B5 B5 B5 00 00 00 # RIGHT DOUBLE QUOTATION MARK
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 017E L Y B4 B8 B4 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+B9 010D L Y B2 B9 B2 63 63 63 # LATIN SMALL LETTER C WITH CARON
+BA 0219 L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH COMMA BELOW
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 0152 L Y BC BD BC BC 2A 00 # LATIN CAPITAL LIGATURE OE
+BD 0153 L Y BC BD BC BD 2A 00 # LATIN SMALL LIGATURE OE
+BE 0178 L Y BE FF BE 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS
+BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 0106 L Y C5 E5 C5 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE
+D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 015A L Y D7 F7 D7 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE
+D8 0170 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 0118 L Y DD FD DD 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+DE 021A L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH COMMA BELOW
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 0107 L Y C5 E5 C5 63 63 63 # LATIN SMALL LETTER C WITH ACUTE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE
+F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 015B L Y D7 F7 D7 73 73 73 # LATIN SMALL LETTER S WITH ACUTE
+F8 0171 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 0119 L Y DD FD DD 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+FE 021B L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH COMMA BELOW
+FF 00FF L Y BE FF BE 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/iso-8859-2.cmap b/data/iso-8859-2.cmap
new file mode 100644 (file)
index 0000000..811dd83
--- /dev/null
@@ -0,0 +1,1983 @@
+INTERNAL
+/
+N 925
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 5
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C6
+     030C > C8
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     030C > CF
+     .
+0045 > 45 /
+     N 4
+     0301 > C9
+     0308 > CB
+     030C > CC
+     0328 > CA
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 2
+     0301 > CD
+     0302 > CE
+     .
+004A > 4A
+004B > 4B
+004C > 4C /
+     N 2
+     0301 > C5
+     030C > A5
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     030C > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 2
+     0301 > C0
+     030C > D8
+     .
+0053 > 53 /
+     N 3
+     0301 > A6
+     030C > A9
+     0327 > AA
+     .
+0054 > 54 /
+     N 2
+     030C > AB
+     0327 > DE
+     .
+0055 > 55 /
+     N 4
+     0301 > DA
+     0308 > DC
+     030A > D9
+     030B > DB
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 3
+     0301 > AC
+     0307 > AF
+     030C > AE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 5
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E6
+     030C > E8
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     030C > EF
+     .
+0065 > 65 /
+     N 4
+     0301 > E9
+     0308 > EB
+     030C > EC
+     0328 > EA
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0301 > ED
+     0302 > EE
+     .
+006A > 6A
+006B > 6B
+006C > 6C /
+     N 2
+     0301 > E5
+     030C > B5
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     030C > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 2
+     0301 > E0
+     030C > F8
+     .
+0073 > 73 /
+     N 3
+     0301 > B6
+     030C > B9
+     0327 > BA
+     .
+0074 > 74 /
+     N 2
+     030C > BB
+     0327 > FE
+     .
+0075 > 75 /
+     N 4
+     0301 > FA
+     0308 > FC
+     030A > F9
+     030B > FB
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 3
+     0301 > BC
+     0307 > BF
+     030C > BE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00B0 > B0
+00B4 > B4
+00B8 > B8
+00C0 > 41 # unsup: 0041 0300
+00C1 > C1
+00C2 > C2
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > C7
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > CB
+00CC > 49 # unsup: 0049 0300
+00CD > CD
+00CE > CE
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > D3
+00D4 > D4
+00D5 > 4F # unsup: 004F 0303
+00D6 > D6
+00D7 > D7
+00D9 > 55 # unsup: 0055 0300
+00DA > DA
+00DB > 55 # unsup: 0055 0302
+00DC > DC
+00DD > DD
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > E1
+00E2 > E2
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > E7
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > EB
+00EC > 69 # unsup: 0069 0300
+00ED > ED
+00EE > EE
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > F3
+00F4 > F4
+00F5 > 6F # unsup: 006F 0303
+00F6 > F6
+00F7 > F7
+00F9 > 75 # unsup: 0075 0300
+00FA > FA
+00FB > 75 # unsup: 0075 0302
+00FC > FC
+00FD > FD
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > C3
+0103 > E3
+0104 > A1
+0105 > B1
+0106 > C6
+0107 > E6
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > CF
+010F > EF
+0110 > D0
+0111 > F0
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > CA
+0119 > EA
+011A > CC
+011B > EC
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > C5
+013A > E5
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > A5
+013E > B5
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > D2
+0148 > F2
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > D5
+0151 > F5
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > C0
+0155 > E0
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > D8
+0159 > F8
+015A > A6
+015B > B6
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > AA
+015F > BA
+0160 > A9
+0161 > B9
+0162 > DE
+0163 > FE
+0164 > AB
+0165 > BB
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > D9
+016F > F9
+0170 > DB
+0171 > FB
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > AC
+017A > BC
+017B > AF
+017C > BF
+017D > AE
+017E > BE
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 AE # compat
+01C5 > 44 BE # compat
+01C6 > 64 BE # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C7 > B7
+02D8 > A2
+02D9 > FF
+02DB > B2
+02DD > BD
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > A6 # unsup: 015A 0307
+1E65 > B6 # unsup: 015B 0307
+1E66 > A9 # unsup: 0160 0307
+1E67 > B9 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > C3 # unsup: 0102 0301
+1EAF > E3 # unsup: 0103 0301
+1EB0 > C3 # unsup: 0102 0300
+1EB1 > E3 # unsup: 0103 0300
+1EB2 > C3 # unsup: 0102 0309
+1EB3 > E3 # unsup: 0103 0309
+1EB4 > C3 # unsup: 0102 0303
+1EB5 > E3 # unsup: 0103 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 5
+     0301 > C1
+     0302 > C2
+     0306 > C3
+     0308 > C4
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0301 > C6
+     030C > C8
+     0327 > C7
+     .
+0044 > 44 /
+     N 1
+     030C > CF
+     .
+0045 > 45 /
+     N 4
+     0301 > C9
+     0308 > CB
+     030C > CC
+     0328 > CA
+     .
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49 /
+     N 2
+     0301 > CD
+     0302 > CE
+     .
+004A > 4A
+004B > 4B
+004C > 4C /
+     N 2
+     0301 > C5
+     030C > A5
+     .
+004D > 4D
+004E > 4E /
+     N 2
+     0301 > D1
+     030C > D2
+     .
+004F > 4F /
+     N 4
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     030B > D5
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 2
+     0301 > C0
+     030C > D8
+     .
+0053 > 53 /
+     N 3
+     0301 > A6
+     030C > A9
+     0327 > AA
+     .
+0054 > 54 /
+     N 2
+     030C > AB
+     0327 > DE
+     .
+0055 > 55 /
+     N 4
+     0301 > DA
+     0308 > DC
+     030A > D9
+     030B > DB
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59 /
+     N 1
+     0301 > DD
+     .
+005A > 5A /
+     N 3
+     0301 > AC
+     0307 > AF
+     030C > AE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 5
+     0301 > E1
+     0302 > E2
+     0306 > E3
+     0308 > E4
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0301 > E6
+     030C > E8
+     0327 > E7
+     .
+0064 > 64 /
+     N 1
+     030C > EF
+     .
+0065 > 65 /
+     N 4
+     0301 > E9
+     0308 > EB
+     030C > EC
+     0328 > EA
+     .
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69 /
+     N 2
+     0301 > ED
+     0302 > EE
+     .
+006A > 6A
+006B > 6B
+006C > 6C /
+     N 2
+     0301 > E5
+     030C > B5
+     .
+006D > 6D
+006E > 6E /
+     N 2
+     0301 > F1
+     030C > F2
+     .
+006F > 6F /
+     N 4
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     030B > F5
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 2
+     0301 > E0
+     030C > F8
+     .
+0073 > 73 /
+     N 3
+     0301 > B6
+     030C > B9
+     0327 > BA
+     .
+0074 > 74 /
+     N 2
+     030C > BB
+     0327 > FE
+     .
+0075 > 75 /
+     N 4
+     0301 > FA
+     0308 > FC
+     030A > F9
+     030B > FB
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0301 > FD
+     .
+007A > 7A /
+     N 3
+     0301 > BC
+     0307 > BF
+     030C > BE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00B0 > B0
+00B4 > B4
+00B8 > B8
+00C1 > C1
+00C2 > C2
+00C4 > C4
+00C7 > C7
+00C9 > C9
+00CB > CB
+00CD > CD
+00CE > CE
+00D3 > D3
+00D4 > D4
+00D6 > D6
+00D7 > D7
+00DA > DA
+00DC > DC
+00DD > DD
+00DF > DF
+00E1 > E1
+00E2 > E2
+00E4 > E4
+00E7 > E7
+00E9 > E9
+00EB > EB
+00ED > ED
+00EE > EE
+00F3 > F3
+00F4 > F4
+00F6 > F6
+00F7 > F7
+00FA > FA
+00FC > FC
+00FD > FD
+0102 > C3
+0103 > E3
+0104 > A1
+0105 > B1
+0106 > C6
+0107 > E6
+010C > C8
+010D > E8
+010E > CF
+010F > EF
+0110 > D0
+0111 > F0
+0118 > CA
+0119 > EA
+011A > CC
+011B > EC
+0139 > C5
+013A > E5
+013D > A5
+013E > B5
+0141 > A3
+0142 > B3
+0143 > D1
+0144 > F1
+0147 > D2
+0148 > F2
+0150 > D5
+0151 > F5
+0154 > C0
+0155 > E0
+0158 > D8
+0159 > F8
+015A > A6
+015B > B6
+015E > AA
+015F > BA
+0160 > A9
+0161 > B9
+0162 > DE
+0163 > FE
+0164 > AB
+0165 > BB
+016E > D9
+016F > F9
+0170 > DB
+0171 > FB
+0179 > AC
+017A > BC
+017B > AF
+017C > BF
+017D > AE
+017E > BE
+02C7 > B7
+02D8 > A2
+02D9 > FF
+02DB > B2
+02DD > BD
+037E > 3B
+1FEF > 60
+1FFD > B4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0041 0328
+A2 > 02D8
+A3 > 0141
+A4 > 00A4
+A5 > 004C 030C
+A6 > 0053 0301
+A7 > 00A7
+A8 > 00A8
+A9 > 0053 030C
+AA > 0053 0327
+AB > 0054 030C
+AC > 005A 0301
+AD > 00AD
+AE > 005A 030C
+AF > 005A 0307
+B0 > 00B0
+B1 > 0061 0328
+B2 > 02DB
+B3 > 0142
+B4 > 00B4
+B5 > 006C 030C
+B6 > 0073 0301
+B7 > 02C7
+B8 > 00B8
+B9 > 0073 030C
+BA > 0073 0327
+BB > 0074 030C
+BC > 007A 0301
+BD > 02DD
+BE > 007A 030C
+BF > 007A 0307
+C0 > 0052 0301
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0306
+C4 > 0041 0308
+C5 > 004C 0301
+C6 > 0043 0301
+C7 > 0043 0327
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 0045 0328
+CB > 0045 0308
+CC > 0045 030C
+CD > 0049 0301
+CE > 0049 0302
+CF > 0044 030C
+D0 > 0110
+D1 > 004E 0301
+D2 > 004E 030C
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 030B
+D6 > 004F 0308
+D7 > 00D7
+D8 > 0052 030C
+D9 > 0055 030A
+DA > 0055 0301
+DB > 0055 030B
+DC > 0055 0308
+DD > 0059 0301
+DE > 0054 0327
+DF > 00DF
+E0 > 0072 0301
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0306
+E4 > 0061 0308
+E5 > 006C 0301
+E6 > 0063 0301
+E7 > 0063 0327
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 0065 0328
+EB > 0065 0308
+EC > 0065 030C
+ED > 0069 0301
+EE > 0069 0302
+EF > 0064 030C
+F0 > 0111
+F1 > 006E 0301
+F2 > 006E 030C
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 030B
+F6 > 006F 0308
+F7 > 00F7
+F8 > 0072 030C
+F9 > 0075 030A
+FA > 0075 0301
+FB > 0075 030B
+FC > 0075 0308
+FD > 0079 0301
+FE > 0074 0327
+FF > 02D9
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0104
+A2 > 02D8
+A3 > 0141
+A4 > 00A4
+A5 > 013D
+A6 > 015A
+A7 > 00A7
+A8 > 00A8
+A9 > 0160
+AA > 015E
+AB > 0164
+AC > 0179
+AD > 00AD
+AE > 017D
+AF > 017B
+B0 > 00B0
+B1 > 0105
+B2 > 02DB
+B3 > 0142
+B4 > 00B4
+B5 > 013E
+B6 > 015B
+B7 > 02C7
+B8 > 00B8
+B9 > 0161
+BA > 015F
+BB > 0165
+BC > 017A
+BD > 02DD
+BE > 017E
+BF > 017C
+C0 > 0154
+C1 > 00C1
+C2 > 00C2
+C3 > 0102
+C4 > 00C4
+C5 > 0139
+C6 > 0106
+C7 > 00C7
+C8 > 010C
+C9 > 00C9
+CA > 0118
+CB > 00CB
+CC > 011A
+CD > 00CD
+CE > 00CE
+CF > 010E
+D0 > 0110
+D1 > 0143
+D2 > 0147
+D3 > 00D3
+D4 > 00D4
+D5 > 0150
+D6 > 00D6
+D7 > 00D7
+D8 > 0158
+D9 > 016E
+DA > 00DA
+DB > 0170
+DC > 00DC
+DD > 00DD
+DE > 0162
+DF > 00DF
+E0 > 0155
+E1 > 00E1
+E2 > 00E2
+E3 > 0103
+E4 > 00E4
+E5 > 013A
+E6 > 0107
+E7 > 00E7
+E8 > 010D
+E9 > 00E9
+EA > 0119
+EB > 00EB
+EC > 011B
+ED > 00ED
+EE > 00EE
+EF > 010F
+F0 > 0111
+F1 > 0144
+F2 > 0148
+F3 > 00F3
+F4 > 00F4
+F5 > 0151
+F6 > 00F6
+F7 > 00F7
+F8 > 0159
+F9 > 016F
+FA > 00FA
+FB > 0171
+FC > 00FC
+FD > 00FD
+FE > 0163
+FF > 02D9
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-2.cset b/data/iso-8859-2.cset
new file mode 100644 (file)
index 0000000..b425187
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-2
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE
+A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 013D L Y A5 B5 A5 4C 6C 6C # LATIN CAPITAL LETTER L WITH CARON
+A6 015A L Y A6 B6 A6 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 0160 L Y A9 B9 A9 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA
+AB 0164 L Y AB BB AB 54 74 74 # LATIN CAPITAL LETTER T WITH CARON
+AC 0179 L Y AC BC AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 017D L Y AE BE AE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK
+B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 013E L Y A5 B5 A5 6C 6C 6C # LATIN SMALL LETTER L WITH CARON
+B6 015B L Y A6 B6 A6 73 73 73 # LATIN SMALL LETTER S WITH ACUTE
+B7 02C7 M Y B7 B7 B7 00 00 00 # CARON
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 0161 L Y A9 B9 A9 73 73 73 # LATIN SMALL LETTER S WITH CARON
+BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA
+BB 0165 L Y AB BB AB 74 74 74 # LATIN SMALL LETTER T WITH CARON
+BC 017A L Y AC BC AC 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE
+BD 02DD - Y BD BD BD 00 00 00 # DOUBLE ACUTE ACCENT
+BE 017E L Y AE BE AE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+C0 0154 L Y C0 E0 C0 52 72 72 # LATIN CAPITAL LETTER R WITH ACUTE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 0139 L Y C5 E5 C5 4C 6C 6C # LATIN CAPITAL LETTER L WITH ACUTE
+C6 0106 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 011A L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH CARON
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 010E L Y CF EF CF 44 64 64 # LATIN CAPITAL LETTER D WITH CARON
+D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE
+D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE
+D2 0147 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CARON
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 0158 L Y D8 F8 D8 52 72 72 # LATIN CAPITAL LETTER R WITH CARON
+D9 016E L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH RING ABOVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 0170 L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE
+DE 0162 L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH CEDILLA
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0155 L Y C0 E0 C0 72 72 72 # LATIN SMALL LETTER R WITH ACUTE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 013A L Y C5 E5 C5 6C 6C 6C # LATIN SMALL LETTER L WITH ACUTE
+E6 0107 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH ACUTE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 011B L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH CARON
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 010F L Y CF EF CF 64 64 64 # LATIN SMALL LETTER D WITH CARON
+F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE
+F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE
+F2 0148 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CARON
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 0159 L Y D8 F8 D8 72 72 72 # LATIN SMALL LETTER R WITH CARON
+F9 016F L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH RING ABOVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 0171 L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE
+FE 0163 L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH CEDILLA
+FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE
diff --git a/data/iso-8859-3.cmap b/data/iso-8859-3.cmap
new file mode 100644 (file)
index 0000000..87215dd
--- /dev/null
@@ -0,0 +1,1935 @@
+INTERNAL
+/
+N 931
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0308 > C4
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0302 > C6
+     0307 > C5
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 3
+     0302 > D8
+     0306 > AB
+     0307 > D5
+     .
+0048 > 48 /
+     N 1
+     0302 > A6
+     .
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > A9
+     0308 > CF
+     .
+004A > 4A /
+     N 1
+     0302 > AC
+     .
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 4
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 2
+     0302 > DE
+     0327 > AA
+     .
+0054 > 54
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0306 > DD
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 1
+     0307 > AF
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0308 > E4
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0302 > E6
+     0307 > E5
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 3
+     0302 > F8
+     0306 > BB
+     0307 > F5
+     .
+0068 > 68 /
+     N 1
+     0302 > B6
+     .
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A /
+     N 1
+     0302 > BC
+     .
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 4
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 2
+     0302 > FE
+     0327 > BA
+     .
+0074 > 74
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0306 > FD
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 1
+     0307 > BF
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00B0 > B0
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B7 > B7
+00B8 > B8
+00BD > BD
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > 41 # unsup: 0041 0303
+00C4 > C4
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > 4F # unsup: 004F 0303
+00D6 > D6
+00D7 > D7
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > 61 # unsup: 0061 0303
+00E4 > E4
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > 6F # unsup: 006F 0303
+00F6 > F6
+00F7 > F7
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > C6
+0109 > E6
+010A > C5
+010B > E5
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > D8
+011D > F8
+011E > AB
+011F > BB
+0120 > D5
+0121 > F5
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > A6
+0125 > B6
+0126 > A1
+0127 > B1
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > A9
+0131 > B9
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > AC
+0135 > BC
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > DE
+015D > FE
+015E > AA
+015F > BA
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > DD
+016D > FD
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > AF
+017C > BF
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02D8 > A2
+02D9 > FF
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE1 > A3 # compat
+.
+
+STRICT
+/
+N 253
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 4
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0308 > C4
+     .
+0042 > 42
+0043 > 43 /
+     N 3
+     0302 > C6
+     0307 > C5
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 3
+     0302 > D8
+     0306 > AB
+     0307 > D5
+     .
+0048 > 48 /
+     N 1
+     0302 > A6
+     .
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > A9
+     0308 > CF
+     .
+004A > 4A /
+     N 1
+     0302 > AC
+     .
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 4
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 2
+     0302 > DE
+     0327 > AA
+     .
+0054 > 54
+0055 > 55 /
+     N 5
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0306 > DD
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 1
+     0307 > AF
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 4
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0308 > E4
+     .
+0062 > 62
+0063 > 63 /
+     N 3
+     0302 > E6
+     0307 > E5
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 3
+     0302 > F8
+     0306 > BB
+     0307 > F5
+     .
+0068 > 68 /
+     N 1
+     0302 > B6
+     .
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A /
+     N 1
+     0302 > BC
+     .
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 4
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 2
+     0302 > FE
+     0327 > BA
+     .
+0074 > 74
+0075 > 75 /
+     N 5
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0306 > FD
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 1
+     0307 > BF
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00B0 > B0
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B7 > B7
+00B8 > B8
+00BD > BD
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C4 > C4
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D6 > D6
+00D7 > D7
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E4 > E4
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F6 > F6
+00F7 > F7
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+0108 > C6
+0109 > E6
+010A > C5
+010B > E5
+011C > D8
+011D > F8
+011E > AB
+011F > BB
+0120 > D5
+0121 > F5
+0124 > A6
+0125 > B6
+0126 > A1
+0127 > B1
+0130 > A9
+0131 > B9
+0134 > AC
+0135 > BC
+015C > DE
+015D > FE
+015E > AA
+015F > BA
+016C > DD
+016D > FD
+017B > AF
+017C > BF
+02D8 > A2
+02D9 > FF
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+.
+
+NFD
+/
+N 249
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0126
+A2 > 02D8
+A3 > 00A3
+A4 > 00A4
+A6 > 0048 0302
+A7 > 00A7
+A8 > 00A8
+A9 > 0049 0307
+AA > 0053 0327
+AB > 0047 0306
+AC > 004A 0302
+AD > 00AD
+AF > 005A 0307
+B0 > 00B0
+B1 > 0127
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 0068 0302
+B7 > 00B7
+B8 > 00B8
+B9 > 0131
+BA > 0073 0327
+BB > 0067 0306
+BC > 006A 0302
+BD > 00BD
+BF > 007A 0307
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C4 > 0041 0308
+C5 > 0043 0307
+C6 > 0043 0302
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 0047 0307
+D6 > 004F 0308
+D7 > 00D7
+D8 > 0047 0302
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0055 0306
+DE > 0053 0302
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E4 > 0061 0308
+E5 > 0063 0307
+E6 > 0063 0302
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 0067 0307
+F6 > 006F 0308
+F7 > 00F7
+F8 > 0067 0302
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0075 0306
+FE > 0073 0302
+FF > 02D9
+.
+
+NFC
+/
+N 249
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0126
+A2 > 02D8
+A3 > 00A3
+A4 > 00A4
+A6 > 0124
+A7 > 00A7
+A8 > 00A8
+A9 > 0130
+AA > 015E
+AB > 011E
+AC > 0134
+AD > 00AD
+AF > 017B
+B0 > 00B0
+B1 > 0127
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 0125
+B7 > 00B7
+B8 > 00B8
+B9 > 0131
+BA > 015F
+BB > 011F
+BC > 0135
+BD > 00BD
+BF > 017C
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C4 > 00C4
+C5 > 010A
+C6 > 0108
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 0120
+D6 > 00D6
+D7 > 00D7
+D8 > 011C
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 016C
+DE > 015C
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E4 > 00E4
+E5 > 010B
+E6 > 0109
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 0121
+F6 > 00F6
+F7 > 00F7
+F8 > 011D
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 016D
+FE > 015D
+FF > 02D9
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-3.cset b/data/iso-8859-3.cset
new file mode 100644 (file)
index 0000000..21c26a7
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-3
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0126 L Y A1 B1 A1 A1 B1 B1 # LATIN CAPITAL LETTER H WITH STROKE
+A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 E0A5 . N A5 A5 A5 00 00 00 # <unused>
+A6 0124 L Y A6 B6 A6 48 68 68 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 0130 L Y A9 69 A9 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA
+AB 011E L Y AB BB AB 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE
+AC 0134 L Y AC BC AC 4A 6A 6A # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE E0AE . N AE AE AE 00 00 00 # <unused>
+AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 0127 L Y A1 B1 A1 B1 B1 B1 # LATIN SMALL LETTER H WITH STROKE
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 0125 L Y A6 B6 A6 68 68 68 # LATIN SMALL LETTER H WITH CIRCUMFLEX
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 0131 L Y 49 B9 49 B9 B9 B9 # LATIN SMALL LETTER DOTLESS I
+BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA
+BB 011F L Y AB BB AB 67 67 67 # LATIN SMALL LETTER G WITH BREVE
+BC 0135 L Y AC BC AC 6A 6A 6A # LATIN SMALL LETTER J WITH CIRCUMFLEX
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE E0BE . N BE BE BE 00 00 00 # <unused>
+BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 E0C3 . N C3 C3 C3 00 00 00 # <unused>
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 010A L Y C5 E5 C5 43 63 63 # LATIN CAPITAL LETTER C WITH DOT ABOVE
+C6 0108 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 E0D0 . N D0 D0 D0 00 00 00 # <unused>
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 0120 L Y D5 F5 D5 47 67 67 # LATIN CAPITAL LETTER G WITH DOT ABOVE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 011C L Y D8 F8 D8 47 67 67 # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 016C L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH BREVE
+DE 015C L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 E0E3 . N E3 E3 E3 00 00 00 # <unused>
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 010B L Y C5 E5 C5 63 63 63 # LATIN SMALL LETTER C WITH DOT ABOVE
+E6 0109 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH CIRCUMFLEX
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 E0F0 . N F0 F0 F0 00 00 00 # <unused>
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 0121 L Y D5 F5 D5 67 67 67 # LATIN SMALL LETTER G WITH DOT ABOVE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 011D L Y D8 F8 D8 67 67 67 # LATIN SMALL LETTER G WITH CIRCUMFLEX
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 016D L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH BREVE
+FE 015D L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CIRCUMFLEX
+FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE
diff --git a/data/iso-8859-4.cmap b/data/iso-8859-4.cmap
new file mode 100644 (file)
index 0000000..30bc796
--- /dev/null
@@ -0,0 +1,1970 @@
+INTERNAL
+/
+N 932
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 7
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0304 > C0
+     0308 > C4
+     030A > C5
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0301 > C9
+     0304 > AA
+     0307 > CC
+     0308 > CB
+     0328 > CA
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > AB
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0301 > CD
+     0302 > CE
+     0303 > A5
+     0304 > CF
+     0328 > C7
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > D3
+     .
+004C > 4C /
+     N 1
+     0327 > A6
+     .
+004D > 4D
+004E > 4E /
+     N 1
+     0327 > D1
+     .
+004F > 4F /
+     N 4
+     0302 > D4
+     0303 > D5
+     0304 > D2
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > A3
+     .
+0053 > 53 /
+     N 1
+     030C > A9
+     .
+0054 > 54
+0055 > 55 /
+     N 6
+     0301 > DA
+     0302 > DB
+     0303 > DD
+     0304 > DE
+     0308 > DC
+     0328 > D9
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 1
+     030C > AE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 7
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0304 > E0
+     0308 > E4
+     030A > E5
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0301 > E9
+     0304 > BA
+     0307 > EC
+     0308 > EB
+     0328 > EA
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > BB
+     .
+0068 > 68
+0069 > 69 /
+     N 5
+     0301 > ED
+     0302 > EE
+     0303 > B5
+     0304 > EF
+     0328 > E7
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > F3
+     .
+006C > 6C /
+     N 1
+     0327 > B6
+     .
+006D > 6D
+006E > 6E /
+     N 1
+     0327 > F1
+     .
+006F > 6F /
+     N 4
+     0302 > F4
+     0303 > F5
+     0304 > F2
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > B3
+     .
+0073 > 73 /
+     N 1
+     030C > B9
+     .
+0074 > 74
+0075 > 75 /
+     N 6
+     0301 > FA
+     0302 > FB
+     0303 > FD
+     0304 > FE
+     0308 > FC
+     0328 > F9
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 1
+     030C > BE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00AF > AF
+00B0 > B0
+00B4 > B4
+00B8 > B8
+00C0 > 41 # unsup: 0041 0300
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > C9
+00CA > 45 # unsup: 0045 0302
+00CB > CB
+00CC > 49 # unsup: 0049 0300
+00CD > CD
+00CE > CE
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > 55 # unsup: 0055 0300
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > 61 # unsup: 0061 0300
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > E9
+00EA > 65 # unsup: 0065 0302
+00EB > EB
+00EC > 69 # unsup: 0069 0300
+00ED > ED
+00EE > EE
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > 75 # unsup: 0075 0300
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > C0
+0101 > E0
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > A1
+0105 > B1
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > C8
+010D > E8
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0110 > D0
+0111 > F0
+0112 > AA
+0113 > BA
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > CC
+0117 > EC
+0118 > CA
+0119 > EA
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > AB
+0123 > BB
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > A5
+0129 > B5
+012A > CF
+012B > EF
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > C7
+012F > E7
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > D3
+0137 > F3
+0138 > A2
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > A6
+013C > B6
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > D1
+0146 > F1
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014A > BD
+014B > BF
+014C > D2
+014D > F2
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > A3
+0157 > B3
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > A9
+0161 > B9
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0166 > AC
+0167 > BC
+0168 > DD
+0169 > FD
+016A > DE
+016B > FE
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > D9
+0173 > F9
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > AE
+017E > BE
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 AE # compat
+01C5 > 44 BE # compat
+01C6 > 64 BE # compat
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+02C7 > B7
+02D9 > FF
+02DB > B2
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > AA # unsup: 0112 0300
+1E15 > BA # unsup: 0113 0300
+1E16 > AA # unsup: 0112 0301
+1E17 > BA # unsup: 0113 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > D2 # unsup: 014C 0300
+1E51 > F2 # unsup: 014D 0300
+1E52 > D2 # unsup: 014C 0301
+1E53 > F2 # unsup: 014D 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > A9 # unsup: 0160 0307
+1E67 > B9 # unsup: 0161 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > DD # unsup: 0168 0301
+1E79 > FD # unsup: 0169 0301
+1E7A > DE # unsup: 016A 0308
+1E7B > FE # unsup: 016B 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE3 > AF # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 7
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0304 > C0
+     0308 > C4
+     030A > C5
+     0328 > A1
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     030C > C8
+     .
+0044 > 44
+0045 > 45 /
+     N 5
+     0301 > C9
+     0304 > AA
+     0307 > CC
+     0308 > CB
+     0328 > CA
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0327 > AB
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0301 > CD
+     0302 > CE
+     0303 > A5
+     0304 > CF
+     0328 > C7
+     .
+004A > 4A
+004B > 4B /
+     N 1
+     0327 > D3
+     .
+004C > 4C /
+     N 1
+     0327 > A6
+     .
+004D > 4D
+004E > 4E /
+     N 1
+     0327 > D1
+     .
+004F > 4F /
+     N 4
+     0302 > D4
+     0303 > D5
+     0304 > D2
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52 /
+     N 1
+     0327 > A3
+     .
+0053 > 53 /
+     N 1
+     030C > A9
+     .
+0054 > 54
+0055 > 55 /
+     N 6
+     0301 > DA
+     0302 > DB
+     0303 > DD
+     0304 > DE
+     0308 > DC
+     0328 > D9
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A /
+     N 1
+     030C > AE
+     .
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 7
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0304 > E0
+     0308 > E4
+     030A > E5
+     0328 > B1
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     030C > E8
+     .
+0064 > 64
+0065 > 65 /
+     N 5
+     0301 > E9
+     0304 > BA
+     0307 > EC
+     0308 > EB
+     0328 > EA
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0327 > BB
+     .
+0068 > 68
+0069 > 69 /
+     N 5
+     0301 > ED
+     0302 > EE
+     0303 > B5
+     0304 > EF
+     0328 > E7
+     .
+006A > 6A
+006B > 6B /
+     N 1
+     0327 > F3
+     .
+006C > 6C /
+     N 1
+     0327 > B6
+     .
+006D > 6D
+006E > 6E /
+     N 1
+     0327 > F1
+     .
+006F > 6F /
+     N 4
+     0302 > F4
+     0303 > F5
+     0304 > F2
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72 /
+     N 1
+     0327 > B3
+     .
+0073 > 73 /
+     N 1
+     030C > B9
+     .
+0074 > 74
+0075 > 75 /
+     N 6
+     0301 > FA
+     0302 > FB
+     0303 > FD
+     0304 > FE
+     0308 > FC
+     0328 > F9
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A /
+     N 1
+     030C > BE
+     .
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00A7 > A7
+00A8 > A8
+00AD > AD
+00AF > AF
+00B0 > B0
+00B4 > B4
+00B8 > B8
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C9 > C9
+00CB > CB
+00CD > CD
+00CE > CE
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00DA > DA
+00DB > DB
+00DC > DC
+00DF > DF
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E9 > E9
+00EB > EB
+00ED > ED
+00EE > EE
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00FA > FA
+00FB > FB
+00FC > FC
+0100 > C0
+0101 > E0
+0104 > A1
+0105 > B1
+010C > C8
+010D > E8
+0110 > D0
+0111 > F0
+0112 > AA
+0113 > BA
+0116 > CC
+0117 > EC
+0118 > CA
+0119 > EA
+0122 > AB
+0123 > BB
+0128 > A5
+0129 > B5
+012A > CF
+012B > EF
+012E > C7
+012F > E7
+0136 > D3
+0137 > F3
+0138 > A2
+013B > A6
+013C > B6
+0145 > D1
+0146 > F1
+014A > BD
+014B > BF
+014C > D2
+014D > F2
+0156 > A3
+0157 > B3
+0160 > A9
+0161 > B9
+0166 > AC
+0167 > BC
+0168 > DD
+0169 > FD
+016A > DE
+016B > FE
+0172 > D9
+0173 > F9
+017D > AE
+017E > BE
+02C7 > B7
+02D9 > FF
+02DB > B2
+037E > 3B
+1FEF > 60
+1FFD > B4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0041 0328
+A2 > 0138
+A3 > 0052 0327
+A4 > 00A4
+A5 > 0049 0303
+A6 > 004C 0327
+A7 > 00A7
+A8 > 00A8
+A9 > 0053 030C
+AA > 0045 0304
+AB > 0047 0327
+AC > 0166
+AD > 00AD
+AE > 005A 030C
+AF > 00AF
+B0 > 00B0
+B1 > 0061 0328
+B2 > 02DB
+B3 > 0072 0327
+B4 > 00B4
+B5 > 0069 0303
+B6 > 006C 0327
+B7 > 02C7
+B8 > 00B8
+B9 > 0073 030C
+BA > 0065 0304
+BB > 0067 0327
+BC > 0167
+BD > 014A
+BE > 007A 030C
+BF > 014B
+C0 > 0041 0304
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0049 0328
+C8 > 0043 030C
+C9 > 0045 0301
+CA > 0045 0328
+CB > 0045 0308
+CC > 0045 0307
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0304
+D0 > 0110
+D1 > 004E 0327
+D2 > 004F 0304
+D3 > 004B 0327
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0328
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0055 0303
+DE > 0055 0304
+DF > 00DF
+E0 > 0061 0304
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0069 0328
+E8 > 0063 030C
+E9 > 0065 0301
+EA > 0065 0328
+EB > 0065 0308
+EC > 0065 0307
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0304
+F0 > 0111
+F1 > 006E 0327
+F2 > 006F 0304
+F3 > 006B 0327
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0328
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0075 0303
+FE > 0075 0304
+FF > 02D9
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0104
+A2 > 0138
+A3 > 0156
+A4 > 00A4
+A5 > 0128
+A6 > 013B
+A7 > 00A7
+A8 > 00A8
+A9 > 0160
+AA > 0112
+AB > 0122
+AC > 0166
+AD > 00AD
+AE > 017D
+AF > 00AF
+B0 > 00B0
+B1 > 0105
+B2 > 02DB
+B3 > 0157
+B4 > 00B4
+B5 > 0129
+B6 > 013C
+B7 > 02C7
+B8 > 00B8
+B9 > 0161
+BA > 0113
+BB > 0123
+BC > 0167
+BD > 014A
+BE > 017E
+BF > 014B
+C0 > 0100
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 012E
+C8 > 010C
+C9 > 00C9
+CA > 0118
+CB > 00CB
+CC > 0116
+CD > 00CD
+CE > 00CE
+CF > 012A
+D0 > 0110
+D1 > 0145
+D2 > 014C
+D3 > 0136
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 0172
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 0168
+DE > 016A
+DF > 00DF
+E0 > 0101
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 012F
+E8 > 010D
+E9 > 00E9
+EA > 0119
+EB > 00EB
+EC > 0117
+ED > 00ED
+EE > 00EE
+EF > 012B
+F0 > 0111
+F1 > 0146
+F2 > 014D
+F3 > 0137
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 0173
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 0169
+FE > 016B
+FF > 02D9
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-4.cset b/data/iso-8859-4.cset
new file mode 100644 (file)
index 0000000..5da17b7
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-4
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK
+A2 0138 L Y A2 A2 A2 A2 A2 A2 # LATIN SMALL LETTER KRA
+A3 0156 L Y A3 B3 A3 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 0128 L Y A5 B5 A5 49 2A 00 # LATIN CAPITAL LETTER I WITH TILDE
+A6 013B L Y A6 B6 A6 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 0160 L Y A9 B9 A9 53 73 73 # LATIN CAPITAL LETTER S WITH CARON
+AA 0112 L Y AA BA AA 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON
+AB 0122 L Y AB BB AB 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA
+AC 0166 L Y AC BC AC AC BC BC # LATIN CAPITAL LETTER T WITH STROKE
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 017D L Y AE BE AE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK
+B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK
+B3 0157 L Y A3 B3 A3 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 0129 L Y A5 B5 A5 69 2A 00 # LATIN SMALL LETTER I WITH TILDE
+B6 013C L Y A6 B6 A6 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA
+B7 02C7 M Y B7 B7 B7 00 00 00 # CARON
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 0161 L Y A9 B9 A9 73 73 73 # LATIN SMALL LETTER S WITH CARON
+BA 0113 L Y AA BA AA 65 2A 00 # LATIN SMALL LETTER E WITH MACRON
+BB 0123 L Y AB BB AB 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA
+BC 0167 L Y AC BC AC BC BC BC # LATIN SMALL LETTER T WITH STROKE
+BD 014A L Y BD BF BD BD BF BF # LATIN CAPITAL LETTER ENG
+BE 017E L Y AE BE AE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON
+BF 014B L Y BD BF BD BF BF BF # LATIN SMALL LETTER ENG
+C0 0100 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 012E L Y C7 E7 C7 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK
+C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 0116 L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 012A L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON
+D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE
+D1 0145 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA
+D2 014C L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON
+D3 0136 L Y D3 F3 D3 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 0172 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 0168 L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH TILDE
+DE 016A L Y DE FE DE 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 0101 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH MACRON
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 012F L Y C7 E7 C7 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK
+E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 0117 L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 012B L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH MACRON
+F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE
+F1 0146 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA
+F2 014D L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON
+F3 0137 L Y D3 F3 D3 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 0173 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 0169 L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH TILDE
+FE 016B L Y DE FE DE 75 2A 00 # LATIN SMALL LETTER U WITH MACRON
+FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE
diff --git a/data/iso-8859-5.cmap b/data/iso-8859-5.cmap
new file mode 100644 (file)
index 0000000..cdd6473
--- /dev/null
@@ -0,0 +1,1895 @@
+INTERNAL
+/
+N 1030
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > FD
+00AD > AD
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0400 > B5 # unsup: 0415 0300
+0401 > A1
+0402 > A2
+0403 > A3
+0404 > A4
+0405 > A5
+0406 > A6 /
+     N 1
+     0308 > A7
+     .
+0407 > A7
+0408 > A8
+0409 > A9
+040A > AA
+040B > AB
+040C > AC
+040D > B8 # unsup: 0418 0300
+040E > AE
+040F > AF
+0410 > B0
+0411 > B1
+0412 > B2
+0413 > B3 /
+     N 1
+     0301 > A3
+     .
+0414 > B4
+0415 > B5 /
+     N 1
+     0308 > A1
+     .
+0416 > B6
+0417 > B7
+0418 > B8 /
+     N 1
+     0306 > B9
+     .
+0419 > B9
+041A > BA /
+     N 1
+     0301 > AC
+     .
+041B > BB
+041C > BC
+041D > BD
+041E > BE
+041F > BF
+0420 > C0
+0421 > C1
+0422 > C2
+0423 > C3 /
+     N 1
+     0306 > AE
+     .
+0424 > C4
+0425 > C5
+0426 > C6
+0427 > C7
+0428 > C8
+0429 > C9
+042A > CA
+042B > CB
+042C > CC
+042D > CD
+042E > CE
+042F > CF
+0430 > D0
+0431 > D1
+0432 > D2
+0433 > D3 /
+     N 1
+     0301 > F3
+     .
+0434 > D4
+0435 > D5 /
+     N 1
+     0308 > F1
+     .
+0436 > D6
+0437 > D7
+0438 > D8 /
+     N 1
+     0306 > D9
+     .
+0439 > D9
+043A > DA /
+     N 1
+     0301 > FC
+     .
+043B > DB
+043C > DC
+043D > DD
+043E > DE
+043F > DF
+0440 > E0
+0441 > E1
+0442 > E2
+0443 > E3 /
+     N 1
+     0306 > FE
+     .
+0444 > E4
+0445 > E5
+0446 > E6
+0447 > E7
+0448 > E8
+0449 > E9
+044A > EA
+044B > EB
+044C > EC
+044D > ED
+044E > EE
+044F > EF
+0450 > D5 # unsup: 0435 0300
+0451 > F1
+0452 > F2
+0453 > F3
+0454 > F4
+0455 > F5
+0456 > F6 /
+     N 1
+     0308 > F7
+     .
+0457 > F7
+0458 > F8
+0459 > F9
+045A > FA
+045B > FB
+045C > FC
+045D > D8 # unsup: 0438 0300
+045E > FE
+045F > FF
+04C1 > B6 # unsup: 0416 0306
+04C2 > D6 # unsup: 0436 0306
+04D0 > B0 # unsup: 0410 0306
+04D1 > D0 # unsup: 0430 0306
+04D2 > B0 # unsup: 0410 0308
+04D3 > D0 # unsup: 0430 0308
+04D6 > B5 # unsup: 0415 0306
+04D7 > D5 # unsup: 0435 0306
+04DC > B6 # unsup: 0416 0308
+04DD > D6 # unsup: 0436 0308
+04DE > B7 # unsup: 0417 0308
+04DF > D7 # unsup: 0437 0308
+04E2 > B8 # unsup: 0418 0304
+04E3 > D8 # unsup: 0438 0304
+04E4 > B8 # unsup: 0418 0308
+04E5 > D8 # unsup: 0438 0308
+04E6 > BE # unsup: 041E 0308
+04E7 > DE # unsup: 043E 0308
+04EC > CD # unsup: 042D 0308
+04ED > ED # unsup: 044D 0308
+04EE > C3 # unsup: 0423 0304
+04EF > E3 # unsup: 0443 0304
+04F0 > C3 # unsup: 0423 0308
+04F1 > E3 # unsup: 0443 0308
+04F2 > C3 # unsup: 0423 030B
+04F3 > E3 # unsup: 0443 030B
+04F4 > C7 # unsup: 0427 0308
+04F5 > E7 # unsup: 0447 0308
+04F8 > CB # unsup: 042B 0308
+04F9 > EB # unsup: 044B 0308
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+2116 > F0
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 258
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A7 > FD
+00AD > AD
+037E > 3B
+0401 > A1
+0402 > A2
+0403 > A3
+0404 > A4
+0405 > A5
+0406 > A6 /
+     N 1
+     0308 > A7
+     .
+0407 > A7
+0408 > A8
+0409 > A9
+040A > AA
+040B > AB
+040C > AC
+040E > AE
+040F > AF
+0410 > B0
+0411 > B1
+0412 > B2
+0413 > B3 /
+     N 1
+     0301 > A3
+     .
+0414 > B4
+0415 > B5 /
+     N 1
+     0308 > A1
+     .
+0416 > B6
+0417 > B7
+0418 > B8 /
+     N 1
+     0306 > B9
+     .
+0419 > B9
+041A > BA /
+     N 1
+     0301 > AC
+     .
+041B > BB
+041C > BC
+041D > BD
+041E > BE
+041F > BF
+0420 > C0
+0421 > C1
+0422 > C2
+0423 > C3 /
+     N 1
+     0306 > AE
+     .
+0424 > C4
+0425 > C5
+0426 > C6
+0427 > C7
+0428 > C8
+0429 > C9
+042A > CA
+042B > CB
+042C > CC
+042D > CD
+042E > CE
+042F > CF
+0430 > D0
+0431 > D1
+0432 > D2
+0433 > D3 /
+     N 1
+     0301 > F3
+     .
+0434 > D4
+0435 > D5 /
+     N 1
+     0308 > F1
+     .
+0436 > D6
+0437 > D7
+0438 > D8 /
+     N 1
+     0306 > D9
+     .
+0439 > D9
+043A > DA /
+     N 1
+     0301 > FC
+     .
+043B > DB
+043C > DC
+043D > DD
+043E > DE
+043F > DF
+0440 > E0
+0441 > E1
+0442 > E2
+0443 > E3 /
+     N 1
+     0306 > FE
+     .
+0444 > E4
+0445 > E5
+0446 > E6
+0447 > E7
+0448 > E8
+0449 > E9
+044A > EA
+044B > EB
+044C > EC
+044D > ED
+044E > EE
+044F > EF
+0451 > F1
+0452 > F2
+0453 > F3
+0454 > F4
+0455 > F5
+0456 > F6 /
+     N 1
+     0308 > F7
+     .
+0457 > F7
+0458 > F8
+0459 > F9
+045A > FA
+045B > FB
+045C > FC
+045E > FE
+045F > FF
+1FEF > 60
+2116 > F0
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0415 0308
+A2 > 0402
+A3 > 0413 0301
+A4 > 0404
+A5 > 0405
+A6 > 0406
+A7 > 0406 0308
+A8 > 0408
+A9 > 0409
+AA > 040A
+AB > 040B
+AC > 041A 0301
+AD > 00AD
+AE > 0423 0306
+AF > 040F
+B0 > 0410
+B1 > 0411
+B2 > 0412
+B3 > 0413
+B4 > 0414
+B5 > 0415
+B6 > 0416
+B7 > 0417
+B8 > 0418
+B9 > 0418 0306
+BA > 041A
+BB > 041B
+BC > 041C
+BD > 041D
+BE > 041E
+BF > 041F
+C0 > 0420
+C1 > 0421
+C2 > 0422
+C3 > 0423
+C4 > 0424
+C5 > 0425
+C6 > 0426
+C7 > 0427
+C8 > 0428
+C9 > 0429
+CA > 042A
+CB > 042B
+CC > 042C
+CD > 042D
+CE > 042E
+CF > 042F
+D0 > 0430
+D1 > 0431
+D2 > 0432
+D3 > 0433
+D4 > 0434
+D5 > 0435
+D6 > 0436
+D7 > 0437
+D8 > 0438
+D9 > 0438 0306
+DA > 043A
+DB > 043B
+DC > 043C
+DD > 043D
+DE > 043E
+DF > 043F
+E0 > 0440
+E1 > 0441
+E2 > 0442
+E3 > 0443
+E4 > 0444
+E5 > 0445
+E6 > 0446
+E7 > 0447
+E8 > 0448
+E9 > 0449
+EA > 044A
+EB > 044B
+EC > 044C
+ED > 044D
+EE > 044E
+EF > 044F
+F0 > 2116
+F1 > 0435 0308
+F2 > 0452
+F3 > 0433 0301
+F4 > 0454
+F5 > 0455
+F6 > 0456
+F7 > 0456 0308
+F8 > 0458
+F9 > 0459
+FA > 045A
+FB > 045B
+FC > 043A 0301
+FD > 00A7
+FE > 0443 0306
+FF > 045F
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 0401
+A2 > 0402
+A3 > 0403
+A4 > 0404
+A5 > 0405
+A6 > 0406
+A7 > 0407
+A8 > 0408
+A9 > 0409
+AA > 040A
+AB > 040B
+AC > 040C
+AD > 00AD
+AE > 040E
+AF > 040F
+B0 > 0410
+B1 > 0411
+B2 > 0412
+B3 > 0413
+B4 > 0414
+B5 > 0415
+B6 > 0416
+B7 > 0417
+B8 > 0418
+B9 > 0419
+BA > 041A
+BB > 041B
+BC > 041C
+BD > 041D
+BE > 041E
+BF > 041F
+C0 > 0420
+C1 > 0421
+C2 > 0422
+C3 > 0423
+C4 > 0424
+C5 > 0425
+C6 > 0426
+C7 > 0427
+C8 > 0428
+C9 > 0429
+CA > 042A
+CB > 042B
+CC > 042C
+CD > 042D
+CE > 042E
+CF > 042F
+D0 > 0430
+D1 > 0431
+D2 > 0432
+D3 > 0433
+D4 > 0434
+D5 > 0435
+D6 > 0436
+D7 > 0437
+D8 > 0438
+D9 > 0439
+DA > 043A
+DB > 043B
+DC > 043C
+DD > 043D
+DE > 043E
+DF > 043F
+E0 > 0440
+E1 > 0441
+E2 > 0442
+E3 > 0443
+E4 > 0444
+E5 > 0445
+E6 > 0446
+E7 > 0447
+E8 > 0448
+E9 > 0449
+EA > 044A
+EB > 044B
+EC > 044C
+ED > 044D
+EE > 044E
+EF > 044F
+F0 > 2116
+F1 > 0451
+F2 > 0452
+F3 > 0453
+F4 > 0454
+F5 > 0455
+F6 > 0456
+F7 > 0457
+F8 > 0458
+F9 > 0459
+FA > 045A
+FB > 045B
+FC > 045C
+FD > 00A7
+FE > 045E
+FF > 045F
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-5.cset b/data/iso-8859-5.cset
new file mode 100644 (file)
index 0000000..a940d38
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-5
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 0401 L Y A1 F1 A1 A1 F1 F1 # CYRILLIC CAPITAL LETTER IO
+A2 0402 L Y A2 F2 A2 A2 F2 F2 # CYRILLIC CAPITAL LETTER DJE
+A3 0403 L Y A3 F3 A3 A3 F3 F3 # CYRILLIC CAPITAL LETTER GJE
+A4 0404 L Y A4 F4 A4 A4 F4 F4 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+A5 0405 L Y A5 F5 A5 A5 F5 F5 # CYRILLIC CAPITAL LETTER DZE
+A6 0406 L Y A6 F6 A6 A6 F6 F6 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+A7 0407 L Y A7 F7 A7 A7 F7 F7 # CYRILLIC CAPITAL LETTER YI
+A8 0408 L Y A8 F8 A8 A8 F8 F8 # CYRILLIC CAPITAL LETTER JE
+A9 0409 L Y A9 F9 A9 A9 F9 F9 # CYRILLIC CAPITAL LETTER LJE
+AA 040A L Y AA FA AA AA FA FA # CYRILLIC CAPITAL LETTER NJE
+AB 040B L Y AB FB AB AB FB FB # CYRILLIC CAPITAL LETTER TSHE
+AC 040C L Y AC FC AC AC FC FC # CYRILLIC CAPITAL LETTER KJE
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 040E L Y AE FE AE AE FE FE # CYRILLIC CAPITAL LETTER SHORT U
+AF 040F L Y AF FF AF AF FF FF # CYRILLIC CAPITAL LETTER DZHE
+B0 0410 L Y B0 D0 B0 B0 2A 00 # CYRILLIC CAPITAL LETTER A
+B1 0411 L Y B1 D1 B1 B1 D1 D1 # CYRILLIC CAPITAL LETTER BE
+B2 0412 L Y B2 D2 B2 B2 D2 D2 # CYRILLIC CAPITAL LETTER VE
+B3 0413 L Y B3 D3 B3 B3 D3 D3 # CYRILLIC CAPITAL LETTER GHE
+B4 0414 L Y B4 D4 B4 B4 D4 D4 # CYRILLIC CAPITAL LETTER DE
+B5 0415 L Y B5 D5 B5 B5 2A 00 # CYRILLIC CAPITAL LETTER IE
+B6 0416 L Y B6 D6 B6 B6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE
+B7 0417 L Y B7 D7 B7 B7 D7 D7 # CYRILLIC CAPITAL LETTER ZE
+B8 0418 L Y B8 D8 B8 B8 2A 00 # CYRILLIC CAPITAL LETTER I
+B9 0419 L Y B9 D9 B9 B9 D9 D9 # CYRILLIC CAPITAL LETTER SHORT I
+BA 041A L Y BA DA BA BA DA DA # CYRILLIC CAPITAL LETTER KA
+BB 041B L Y BB DB BB BB DB DB # CYRILLIC CAPITAL LETTER EL
+BC 041C L Y BC DC BC BC DC DC # CYRILLIC CAPITAL LETTER EM
+BD 041D L Y BD DD BD BD DD DD # CYRILLIC CAPITAL LETTER EN
+BE 041E L Y BE DE BE BE 2A 00 # CYRILLIC CAPITAL LETTER O
+BF 041F L Y BF DF BF BF DF DF # CYRILLIC CAPITAL LETTER PE
+C0 0420 L Y C0 E0 C0 C0 E0 E0 # CYRILLIC CAPITAL LETTER ER
+C1 0421 L Y C1 E1 C1 C1 E1 E1 # CYRILLIC CAPITAL LETTER ES
+C2 0422 L Y C2 E2 C2 C2 E2 E2 # CYRILLIC CAPITAL LETTER TE
+C3 0423 L Y C3 E3 C3 C3 2A 00 # CYRILLIC CAPITAL LETTER U
+C4 0424 L Y C4 E4 C4 C4 E4 E4 # CYRILLIC CAPITAL LETTER EF
+C5 0425 L Y C5 E5 C5 C5 E5 E5 # CYRILLIC CAPITAL LETTER HA
+C6 0426 L Y C6 E6 C6 C6 E6 E6 # CYRILLIC CAPITAL LETTER TSE
+C7 0427 L Y C7 E7 C7 C7 E7 E7 # CYRILLIC CAPITAL LETTER CHE
+C8 0428 L Y C8 E8 C8 C8 E8 E8 # CYRILLIC CAPITAL LETTER SHA
+C9 0429 L Y C9 E9 C9 C9 E9 E9 # CYRILLIC CAPITAL LETTER SHCHA
+CA 042A L Y CA EA CA CA EA EA # CYRILLIC CAPITAL LETTER HARD SIGN
+CB 042B L Y CB EB CB CB 2A 00 # CYRILLIC CAPITAL LETTER YERU
+CC 042C L Y CC EC CC CC EC EC # CYRILLIC CAPITAL LETTER SOFT SIGN
+CD 042D L Y CD ED CD CD 2A 00 # CYRILLIC CAPITAL LETTER E
+CE 042E L Y CE EE CE CE 2A 00 # CYRILLIC CAPITAL LETTER YU
+CF 042F L Y CF EF CF CF 2A 00 # CYRILLIC CAPITAL LETTER YA
+D0 0430 L Y B0 D0 B0 D0 2A 00 # CYRILLIC SMALL LETTER A
+D1 0431 L Y B1 D1 B1 D1 D1 D1 # CYRILLIC SMALL LETTER BE
+D2 0432 L Y B2 D2 B2 D2 D2 D2 # CYRILLIC SMALL LETTER VE
+D3 0433 L Y B3 D3 B3 D3 D3 D3 # CYRILLIC SMALL LETTER GHE
+D4 0434 L Y B4 D4 B4 D4 D4 D4 # CYRILLIC SMALL LETTER DE
+D5 0435 L Y B5 D5 B5 D5 2A 00 # CYRILLIC SMALL LETTER IE
+D6 0436 L Y B6 D6 B6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE
+D7 0437 L Y B7 D7 B7 D7 D7 D7 # CYRILLIC SMALL LETTER ZE
+D8 0438 L Y B8 D8 B8 D8 2A 00 # CYRILLIC SMALL LETTER I
+D9 0439 L Y B9 D9 B9 D9 D9 D9 # CYRILLIC SMALL LETTER SHORT I
+DA 043A L Y BA DA BA DA DA DA # CYRILLIC SMALL LETTER KA
+DB 043B L Y BB DB BB DB DB DB # CYRILLIC SMALL LETTER EL
+DC 043C L Y BC DC BC DC DC DC # CYRILLIC SMALL LETTER EM
+DD 043D L Y BD DD BD DD DD DD # CYRILLIC SMALL LETTER EN
+DE 043E L Y BE DE BE DE 2A 00 # CYRILLIC SMALL LETTER O
+DF 043F L Y BF DF BF DF DF DF # CYRILLIC SMALL LETTER PE
+E0 0440 L Y C0 E0 C0 E0 E0 E0 # CYRILLIC SMALL LETTER ER
+E1 0441 L Y C1 E1 C1 E1 E1 E1 # CYRILLIC SMALL LETTER ES
+E2 0442 L Y C2 E2 C2 E2 E2 E2 # CYRILLIC SMALL LETTER TE
+E3 0443 L Y C3 E3 C3 E3 2A 00 # CYRILLIC SMALL LETTER U
+E4 0444 L Y C4 E4 C4 E4 E4 E4 # CYRILLIC SMALL LETTER EF
+E5 0445 L Y C5 E5 C5 E5 E5 E5 # CYRILLIC SMALL LETTER HA
+E6 0446 L Y C6 E6 C6 E6 E6 E6 # CYRILLIC SMALL LETTER TSE
+E7 0447 L Y C7 E7 C7 E7 E7 E7 # CYRILLIC SMALL LETTER CHE
+E8 0448 L Y C8 E8 C8 E8 E8 E8 # CYRILLIC SMALL LETTER SHA
+E9 0449 L Y C9 E9 C9 E9 E9 E9 # CYRILLIC SMALL LETTER SHCHA
+EA 044A L Y CA EA CA EA EA EA # CYRILLIC SMALL LETTER HARD SIGN
+EB 044B L Y CB EB CB EB 2A 00 # CYRILLIC SMALL LETTER YERU
+EC 044C L Y CC EC CC EC EC EC # CYRILLIC SMALL LETTER SOFT SIGN
+ED 044D L Y CD ED CD ED 2A 00 # CYRILLIC SMALL LETTER E
+EE 044E L Y CE EE CE EE 2A 00 # CYRILLIC SMALL LETTER YU
+EF 044F L Y CF EF CF EF 2A 00 # CYRILLIC SMALL LETTER YA
+F0 2116 . N F0 F0 F0 00 00 00 # <unused special>
+F1 0451 L Y A1 F1 A1 F1 F1 F1 # CYRILLIC SMALL LETTER IO
+F2 0452 L Y A2 F2 A2 F2 F2 F2 # CYRILLIC SMALL LETTER DJE
+F3 0453 L Y A3 F3 A3 F3 F3 F3 # CYRILLIC SMALL LETTER GJE
+F4 0454 L Y A4 F4 A4 F4 F4 F4 # CYRILLIC SMALL LETTER UKRAINIAN IE
+F5 0455 L Y A5 F5 A5 F5 F5 F5 # CYRILLIC SMALL LETTER DZE
+F6 0456 L Y A6 F6 A6 F6 F6 F6 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+F7 0457 L Y A7 F7 A7 F7 F7 F7 # CYRILLIC SMALL LETTER YI
+F8 0458 L Y A8 F8 A8 F8 F8 F8 # CYRILLIC SMALL LETTER JE
+F9 0459 L Y A9 F9 A9 F9 F9 F9 # CYRILLIC SMALL LETTER LJE
+FA 045A L Y AA FA AA FA FA FA # CYRILLIC SMALL LETTER NJE
+FB 045B L Y AB FB AB FB FB FB # CYRILLIC SMALL LETTER TSHE
+FC 045C L Y AC FC AC FC FC FC # CYRILLIC SMALL LETTER KJE
+FD 00A7 - Y FD FD FD 00 00 00 # SECTION SIGN
+FE 045E L Y AE FE AE FE FE FE # CYRILLIC SMALL LETTER SHORT U
+FF 045F L Y AF FF AF FF FF FF # CYRILLIC SMALL LETTER DZHE
diff --git a/data/iso-8859-6.cmap b/data/iso-8859-6.cmap
new file mode 100644 (file)
index 0000000..bbb7b8a
--- /dev/null
@@ -0,0 +1,2201 @@
+INTERNAL
+/
+N 1521
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00AD > AD
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+060C > AC
+061B > BB
+061F > BF
+0621 > C1
+0622 > C2
+0623 > C3
+0624 > C4
+0625 > C5
+0626 > C6
+0627 > C7 /
+     N 3
+     0653 > C2
+     0654 > C3
+     0655 > C5
+     .
+0628 > C8
+0629 > C9
+062A > CA
+062B > CB
+062C > CC
+062D > CD
+062E > CE
+062F > CF
+0630 > D0
+0631 > D1
+0632 > D2
+0633 > D3
+0634 > D4
+0635 > D5
+0636 > D6
+0637 > D7
+0638 > D8
+0639 > D9
+063A > DA
+0640 > E0
+0641 > E1
+0642 > E2
+0643 > E3
+0644 > E4
+0645 > E5
+0646 > E6
+0647 > E7
+0648 > E8 /
+     N 1
+     0654 > C4
+     .
+0649 > E9
+064A > EA /
+     N 1
+     0654 > C6
+     .
+064B > EB
+064C > EC
+064D > ED
+064E > EE
+064F > EF
+0650 > F0
+0651 > F1
+0652 > F2
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FBE8 > E9 # compat
+FBE9 > E9 # compat
+FBEA > C6 C7 # compat
+FBEB > C6 C7 # compat
+FBEE > C6 E8 # compat
+FBEF > C6 E8 # compat
+FBF9 > C6 E9 # compat
+FBFA > C6 E9 # compat
+FBFB > C6 E9 # compat
+FC00 > C6 CC # compat
+FC01 > C6 CD # compat
+FC02 > C6 E5 # compat
+FC03 > C6 E9 # compat
+FC04 > C6 EA # compat
+FC05 > C8 CC # compat
+FC06 > C8 CD # compat
+FC07 > C8 CE # compat
+FC08 > C8 E5 # compat
+FC09 > C8 E9 # compat
+FC0A > C8 EA # compat
+FC0B > CA CC # compat
+FC0C > CA CD # compat
+FC0D > CA CE # compat
+FC0E > CA E5 # compat
+FC0F > CA E9 # compat
+FC10 > CA EA # compat
+FC11 > CB CC # compat
+FC12 > CB E5 # compat
+FC13 > CB E9 # compat
+FC14 > CB EA # compat
+FC15 > CC CD # compat
+FC16 > CC E5 # compat
+FC17 > CD CC # compat
+FC18 > CD E5 # compat
+FC19 > CE CC # compat
+FC1A > CE CD # compat
+FC1B > CE E5 # compat
+FC1C > D3 CC # compat
+FC1D > D3 CD # compat
+FC1E > D3 CE # compat
+FC1F > D3 E5 # compat
+FC20 > D5 CD # compat
+FC21 > D5 E5 # compat
+FC22 > D6 CC # compat
+FC23 > D6 CD # compat
+FC24 > D6 CE # compat
+FC25 > D6 E5 # compat
+FC26 > D7 CD # compat
+FC27 > D7 E5 # compat
+FC28 > D8 E5 # compat
+FC29 > D9 CC # compat
+FC2A > D9 E5 # compat
+FC2B > DA CC # compat
+FC2C > DA E5 # compat
+FC2D > E1 CC # compat
+FC2E > E1 CD # compat
+FC2F > E1 CE # compat
+FC30 > E1 E5 # compat
+FC31 > E1 E9 # compat
+FC32 > E1 EA # compat
+FC33 > E2 CD # compat
+FC34 > E2 E5 # compat
+FC35 > E2 E9 # compat
+FC36 > E2 EA # compat
+FC37 > E3 C7 # compat
+FC38 > E3 CC # compat
+FC39 > E3 CD # compat
+FC3A > E3 CE # compat
+FC3B > E3 E4 # compat
+FC3C > E3 E5 # compat
+FC3D > E3 E9 # compat
+FC3E > E3 EA # compat
+FC3F > E4 CC # compat
+FC40 > E4 CD # compat
+FC41 > E4 CE # compat
+FC42 > E4 E5 # compat
+FC43 > E4 E9 # compat
+FC44 > E4 EA # compat
+FC45 > E5 CC # compat
+FC46 > E5 CD # compat
+FC47 > E5 CE # compat
+FC48 > E5 E5 # compat
+FC49 > E5 E9 # compat
+FC4A > E5 EA # compat
+FC4B > E6 CC # compat
+FC4C > E6 CD # compat
+FC4D > E6 CE # compat
+FC4E > E6 E5 # compat
+FC4F > E6 E9 # compat
+FC50 > E6 EA # compat
+FC51 > E7 CC # compat
+FC52 > E7 E5 # compat
+FC53 > E7 E9 # compat
+FC54 > E7 EA # compat
+FC55 > EA CC # compat
+FC56 > EA CD # compat
+FC57 > EA CE # compat
+FC58 > EA E5 # compat
+FC59 > EA E9 # compat
+FC5A > EA EA # compat
+FC5B > D0 # unsup: 0630 0670
+FC5C > D1 # unsup: 0631 0670
+FC5D > E9 # unsup: 0649 0670
+FC64 > C6 D1 # compat
+FC65 > C6 D2 # compat
+FC66 > C6 E5 # compat
+FC67 > C6 E6 # compat
+FC68 > C6 E9 # compat
+FC69 > C6 EA # compat
+FC6A > C8 D1 # compat
+FC6B > C8 D2 # compat
+FC6C > C8 E5 # compat
+FC6D > C8 E6 # compat
+FC6E > C8 E9 # compat
+FC6F > C8 EA # compat
+FC70 > CA D1 # compat
+FC71 > CA D2 # compat
+FC72 > CA E5 # compat
+FC73 > CA E6 # compat
+FC74 > CA E9 # compat
+FC75 > CA EA # compat
+FC76 > CB D1 # compat
+FC77 > CB D2 # compat
+FC78 > CB E5 # compat
+FC79 > CB E6 # compat
+FC7A > CB E9 # compat
+FC7B > CB EA # compat
+FC7C > E1 E9 # compat
+FC7D > E1 EA # compat
+FC7E > E2 E9 # compat
+FC7F > E2 EA # compat
+FC80 > E3 C7 # compat
+FC81 > E3 E4 # compat
+FC82 > E3 E5 # compat
+FC83 > E3 E9 # compat
+FC84 > E3 EA # compat
+FC85 > E4 E5 # compat
+FC86 > E4 E9 # compat
+FC87 > E4 EA # compat
+FC88 > E5 C7 # compat
+FC89 > E5 E5 # compat
+FC8A > E6 D1 # compat
+FC8B > E6 D2 # compat
+FC8C > E6 E5 # compat
+FC8D > E6 E6 # compat
+FC8E > E6 E9 # compat
+FC8F > E6 EA # compat
+FC90 > E9 # unsup: 0649 0670
+FC91 > EA D1 # compat
+FC92 > EA D2 # compat
+FC93 > EA E5 # compat
+FC94 > EA E6 # compat
+FC95 > EA E9 # compat
+FC96 > EA EA # compat
+FC97 > C6 CC # compat
+FC98 > C6 CD # compat
+FC99 > C6 CE # compat
+FC9A > C6 E5 # compat
+FC9B > C6 E7 # compat
+FC9C > C8 CC # compat
+FC9D > C8 CD # compat
+FC9E > C8 CE # compat
+FC9F > C8 E5 # compat
+FCA0 > C8 E7 # compat
+FCA1 > CA CC # compat
+FCA2 > CA CD # compat
+FCA3 > CA CE # compat
+FCA4 > CA E5 # compat
+FCA5 > CA E7 # compat
+FCA6 > CB E5 # compat
+FCA7 > CC CD # compat
+FCA8 > CC E5 # compat
+FCA9 > CD CC # compat
+FCAA > CD E5 # compat
+FCAB > CE CC # compat
+FCAC > CE E5 # compat
+FCAD > D3 CC # compat
+FCAE > D3 CD # compat
+FCAF > D3 CE # compat
+FCB0 > D3 E5 # compat
+FCB1 > D5 CD # compat
+FCB2 > D5 CE # compat
+FCB3 > D5 E5 # compat
+FCB4 > D6 CC # compat
+FCB5 > D6 CD # compat
+FCB6 > D6 CE # compat
+FCB7 > D6 E5 # compat
+FCB8 > D7 CD # compat
+FCB9 > D8 E5 # compat
+FCBA > D9 CC # compat
+FCBB > D9 E5 # compat
+FCBC > DA CC # compat
+FCBD > DA E5 # compat
+FCBE > E1 CC # compat
+FCBF > E1 CD # compat
+FCC0 > E1 CE # compat
+FCC1 > E1 E5 # compat
+FCC2 > E2 CD # compat
+FCC3 > E2 E5 # compat
+FCC4 > E3 CC # compat
+FCC5 > E3 CD # compat
+FCC6 > E3 CE # compat
+FCC7 > E3 E4 # compat
+FCC8 > E3 E5 # compat
+FCC9 > E4 CC # compat
+FCCA > E4 CD # compat
+FCCB > E4 CE # compat
+FCCC > E4 E5 # compat
+FCCD > E4 E7 # compat
+FCCE > E5 CC # compat
+FCCF > E5 CD # compat
+FCD0 > E5 CE # compat
+FCD1 > E5 E5 # compat
+FCD2 > E6 CC # compat
+FCD3 > E6 CD # compat
+FCD4 > E6 CE # compat
+FCD5 > E6 E5 # compat
+FCD6 > E6 E7 # compat
+FCD7 > E7 CC # compat
+FCD8 > E7 E5 # compat
+FCD9 > E7 # unsup: 0647 0670
+FCDA > EA CC # compat
+FCDB > EA CD # compat
+FCDC > EA CE # compat
+FCDD > EA E5 # compat
+FCDE > EA E7 # compat
+FCDF > C6 E5 # compat
+FCE0 > C6 E7 # compat
+FCE1 > C8 E5 # compat
+FCE2 > C8 E7 # compat
+FCE3 > CA E5 # compat
+FCE4 > CA E7 # compat
+FCE5 > CB E5 # compat
+FCE6 > CB E7 # compat
+FCE7 > D3 E5 # compat
+FCE8 > D3 E7 # compat
+FCE9 > D4 E5 # compat
+FCEA > D4 E7 # compat
+FCEB > E3 E4 # compat
+FCEC > E3 E5 # compat
+FCED > E4 E5 # compat
+FCEE > E6 E5 # compat
+FCEF > E6 E7 # compat
+FCF0 > EA E5 # compat
+FCF1 > EA E7 # compat
+FCF2 > E0 EE F1 # compat
+FCF3 > E0 EF F1 # compat
+FCF4 > E0 F0 F1 # compat
+FCF5 > D7 E9 # compat
+FCF6 > D7 EA # compat
+FCF7 > D9 E9 # compat
+FCF8 > D9 EA # compat
+FCF9 > DA E9 # compat
+FCFA > DA EA # compat
+FCFB > D3 E9 # compat
+FCFC > D3 EA # compat
+FCFD > D4 E9 # compat
+FCFE > D4 EA # compat
+FCFF > CD E9 # compat
+FD00 > CD EA # compat
+FD01 > CC E9 # compat
+FD02 > CC EA # compat
+FD03 > CE E9 # compat
+FD04 > CE EA # compat
+FD05 > D5 E9 # compat
+FD06 > D5 EA # compat
+FD07 > D6 E9 # compat
+FD08 > D6 EA # compat
+FD09 > D4 CC # compat
+FD0A > D4 CD # compat
+FD0B > D4 CE # compat
+FD0C > D4 E5 # compat
+FD0D > D4 D1 # compat
+FD0E > D3 D1 # compat
+FD0F > D5 D1 # compat
+FD10 > D6 D1 # compat
+FD11 > D7 E9 # compat
+FD12 > D7 EA # compat
+FD13 > D9 E9 # compat
+FD14 > D9 EA # compat
+FD15 > DA E9 # compat
+FD16 > DA EA # compat
+FD17 > D3 E9 # compat
+FD18 > D3 EA # compat
+FD19 > D4 E9 # compat
+FD1A > D4 EA # compat
+FD1B > CD E9 # compat
+FD1C > CD EA # compat
+FD1D > CC E9 # compat
+FD1E > CC EA # compat
+FD1F > CE E9 # compat
+FD20 > CE EA # compat
+FD21 > D5 E9 # compat
+FD22 > D5 EA # compat
+FD23 > D6 E9 # compat
+FD24 > D6 EA # compat
+FD25 > D4 CC # compat
+FD26 > D4 CD # compat
+FD27 > D4 CE # compat
+FD28 > D4 E5 # compat
+FD29 > D4 D1 # compat
+FD2A > D3 D1 # compat
+FD2B > D5 D1 # compat
+FD2C > D6 D1 # compat
+FD2D > D4 CC # compat
+FD2E > D4 CD # compat
+FD2F > D4 CE # compat
+FD30 > D4 E5 # compat
+FD31 > D3 E7 # compat
+FD32 > D4 E7 # compat
+FD33 > D7 E5 # compat
+FD34 > D3 CC # compat
+FD35 > D3 CD # compat
+FD36 > D3 CE # compat
+FD37 > D4 CC # compat
+FD38 > D4 CD # compat
+FD39 > D4 CE # compat
+FD3A > D7 E5 # compat
+FD3B > D8 E5 # compat
+FD3C > C7 EB # compat
+FD3D > C7 EB # compat
+FD50 > CA CC E5 # compat
+FD51 > CA CD CC # compat
+FD52 > CA CD CC # compat
+FD53 > CA CD E5 # compat
+FD54 > CA CE E5 # compat
+FD55 > CA E5 CC # compat
+FD56 > CA E5 CD # compat
+FD57 > CA E5 CE # compat
+FD58 > CC E5 CD # compat
+FD59 > CC E5 CD # compat
+FD5A > CD E5 EA # compat
+FD5B > CD E5 E9 # compat
+FD5C > D3 CD CC # compat
+FD5D > D3 CC CD # compat
+FD5E > D3 CC E9 # compat
+FD5F > D3 E5 CD # compat
+FD60 > D3 E5 CD # compat
+FD61 > D3 E5 CC # compat
+FD62 > D3 E5 E5 # compat
+FD63 > D3 E5 E5 # compat
+FD64 > D5 CD CD # compat
+FD65 > D5 CD CD # compat
+FD66 > D5 E5 E5 # compat
+FD67 > D4 CD E5 # compat
+FD68 > D4 CD E5 # compat
+FD69 > D4 CC EA # compat
+FD6A > D4 E5 CE # compat
+FD6B > D4 E5 CE # compat
+FD6C > D4 E5 E5 # compat
+FD6D > D4 E5 E5 # compat
+FD6E > D6 CD E9 # compat
+FD6F > D6 CE E5 # compat
+FD70 > D6 CE E5 # compat
+FD71 > D7 E5 CD # compat
+FD72 > D7 E5 CD # compat
+FD73 > D7 E5 E5 # compat
+FD74 > D7 E5 EA # compat
+FD75 > D9 CC E5 # compat
+FD76 > D9 E5 E5 # compat
+FD77 > D9 E5 E5 # compat
+FD78 > D9 E5 E9 # compat
+FD79 > DA E5 E5 # compat
+FD7A > DA E5 EA # compat
+FD7B > DA E5 E9 # compat
+FD7C > E1 CE E5 # compat
+FD7D > E1 CE E5 # compat
+FD7E > E2 E5 CD # compat
+FD7F > E2 E5 E5 # compat
+FD80 > E4 CD E5 # compat
+FD81 > E4 CD EA # compat
+FD82 > E4 CD E9 # compat
+FD83 > E4 CC CC # compat
+FD84 > E4 CC CC # compat
+FD85 > E4 CE E5 # compat
+FD86 > E4 CE E5 # compat
+FD87 > E4 E5 CD # compat
+FD88 > E4 E5 CD # compat
+FD89 > E5 CD CC # compat
+FD8A > E5 CD E5 # compat
+FD8B > E5 CD EA # compat
+FD8C > E5 CC CD # compat
+FD8D > E5 CC E5 # compat
+FD8E > E5 CE CC # compat
+FD8F > E5 CE E5 # compat
+FD92 > E5 CC CE # compat
+FD93 > E7 E5 CC # compat
+FD94 > E7 E5 E5 # compat
+FD95 > E6 CD E5 # compat
+FD96 > E6 CD E9 # compat
+FD97 > E6 CC E5 # compat
+FD98 > E6 CC E5 # compat
+FD99 > E6 CC E9 # compat
+FD9A > E6 E5 EA # compat
+FD9B > E6 E5 E9 # compat
+FD9C > EA E5 E5 # compat
+FD9D > EA E5 E5 # compat
+FD9E > C8 CE EA # compat
+FD9F > CA CC EA # compat
+FDA0 > CA CC E9 # compat
+FDA1 > CA CE EA # compat
+FDA2 > CA CE E9 # compat
+FDA3 > CA E5 EA # compat
+FDA4 > CA E5 E9 # compat
+FDA5 > CC E5 EA # compat
+FDA6 > CC CD E9 # compat
+FDA7 > CC E5 E9 # compat
+FDA8 > D3 CE E9 # compat
+FDA9 > D5 CD EA # compat
+FDAA > D4 CD EA # compat
+FDAB > D6 CD EA # compat
+FDAC > E4 CC EA # compat
+FDAD > E4 E5 EA # compat
+FDAE > EA CD EA # compat
+FDAF > EA CC EA # compat
+FDB0 > EA E5 EA # compat
+FDB1 > E5 E5 EA # compat
+FDB2 > E2 E5 EA # compat
+FDB3 > E6 CD EA # compat
+FDB4 > E2 E5 CD # compat
+FDB5 > E4 CD E5 # compat
+FDB6 > D9 E5 EA # compat
+FDB7 > E3 E5 EA # compat
+FDB8 > E6 CC CD # compat
+FDB9 > E5 CE EA # compat
+FDBA > E4 CC E5 # compat
+FDBB > E3 E5 E5 # compat
+FDBC > E4 CC E5 # compat
+FDBD > E6 CC CD # compat
+FDBE > CC CD EA # compat
+FDBF > CD CC EA # compat
+FDC0 > E5 CC EA # compat
+FDC1 > E1 E5 EA # compat
+FDC2 > C8 CD EA # compat
+FDC3 > E3 E5 E5 # compat
+FDC4 > D9 CC E5 # compat
+FDC5 > D5 E5 E5 # compat
+FDC6 > D3 CE EA # compat
+FDC7 > E6 CC EA # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FE71 > E0 EB # compat
+FE77 > E0 EE # compat
+FE79 > E0 EF # compat
+FE7B > E0 F0 # compat
+FE7D > E0 F1 # compat
+FE7F > E0 F2 # compat
+FE80 > C1 # compat
+FE81 > C2 # compat
+FE82 > C2 # compat
+FE83 > C3 # compat
+FE84 > C3 # compat
+FE85 > C4 # compat
+FE86 > C4 # compat
+FE87 > C5 # compat
+FE88 > C5 # compat
+FE89 > C6 # compat
+FE8A > C6 # compat
+FE8B > C6 # compat
+FE8C > C6 # compat
+FE8D > C7 # compat
+FE8E > C7 # compat
+FE8F > C8 # compat
+FE90 > C8 # compat
+FE91 > C8 # compat
+FE92 > C8 # compat
+FE93 > C9 # compat
+FE94 > C9 # compat
+FE95 > CA # compat
+FE96 > CA # compat
+FE97 > CA # compat
+FE98 > CA # compat
+FE99 > CB # compat
+FE9A > CB # compat
+FE9B > CB # compat
+FE9C > CB # compat
+FE9D > CC # compat
+FE9E > CC # compat
+FE9F > CC # compat
+FEA0 > CC # compat
+FEA1 > CD # compat
+FEA2 > CD # compat
+FEA3 > CD # compat
+FEA4 > CD # compat
+FEA5 > CE # compat
+FEA6 > CE # compat
+FEA7 > CE # compat
+FEA8 > CE # compat
+FEA9 > CF # compat
+FEAA > CF # compat
+FEAB > D0 # compat
+FEAC > D0 # compat
+FEAD > D1 # compat
+FEAE > D1 # compat
+FEAF > D2 # compat
+FEB0 > D2 # compat
+FEB1 > D3 # compat
+FEB2 > D3 # compat
+FEB3 > D3 # compat
+FEB4 > D3 # compat
+FEB5 > D4 # compat
+FEB6 > D4 # compat
+FEB7 > D4 # compat
+FEB8 > D4 # compat
+FEB9 > D5 # compat
+FEBA > D5 # compat
+FEBB > D5 # compat
+FEBC > D5 # compat
+FEBD > D6 # compat
+FEBE > D6 # compat
+FEBF > D6 # compat
+FEC0 > D6 # compat
+FEC1 > D7 # compat
+FEC2 > D7 # compat
+FEC3 > D7 # compat
+FEC4 > D7 # compat
+FEC5 > D8 # compat
+FEC6 > D8 # compat
+FEC7 > D8 # compat
+FEC8 > D8 # compat
+FEC9 > D9 # compat
+FECA > D9 # compat
+FECB > D9 # compat
+FECC > D9 # compat
+FECD > DA # compat
+FECE > DA # compat
+FECF > DA # compat
+FED0 > DA # compat
+FED1 > E1 # compat
+FED2 > E1 # compat
+FED3 > E1 # compat
+FED4 > E1 # compat
+FED5 > E2 # compat
+FED6 > E2 # compat
+FED7 > E2 # compat
+FED8 > E2 # compat
+FED9 > E3 # compat
+FEDA > E3 # compat
+FEDB > E3 # compat
+FEDC > E3 # compat
+FEDD > E4 # compat
+FEDE > E4 # compat
+FEDF > E4 # compat
+FEE0 > E4 # compat
+FEE1 > E5 # compat
+FEE2 > E5 # compat
+FEE3 > E5 # compat
+FEE4 > E5 # compat
+FEE5 > E6 # compat
+FEE6 > E6 # compat
+FEE7 > E6 # compat
+FEE8 > E6 # compat
+FEE9 > E7 # compat
+FEEA > E7 # compat
+FEEB > E7 # compat
+FEEC > E7 # compat
+FEED > E8 # compat
+FEEE > E8 # compat
+FEEF > E9 # compat
+FEF0 > E9 # compat
+FEF1 > EA # compat
+FEF2 > EA # compat
+FEF3 > EA # compat
+FEF4 > EA # compat
+FEF5 > E4 C2 # compat
+FEF6 > E4 C2 # compat
+FEF7 > E4 C3 # compat
+FEF8 > E4 C3 # compat
+FEF9 > E4 C5 # compat
+FEFA > E4 C5 # compat
+FEFB > E4 C7 # compat
+FEFC > E4 C7 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 213
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A4 > A4
+00AD > AD
+037E > 3B
+060C > AC
+061B > BB
+061F > BF
+0621 > C1
+0622 > C2
+0623 > C3
+0624 > C4
+0625 > C5
+0626 > C6
+0627 > C7 /
+     N 3
+     0653 > C2
+     0654 > C3
+     0655 > C5
+     .
+0628 > C8
+0629 > C9
+062A > CA
+062B > CB
+062C > CC
+062D > CD
+062E > CE
+062F > CF
+0630 > D0
+0631 > D1
+0632 > D2
+0633 > D3
+0634 > D4
+0635 > D5
+0636 > D6
+0637 > D7
+0638 > D8
+0639 > D9
+063A > DA
+0640 > E0
+0641 > E1
+0642 > E2
+0643 > E3
+0644 > E4
+0645 > E5
+0646 > E6
+0647 > E7
+0648 > E8 /
+     N 1
+     0654 > C4
+     .
+0649 > E9
+064A > EA /
+     N 1
+     0654 > C6
+     .
+064B > EB
+064C > EC
+064D > ED
+064E > EE
+064F > EF
+0650 > F0
+0651 > F1
+0652 > F2
+1FEF > 60
+.
+
+NFD
+/
+N 211
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A4 > 00A4
+AC > 060C
+AD > 00AD
+BB > 061B
+BF > 061F
+C1 > 0621
+C2 > 0627 0653
+C3 > 0627 0654
+C4 > 0648 0654
+C5 > 0627 0655
+C6 > 064A 0654
+C7 > 0627
+C8 > 0628
+C9 > 0629
+CA > 062A
+CB > 062B
+CC > 062C
+CD > 062D
+CE > 062E
+CF > 062F
+D0 > 0630
+D1 > 0631
+D2 > 0632
+D3 > 0633
+D4 > 0634
+D5 > 0635
+D6 > 0636
+D7 > 0637
+D8 > 0638
+D9 > 0639
+DA > 063A
+E0 > 0640
+E1 > 0641
+E2 > 0642
+E3 > 0643
+E4 > 0644
+E5 > 0645
+E6 > 0646
+E7 > 0647
+E8 > 0648
+E9 > 0649
+EA > 064A
+EB > 064B
+EC > 064C
+ED > 064D
+EE > 064E
+EF > 064F
+F0 > 0650
+F1 > 0651
+F2 > 0652
+.
+
+NFC
+/
+N 211
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A4 > 00A4
+AC > 060C
+AD > 00AD
+BB > 061B
+BF > 061F
+C1 > 0621
+C2 > 0622
+C3 > 0623
+C4 > 0624
+C5 > 0625
+C6 > 0626
+C7 > 0627
+C8 > 0628
+C9 > 0629
+CA > 062A
+CB > 062B
+CC > 062C
+CD > 062D
+CE > 062E
+CF > 062F
+D0 > 0630
+D1 > 0631
+D2 > 0632
+D3 > 0633
+D4 > 0634
+D5 > 0635
+D6 > 0636
+D7 > 0637
+D8 > 0638
+D9 > 0639
+DA > 063A
+E0 > 0640
+E1 > 0641
+E2 > 0642
+E3 > 0643
+E4 > 0644
+E5 > 0645
+E6 > 0646
+E7 > 0647
+E8 > 0648
+E9 > 0649
+EA > 064A
+EB > 064B
+EC > 064C
+ED > 064D
+EE > 064E
+EF > 064F
+F0 > 0650
+F1 > 0651
+F2 > 0652
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-6.cset b/data/iso-8859-6.cset
new file mode 100644 (file)
index 0000000..702df8d
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-6
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 E0A1 . N A1 A1 A1 00 00 00 # <unused>
+A2 E0A2 . N A2 A2 A2 00 00 00 # <unused>
+A3 E0A3 . N A3 A3 A3 00 00 00 # <unused>
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 E0A5 . N A5 A5 A5 00 00 00 # <unused>
+A6 E0A6 . N A6 A6 A6 00 00 00 # <unused>
+A7 E0A7 . N A7 A7 A7 00 00 00 # <unused>
+A8 E0A8 . N A8 A8 A8 00 00 00 # <unused>
+A9 E0A9 . N A9 A9 A9 00 00 00 # <unused>
+AA E0AA . N AA AA AA 00 00 00 # <unused>
+AB E0AB . N AB AB AB 00 00 00 # <unused>
+AC 060C - Y AC AC AC 00 00 00 # ARABIC COMMA
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE E0AE . N AE AE AE 00 00 00 # <unused>
+AF E0AF . N AF AF AF 00 00 00 # <unused>
+B0 E0B0 . N B0 B0 B0 00 00 00 # <unused>
+B1 E0B1 . N B1 B1 B1 00 00 00 # <unused>
+B2 E0B2 . N B2 B2 B2 00 00 00 # <unused>
+B3 E0B3 . N B3 B3 B3 00 00 00 # <unused>
+B4 E0B4 . N B4 B4 B4 00 00 00 # <unused>
+B5 E0B5 . N B5 B5 B5 00 00 00 # <unused>
+B6 E0B6 . N B6 B6 B6 00 00 00 # <unused>
+B7 E0B7 . N B7 B7 B7 00 00 00 # <unused>
+B8 E0B8 . N B8 B8 B8 00 00 00 # <unused>
+B9 E0B9 . N B9 B9 B9 00 00 00 # <unused>
+BA E0BA . N BA BA BA 00 00 00 # <unused>
+BB 061B - Y BB BB BB 00 00 00 # ARABIC SEMICOLON
+BC E0BC . N BC BC BC 00 00 00 # <unused>
+BD E0BD . N BD BD BD 00 00 00 # <unused>
+BE E0BE . N BE BE BE 00 00 00 # <unused>
+BF 061F - Y BF BF BF 00 00 00 # ARABIC QUESTION MARK
+C0 E0C0 . N C0 C0 C0 00 00 00 # <unused>
+C1 0621 L Y C1 C1 C1 C1 C1 C1 # ARABIC LETTER HAMZA
+C2 0622 L Y C2 C2 C2 C7 C7 C7 # ARABIC LETTER ALEF WITH MADDA ABOVE
+C3 0623 L Y C3 C3 C3 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA ABOVE
+C4 0624 L Y C4 C4 C4 E8 E8 E8 # ARABIC LETTER WAW WITH HAMZA ABOVE
+C5 0625 L Y C5 C5 C5 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA BELOW
+C6 0626 L Y C6 C6 C6 EA EA EA # ARABIC LETTER YEH WITH HAMZA ABOVE
+C7 0627 L Y C7 C7 C7 C7 C7 C7 # ARABIC LETTER ALEF
+C8 0628 L Y C8 C8 C8 C8 C8 C8 # ARABIC LETTER BEH
+C9 0629 L Y C9 C9 C9 C9 C9 C9 # ARABIC LETTER TEH MARBUTA
+CA 062A L Y CA CA CA CA CA CA # ARABIC LETTER TEH
+CB 062B L Y CB CB CB CB CB CB # ARABIC LETTER THEH
+CC 062C L Y CC CC CC CC CC CC # ARABIC LETTER JEEM
+CD 062D L Y CD CD CD CD CD CD # ARABIC LETTER HAH
+CE 062E L Y CE CE CE CE CE CE # ARABIC LETTER KHAH
+CF 062F L Y CF CF CF CF CF CF # ARABIC LETTER DAL
+D0 0630 L Y D0 D0 D0 D0 D0 D0 # ARABIC LETTER THAL
+D1 0631 L Y D1 D1 D1 D1 D1 D1 # ARABIC LETTER REH
+D2 0632 L Y D2 D2 D2 D2 D2 D2 # ARABIC LETTER ZAIN
+D3 0633 L Y D3 D3 D3 D3 D3 D3 # ARABIC LETTER SEEN
+D4 0634 L Y D4 D4 D4 D4 D4 D4 # ARABIC LETTER SHEEN
+D5 0635 L Y D5 D5 D5 D5 D5 D5 # ARABIC LETTER SAD
+D6 0636 L Y D6 D6 D6 D6 D6 D6 # ARABIC LETTER DAD
+D7 0637 L Y D7 D7 D7 D7 D7 D7 # ARABIC LETTER TAH
+D8 0638 L Y D8 D8 D8 D8 D8 D8 # ARABIC LETTER ZAH
+D9 0639 L Y D9 D9 D9 D9 D9 D9 # ARABIC LETTER AIN
+DA 063A L Y DA DA DA DA DA DA # ARABIC LETTER GHAIN
+DB E0DB . N DB DB DB 00 00 00 # <unused>
+DC E0DC . N DC DC DC 00 00 00 # <unused>
+DD E0DD . N DD DD DD 00 00 00 # <unused>
+DE E0DE . N DE DE DE 00 00 00 # <unused>
+DF E0DF . N DF DF DF 00 00 00 # <unused>
+E0 0640 l Y E0 E0 E0 E0 E0 E0 # ARABIC TATWEEL
+E1 0641 L Y E1 E1 E1 E1 E1 E1 # ARABIC LETTER FEH
+E2 0642 L Y E2 E2 E2 E2 E2 E2 # ARABIC LETTER QAF
+E3 0643 L Y E3 E3 E3 E3 E3 E3 # ARABIC LETTER KAF
+E4 0644 L Y E4 E4 E4 E4 E4 E4 # ARABIC LETTER LAM
+E5 0645 L Y E5 E5 E5 E5 E5 E5 # ARABIC LETTER MEEM
+E6 0646 L Y E6 E6 E6 E6 E6 E6 # ARABIC LETTER NOON
+E7 0647 L Y E7 E7 E7 E7 E7 E7 # ARABIC LETTER HEH
+E8 0648 L Y E8 E8 E8 E8 E8 E8 # ARABIC LETTER WAW
+E9 0649 L Y E9 E9 E9 E9 E9 E9 # ARABIC LETTER ALEF MAKSURA
+EA 064A L Y EA EA EA EA EA EA # ARABIC LETTER YEH
+EB 064B M M EB EB EB 00 00 00 # ARABIC FATHATAN
+EC 064C M M EC EC EC 00 00 00 # ARABIC DAMMATAN
+ED 064D M M ED ED ED 00 00 00 # ARABIC KASRATAN
+EE 064E M M EE EE EE 00 00 00 # ARABIC FATHA
+EF 064F M M EF EF EF 00 00 00 # ARABIC DAMMA
+F0 0650 M M F0 F0 F0 00 00 00 # ARABIC KASRA
+F1 0651 M M F1 F1 F1 00 00 00 # ARABIC SHADDA
+F2 0652 M M F2 F2 F2 00 00 00 # ARABIC SUKUN
+F3 E0F3 . N F3 F3 F3 00 00 00 # <unused>
+F4 E0F4 . N F4 F4 F4 00 00 00 # <unused>
+F5 E0F5 . N F5 F5 F5 00 00 00 # <unused>
+F6 E0F6 . N F6 F6 F6 00 00 00 # <unused>
+F7 E0F7 . N F7 F7 F7 00 00 00 # <unused>
+F8 E0F8 . N F8 F8 F8 00 00 00 # <unused>
+F9 E0F9 . N F9 F9 F9 00 00 00 # <unused>
+FA E0FA . N FA FA FA 00 00 00 # <unused>
+FB E0FB . N FB FB FB 00 00 00 # <unused>
+FC E0FC . N FC FC FC 00 00 00 # <unused>
+FD E0FD . N FD FD FD 00 00 00 # <unused>
+FE E0FE . N FE FE FE 00 00 00 # <unused>
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/iso-8859-7.cmap b/data/iso-8859-7.cmap
new file mode 100644 (file)
index 0000000..76407a3
--- /dev/null
@@ -0,0 +1,2145 @@
+INTERNAL
+/
+N 1220
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A6 > A6
+00A7 > A7
+00A8 > A8 /
+     N 1
+     0301 > B5
+     .
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B7 > B7
+00BB > BB
+00BD > BD
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037A > AA
+037E > 3B
+0384 > B4
+0385 > B5
+0386 > B6
+0387 > B7
+0388 > B8
+0389 > B9
+038A > BA
+038C > BC
+038E > BE
+038F > BF
+0390 > C0
+0391 > C1 /
+     N 1
+     0301 > B6
+     .
+0392 > C2
+0393 > C3
+0394 > C4
+0395 > C5 /
+     N 1
+     0301 > B8
+     .
+0396 > C6
+0397 > C7 /
+     N 1
+     0301 > B9
+     .
+0398 > C8
+0399 > C9 /
+     N 2
+     0301 > BA
+     0308 > DA
+     .
+039A > CA
+039B > CB
+039C > CC
+039D > CD
+039E > CE
+039F > CF /
+     N 1
+     0301 > BC
+     .
+03A0 > D0
+03A1 > D1
+03A3 > D3
+03A4 > D4
+03A5 > D5 /
+     N 2
+     0301 > BE
+     0308 > DB
+     .
+03A6 > D6
+03A7 > D7
+03A8 > D8
+03A9 > D9 /
+     N 1
+     0301 > BF
+     .
+03AA > DA
+03AB > DB
+03AC > DC
+03AD > DD
+03AE > DE
+03AF > DF
+03B0 > E0
+03B1 > E1 /
+     N 1
+     0301 > DC
+     .
+03B2 > E2
+03B3 > E3
+03B4 > E4
+03B5 > E5 /
+     N 1
+     0301 > DD
+     .
+03B6 > E6
+03B7 > E7 /
+     N 1
+     0301 > DE
+     .
+03B8 > E8
+03B9 > E9 /
+     N 2
+     0301 > DF
+     0308 > FA /
+          N 1
+          0301 > C0
+          .
+     .
+03BA > EA
+03BB > EB
+03BC > EC
+03BD > ED
+03BE > EE
+03BF > EF /
+     N 1
+     0301 > FC
+     .
+03C0 > F0
+03C1 > F1
+03C2 > F2
+03C3 > F3
+03C4 > F4
+03C5 > F5 /
+     N 2
+     0301 > FD
+     0308 > FB /
+          N 1
+          0301 > E0
+          .
+     .
+03C6 > F6
+03C7 > F7
+03C8 > F8
+03C9 > F9 /
+     N 1
+     0301 > FE
+     .
+03CA > FA /
+     N 1
+     0301 > C0
+     .
+03CB > FB /
+     N 1
+     0301 > E0
+     .
+03CC > FC
+03CD > FD
+03CE > FE
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1F00 > E1 # unsup: 03B1 0313
+1F01 > E1 # unsup: 03B1 0314
+1F02 > E1 # unsup: 03B1 0313 0300
+1F03 > E1 # unsup: 03B1 0314 0300
+1F04 > E1 # unsup: 03B1 0313 0301
+1F05 > E1 # unsup: 03B1 0314 0301
+1F06 > E1 # unsup: 03B1 0313 0342
+1F07 > E1 # unsup: 03B1 0314 0342
+1F08 > C1 # unsup: 0391 0313
+1F09 > C1 # unsup: 0391 0314
+1F0A > C1 # unsup: 0391 0313 0300
+1F0B > C1 # unsup: 0391 0314 0300
+1F0C > C1 # unsup: 0391 0313 0301
+1F0D > C1 # unsup: 0391 0314 0301
+1F0E > C1 # unsup: 0391 0313 0342
+1F0F > C1 # unsup: 0391 0314 0342
+1F10 > E5 # unsup: 03B5 0313
+1F11 > E5 # unsup: 03B5 0314
+1F12 > E5 # unsup: 03B5 0313 0300
+1F13 > E5 # unsup: 03B5 0314 0300
+1F14 > E5 # unsup: 03B5 0313 0301
+1F15 > E5 # unsup: 03B5 0314 0301
+1F18 > C5 # unsup: 0395 0313
+1F19 > C5 # unsup: 0395 0314
+1F1A > C5 # unsup: 0395 0313 0300
+1F1B > C5 # unsup: 0395 0314 0300
+1F1C > C5 # unsup: 0395 0313 0301
+1F1D > C5 # unsup: 0395 0314 0301
+1F20 > E7 # unsup: 03B7 0313
+1F21 > E7 # unsup: 03B7 0314
+1F22 > E7 # unsup: 03B7 0313 0300
+1F23 > E7 # unsup: 03B7 0314 0300
+1F24 > E7 # unsup: 03B7 0313 0301
+1F25 > E7 # unsup: 03B7 0314 0301
+1F26 > E7 # unsup: 03B7 0313 0342
+1F27 > E7 # unsup: 03B7 0314 0342
+1F28 > C7 # unsup: 0397 0313
+1F29 > C7 # unsup: 0397 0314
+1F2A > C7 # unsup: 0397 0313 0300
+1F2B > C7 # unsup: 0397 0314 0300
+1F2C > C7 # unsup: 0397 0313 0301
+1F2D > C7 # unsup: 0397 0314 0301
+1F2E > C7 # unsup: 0397 0313 0342
+1F2F > C7 # unsup: 0397 0314 0342
+1F30 > E9 # unsup: 03B9 0313
+1F31 > E9 # unsup: 03B9 0314
+1F32 > E9 # unsup: 03B9 0313 0300
+1F33 > E9 # unsup: 03B9 0314 0300
+1F34 > E9 # unsup: 03B9 0313 0301
+1F35 > E9 # unsup: 03B9 0314 0301
+1F36 > E9 # unsup: 03B9 0313 0342
+1F37 > E9 # unsup: 03B9 0314 0342
+1F38 > C9 # unsup: 0399 0313
+1F39 > C9 # unsup: 0399 0314
+1F3A > C9 # unsup: 0399 0313 0300
+1F3B > C9 # unsup: 0399 0314 0300
+1F3C > C9 # unsup: 0399 0313 0301
+1F3D > C9 # unsup: 0399 0314 0301
+1F3E > C9 # unsup: 0399 0313 0342
+1F3F > C9 # unsup: 0399 0314 0342
+1F40 > EF # unsup: 03BF 0313
+1F41 > EF # unsup: 03BF 0314
+1F42 > EF # unsup: 03BF 0313 0300
+1F43 > EF # unsup: 03BF 0314 0300
+1F44 > EF # unsup: 03BF 0313 0301
+1F45 > EF # unsup: 03BF 0314 0301
+1F48 > CF # unsup: 039F 0313
+1F49 > CF # unsup: 039F 0314
+1F4A > CF # unsup: 039F 0313 0300
+1F4B > CF # unsup: 039F 0314 0300
+1F4C > CF # unsup: 039F 0313 0301
+1F4D > CF # unsup: 039F 0314 0301
+1F50 > F5 # unsup: 03C5 0313
+1F51 > F5 # unsup: 03C5 0314
+1F52 > F5 # unsup: 03C5 0313 0300
+1F53 > F5 # unsup: 03C5 0314 0300
+1F54 > F5 # unsup: 03C5 0313 0301
+1F55 > F5 # unsup: 03C5 0314 0301
+1F56 > F5 # unsup: 03C5 0313 0342
+1F57 > F5 # unsup: 03C5 0314 0342
+1F59 > D5 # unsup: 03A5 0314
+1F5B > D5 # unsup: 03A5 0314 0300
+1F5D > D5 # unsup: 03A5 0314 0301
+1F5F > D5 # unsup: 03A5 0314 0342
+1F60 > F9 # unsup: 03C9 0313
+1F61 > F9 # unsup: 03C9 0314
+1F62 > F9 # unsup: 03C9 0313 0300
+1F63 > F9 # unsup: 03C9 0314 0300
+1F64 > F9 # unsup: 03C9 0313 0301
+1F65 > F9 # unsup: 03C9 0314 0301
+1F66 > F9 # unsup: 03C9 0313 0342
+1F67 > F9 # unsup: 03C9 0314 0342
+1F68 > D9 # unsup: 03A9 0313
+1F69 > D9 # unsup: 03A9 0314
+1F6A > D9 # unsup: 03A9 0313 0300
+1F6B > D9 # unsup: 03A9 0314 0300
+1F6C > D9 # unsup: 03A9 0313 0301
+1F6D > D9 # unsup: 03A9 0314 0301
+1F6E > D9 # unsup: 03A9 0313 0342
+1F6F > D9 # unsup: 03A9 0314 0342
+1F70 > E1 # unsup: 03B1 0300
+1F71 > DC
+1F72 > E5 # unsup: 03B5 0300
+1F73 > DD
+1F74 > E7 # unsup: 03B7 0300
+1F75 > DE
+1F76 > E9 # unsup: 03B9 0300
+1F77 > DF
+1F78 > EF # unsup: 03BF 0300
+1F79 > FC
+1F7A > F5 # unsup: 03C5 0300
+1F7B > FD
+1F7C > F9 # unsup: 03C9 0300
+1F7D > FE
+1F80 > E1 # unsup: 03B1 0313 0345
+1F81 > E1 # unsup: 03B1 0314 0345
+1F82 > E1 # unsup: 03B1 0313 0300 0345
+1F83 > E1 # unsup: 03B1 0314 0300 0345
+1F84 > E1 # unsup: 03B1 0313 0301 0345
+1F85 > E1 # unsup: 03B1 0314 0301 0345
+1F86 > E1 # unsup: 03B1 0313 0342 0345
+1F87 > E1 # unsup: 03B1 0314 0342 0345
+1F88 > C1 # unsup: 0391 0313 0345
+1F89 > C1 # unsup: 0391 0314 0345
+1F8A > C1 # unsup: 0391 0313 0300 0345
+1F8B > C1 # unsup: 0391 0314 0300 0345
+1F8C > C1 # unsup: 0391 0313 0301 0345
+1F8D > C1 # unsup: 0391 0314 0301 0345
+1F8E > C1 # unsup: 0391 0313 0342 0345
+1F8F > C1 # unsup: 0391 0314 0342 0345
+1F90 > E7 # unsup: 03B7 0313 0345
+1F91 > E7 # unsup: 03B7 0314 0345
+1F92 > E7 # unsup: 03B7 0313 0300 0345
+1F93 > E7 # unsup: 03B7 0314 0300 0345
+1F94 > E7 # unsup: 03B7 0313 0301 0345
+1F95 > E7 # unsup: 03B7 0314 0301 0345
+1F96 > E7 # unsup: 03B7 0313 0342 0345
+1F97 > E7 # unsup: 03B7 0314 0342 0345
+1F98 > C7 # unsup: 0397 0313 0345
+1F99 > C7 # unsup: 0397 0314 0345
+1F9A > C7 # unsup: 0397 0313 0300 0345
+1F9B > C7 # unsup: 0397 0314 0300 0345
+1F9C > C7 # unsup: 0397 0313 0301 0345
+1F9D > C7 # unsup: 0397 0314 0301 0345
+1F9E > C7 # unsup: 0397 0313 0342 0345
+1F9F > C7 # unsup: 0397 0314 0342 0345
+1FA0 > F9 # unsup: 03C9 0313 0345
+1FA1 > F9 # unsup: 03C9 0314 0345
+1FA2 > F9 # unsup: 03C9 0313 0300 0345
+1FA3 > F9 # unsup: 03C9 0314 0300 0345
+1FA4 > F9 # unsup: 03C9 0313 0301 0345
+1FA5 > F9 # unsup: 03C9 0314 0301 0345
+1FA6 > F9 # unsup: 03C9 0313 0342 0345
+1FA7 > F9 # unsup: 03C9 0314 0342 0345
+1FA8 > D9 # unsup: 03A9 0313 0345
+1FA9 > D9 # unsup: 03A9 0314 0345
+1FAA > D9 # unsup: 03A9 0313 0300 0345
+1FAB > D9 # unsup: 03A9 0314 0300 0345
+1FAC > D9 # unsup: 03A9 0313 0301 0345
+1FAD > D9 # unsup: 03A9 0314 0301 0345
+1FAE > D9 # unsup: 03A9 0313 0342 0345
+1FAF > D9 # unsup: 03A9 0314 0342 0345
+1FB0 > E1 # unsup: 03B1 0306
+1FB1 > E1 # unsup: 03B1 0304
+1FB2 > E1 # unsup: 03B1 0300 0345
+1FB3 > E1 # unsup: 03B1 0345
+1FB4 > DC # unsup: 03AC 0345
+1FB6 > E1 # unsup: 03B1 0342
+1FB7 > E1 # unsup: 03B1 0342 0345
+1FB8 > C1 # unsup: 0391 0306
+1FB9 > C1 # unsup: 0391 0304
+1FBA > C1 # unsup: 0391 0300
+1FBB > B6
+1FBC > C1 # unsup: 0391 0345
+1FBE > E9
+1FC1 > A8 # unsup: 00A8 0342
+1FC2 > E7 # unsup: 03B7 0300 0345
+1FC3 > E7 # unsup: 03B7 0345
+1FC4 > DE # unsup: 03AE 0345
+1FC6 > E7 # unsup: 03B7 0342
+1FC7 > E7 # unsup: 03B7 0342 0345
+1FC8 > C5 # unsup: 0395 0300
+1FC9 > B8
+1FCA > C7 # unsup: 0397 0300
+1FCB > B9
+1FCC > C7 # unsup: 0397 0345
+1FD0 > E9 # unsup: 03B9 0306
+1FD1 > E9 # unsup: 03B9 0304
+1FD2 > FA # unsup: 03CA 0300
+1FD3 > C0
+1FD6 > E9 # unsup: 03B9 0342
+1FD7 > FA # unsup: 03CA 0342
+1FD8 > C9 # unsup: 0399 0306
+1FD9 > C9 # unsup: 0399 0304
+1FDA > C9 # unsup: 0399 0300
+1FDB > BA
+1FE0 > F5 # unsup: 03C5 0306
+1FE1 > F5 # unsup: 03C5 0304
+1FE2 > FB # unsup: 03CB 0300
+1FE3 > E0
+1FE4 > F1 # unsup: 03C1 0313
+1FE5 > F1 # unsup: 03C1 0314
+1FE6 > F5 # unsup: 03C5 0342
+1FE7 > FB # unsup: 03CB 0342
+1FE8 > D5 # unsup: 03A5 0306
+1FE9 > D5 # unsup: 03A5 0304
+1FEA > D5 # unsup: 03A5 0300
+1FEB > BE
+1FEC > D1 # unsup: 03A1 0314
+1FED > A8 # unsup: 00A8 0300
+1FEE > B5
+1FEF > 60
+1FF2 > F9 # unsup: 03C9 0300 0345
+1FF3 > F9 # unsup: 03C9 0345
+1FF4 > FE # unsup: 03CE 0345
+1FF6 > F9 # unsup: 03C9 0342
+1FF7 > F9 # unsup: 03C9 0342 0345
+1FF8 > CF # unsup: 039F 0300
+1FF9 > BC
+1FFA > D9 # unsup: 03A9 0300
+1FFB > BF
+1FFC > D9 # unsup: 03A9 0345
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2015 > AF
+2018 > A1
+2019 > A2
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+20AC > A4
+20AF > A5
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE4 > A6 # compat
+.
+
+STRICT
+/
+N 274
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A3 > A3
+00A6 > A6
+00A7 > A7
+00A8 > A8 /
+     N 1
+     0301 > B5
+     .
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B7 > B7
+00BB > BB
+00BD > BD
+037A > AA
+037E > 3B
+0384 > B4
+0385 > B5
+0386 > B6
+0387 > B7
+0388 > B8
+0389 > B9
+038A > BA
+038C > BC
+038E > BE
+038F > BF
+0390 > C0
+0391 > C1 /
+     N 1
+     0301 > B6
+     .
+0392 > C2
+0393 > C3
+0394 > C4
+0395 > C5 /
+     N 1
+     0301 > B8
+     .
+0396 > C6
+0397 > C7 /
+     N 1
+     0301 > B9
+     .
+0398 > C8
+0399 > C9 /
+     N 2
+     0301 > BA
+     0308 > DA
+     .
+039A > CA
+039B > CB
+039C > CC
+039D > CD
+039E > CE
+039F > CF /
+     N 1
+     0301 > BC
+     .
+03A0 > D0
+03A1 > D1
+03A3 > D3
+03A4 > D4
+03A5 > D5 /
+     N 2
+     0301 > BE
+     0308 > DB
+     .
+03A6 > D6
+03A7 > D7
+03A8 > D8
+03A9 > D9 /
+     N 1
+     0301 > BF
+     .
+03AA > DA
+03AB > DB
+03AC > DC
+03AD > DD
+03AE > DE
+03AF > DF
+03B0 > E0
+03B1 > E1 /
+     N 1
+     0301 > DC
+     .
+03B2 > E2
+03B3 > E3
+03B4 > E4
+03B5 > E5 /
+     N 1
+     0301 > DD
+     .
+03B6 > E6
+03B7 > E7 /
+     N 1
+     0301 > DE
+     .
+03B8 > E8
+03B9 > E9 /
+     N 2
+     0301 > DF
+     0308 > FA /
+          N 1
+          0301 > C0
+          .
+     .
+03BA > EA
+03BB > EB
+03BC > EC
+03BD > ED
+03BE > EE
+03BF > EF /
+     N 1
+     0301 > FC
+     .
+03C0 > F0
+03C1 > F1
+03C2 > F2
+03C3 > F3
+03C4 > F4
+03C5 > F5 /
+     N 2
+     0301 > FD
+     0308 > FB /
+          N 1
+          0301 > E0
+          .
+     .
+03C6 > F6
+03C7 > F7
+03C8 > F8
+03C9 > F9 /
+     N 1
+     0301 > FE
+     .
+03CA > FA /
+     N 1
+     0301 > C0
+     .
+03CB > FB /
+     N 1
+     0301 > E0
+     .
+03CC > FC
+03CD > FD
+03CE > FE
+1F71 > DC
+1F73 > DD
+1F75 > DE
+1F77 > DF
+1F79 > FC
+1F7B > FD
+1F7D > FE
+1FBB > B6
+1FBE > E9
+1FC9 > B8
+1FCB > B9
+1FD3 > C0
+1FDB > BA
+1FE3 > E0
+1FEB > BE
+1FEE > B5
+1FEF > 60
+1FF9 > BC
+1FFB > BF
+2015 > AF
+2018 > A1
+2019 > A2
+20AC > A4
+20AF > A5
+.
+
+NFD
+/
+N 253
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 2018
+A2 > 2019
+A3 > 00A3
+A4 > 20AC
+A5 > 20AF
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 037A
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AF > 2015
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 0384
+B5 > 00A8 0301
+B6 > 0391 0301
+B7 > 00B7
+B8 > 0395 0301
+B9 > 0397 0301
+BA > 0399 0301
+BB > 00BB
+BC > 039F 0301
+BD > 00BD
+BE > 03A5 0301
+BF > 03A9 0301
+C0 > 03B9 0308 0301
+C1 > 0391
+C2 > 0392
+C3 > 0393
+C4 > 0394
+C5 > 0395
+C6 > 0396
+C7 > 0397
+C8 > 0398
+C9 > 0399
+CA > 039A
+CB > 039B
+CC > 039C
+CD > 039D
+CE > 039E
+CF > 039F
+D0 > 03A0
+D1 > 03A1
+D3 > 03A3
+D4 > 03A4
+D5 > 03A5
+D6 > 03A6
+D7 > 03A7
+D8 > 03A8
+D9 > 03A9
+DA > 0399 0308
+DB > 03A5 0308
+DC > 03B1 0301
+DD > 03B5 0301
+DE > 03B7 0301
+DF > 03B9 0301
+E0 > 03C5 0308 0301
+E1 > 03B1
+E2 > 03B2
+E3 > 03B3
+E4 > 03B4
+E5 > 03B5
+E6 > 03B6
+E7 > 03B7
+E8 > 03B8
+E9 > 03B9
+EA > 03BA
+EB > 03BB
+EC > 03BC
+ED > 03BD
+EE > 03BE
+EF > 03BF
+F0 > 03C0
+F1 > 03C1
+F2 > 03C2
+F3 > 03C3
+F4 > 03C4
+F5 > 03C5
+F6 > 03C6
+F7 > 03C7
+F8 > 03C8
+F9 > 03C9
+FA > 03B9 0308
+FB > 03C5 0308
+FC > 03BF 0301
+FD > 03C5 0301
+FE > 03C9 0301
+.
+
+NFC
+/
+N 253
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 2018
+A2 > 2019
+A3 > 00A3
+A4 > 20AC
+A5 > 20AF
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 037A
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AF > 2015
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 0384
+B5 > 0385
+B6 > 0386
+B7 > 00B7
+B8 > 0388
+B9 > 0389
+BA > 038A
+BB > 00BB
+BC > 038C
+BD > 00BD
+BE > 038E
+BF > 038F
+C0 > 0390
+C1 > 0391
+C2 > 0392
+C3 > 0393
+C4 > 0394
+C5 > 0395
+C6 > 0396
+C7 > 0397
+C8 > 0398
+C9 > 0399
+CA > 039A
+CB > 039B
+CC > 039C
+CD > 039D
+CE > 039E
+CF > 039F
+D0 > 03A0
+D1 > 03A1
+D3 > 03A3
+D4 > 03A4
+D5 > 03A5
+D6 > 03A6
+D7 > 03A7
+D8 > 03A8
+D9 > 03A9
+DA > 03AA
+DB > 03AB
+DC > 03AC
+DD > 03AD
+DE > 03AE
+DF > 03AF
+E0 > 03B0
+E1 > 03B1
+E2 > 03B2
+E3 > 03B3
+E4 > 03B4
+E5 > 03B5
+E6 > 03B6
+E7 > 03B7
+E8 > 03B8
+E9 > 03B9
+EA > 03BA
+EB > 03BB
+EC > 03BC
+ED > 03BD
+EE > 03BE
+EF > 03BF
+F0 > 03C0
+F1 > 03C1
+F2 > 03C2
+F3 > 03C3
+F4 > 03C4
+F5 > 03C5
+F6 > 03C6
+F7 > 03C7
+F8 > 03C8
+F9 > 03C9
+FA > 03CA
+FB > 03CB
+FC > 03CC
+FD > 03CD
+FE > 03CE
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-7.cset b/data/iso-8859-7.cset
new file mode 100644 (file)
index 0000000..99022e4
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-7
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 2018 - Y A1 A1 A1 00 00 00 # LEFT SINGLE QUOTATION MARK
+A2 2019 - Y A2 A2 A2 00 00 00 # RIGHT SINGLE QUOTATION MARK
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN
+A5 20AF - Y A5 A5 A5 00 00 00 # DRACHMA SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 037A M Y AA AA AA 00 00 00 # GREEK YPOGEGRAMMENI
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE E0AE . N AE AE AE 00 00 00 # <unused>
+AF 2015 - Y AF AF AF 00 00 00 # HORIZONTAL BAR
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 0384 - Y B4 B4 B4 00 00 00 # GREEK TONOS
+B5 0385 - Y B5 B5 B5 00 00 00 # GREEK DIALYTIKA TONOS
+B6 0386 L Y B6 DC B6 C1 2A 00 # GREEK CAPITAL LETTER ALPHA WITH TONOS
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 0388 L Y B8 DD B8 C5 2A 00 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+B9 0389 L Y B9 DE B9 C7 2A 00 # GREEK CAPITAL LETTER ETA WITH TONOS
+BA 038A L Y BA DF BA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH TONOS
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 038C L Y BC FC BC CF 2A 00 # GREEK CAPITAL LETTER OMICRON WITH TONOS
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 038E L Y BE FD BE D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH TONOS
+BF 038F L Y BF FE BF D9 2A 00 # GREEK CAPITAL LETTER OMEGA WITH TONOS
+C0 0390 L Y C0 C0 C0 E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+C1 0391 L Y C1 E1 C1 C1 2A 00 # GREEK CAPITAL LETTER ALPHA
+C2 0392 L Y C2 E2 C2 C2 E2 E2 # GREEK CAPITAL LETTER BETA
+C3 0393 L Y C3 E3 C3 C3 E3 E3 # GREEK CAPITAL LETTER GAMMA
+C4 0394 L Y C4 E4 C4 C4 E4 E4 # GREEK CAPITAL LETTER DELTA
+C5 0395 L Y C5 E5 C5 C5 2A 00 # GREEK CAPITAL LETTER EPSILON
+C6 0396 L Y C6 E6 C6 C6 E6 E6 # GREEK CAPITAL LETTER ZETA
+C7 0397 L Y C7 E7 C7 C7 2A 00 # GREEK CAPITAL LETTER ETA
+C8 0398 L Y C8 E8 C8 C8 E8 E8 # GREEK CAPITAL LETTER THETA
+C9 0399 L Y C9 E9 C9 C9 2A 00 # GREEK CAPITAL LETTER IOTA
+CA 039A L Y CA EA CA CA EA EA # GREEK CAPITAL LETTER KAPPA
+CB 039B L Y CB EB CB CB EB EB # GREEK CAPITAL LETTER LAMDA
+CC 039C L Y CC EC CC CC EC EC # GREEK CAPITAL LETTER MU
+CD 039D L Y CD ED CD CD ED ED # GREEK CAPITAL LETTER NU
+CE 039E L Y CE EE CE CE EE EE # GREEK CAPITAL LETTER XI
+CF 039F L Y CF EF CF CF 2A 00 # GREEK CAPITAL LETTER OMICRON
+D0 03A0 L Y D0 F0 D0 D0 F0 F0 # GREEK CAPITAL LETTER PI
+D1 03A1 L Y D1 F1 D1 D1 F1 F1 # GREEK CAPITAL LETTER RHO
+D2 E0D2 . N D2 D2 D2 00 00 00 # <unused>
+D3 03A3 L Y D3 F3 D3 D3 F3 F3 # GREEK CAPITAL LETTER SIGMA
+D4 03A4 L Y D4 F4 D4 D4 F4 F4 # GREEK CAPITAL LETTER TAU
+D5 03A5 L Y D5 F5 D5 D5 2A 00 # GREEK CAPITAL LETTER UPSILON
+D6 03A6 L Y D6 F6 D6 D6 F6 F6 # GREEK CAPITAL LETTER PHI
+D7 03A7 L Y D7 F7 D7 D7 F7 F7 # GREEK CAPITAL LETTER CHI
+D8 03A8 L Y D8 F8 D8 D8 F8 F8 # GREEK CAPITAL LETTER PSI
+D9 03A9 L Y D9 F9 D9 D9 2A 00 # GREEK CAPITAL LETTER OMEGA
+DA 03AA L Y DA FA DA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+DB 03AB L Y DB FB DB D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+DC 03AC L Y B6 DC B6 E1 2A 00 # GREEK SMALL LETTER ALPHA WITH TONOS
+DD 03AD L Y B8 DD B8 E5 2A 00 # GREEK SMALL LETTER EPSILON WITH TONOS
+DE 03AE L Y B9 DE B9 E7 2A 00 # GREEK SMALL LETTER ETA WITH TONOS
+DF 03AF L Y BA DF BA E9 2A 00 # GREEK SMALL LETTER IOTA WITH TONOS
+E0 03B0 L Y E0 E0 E0 F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+E1 03B1 L Y C1 E1 C1 E1 2A 00 # GREEK SMALL LETTER ALPHA
+E2 03B2 L Y C2 E2 C2 E2 E2 E2 # GREEK SMALL LETTER BETA
+E3 03B3 L Y C3 E3 C3 E3 E3 E3 # GREEK SMALL LETTER GAMMA
+E4 03B4 L Y C4 E4 C4 E4 E4 E4 # GREEK SMALL LETTER DELTA
+E5 03B5 L Y C5 E5 C5 E5 2A 00 # GREEK SMALL LETTER EPSILON
+E6 03B6 L Y C6 E6 C6 E6 E6 E6 # GREEK SMALL LETTER ZETA
+E7 03B7 L Y C7 E7 C7 E7 2A 00 # GREEK SMALL LETTER ETA
+E8 03B8 L Y C8 E8 C8 E8 E8 E8 # GREEK SMALL LETTER THETA
+E9 03B9 L Y C9 E9 C9 E9 2A 00 # GREEK SMALL LETTER IOTA
+EA 03BA L Y CA EA CA EA EA EA # GREEK SMALL LETTER KAPPA
+EB 03BB L Y CB EB CB EB EB EB # GREEK SMALL LETTER LAMDA
+EC 03BC L Y CC EC CC EC EC EC # GREEK SMALL LETTER MU
+ED 03BD L Y CD ED CD ED ED ED # GREEK SMALL LETTER NU
+EE 03BE L Y CE EE CE EE EE EE # GREEK SMALL LETTER XI
+EF 03BF L Y CF EF CF EF 2A 00 # GREEK SMALL LETTER OMICRON
+F0 03C0 L Y D0 F0 D0 F0 F0 F0 # GREEK SMALL LETTER PI
+F1 03C1 L Y D1 F1 D1 F1 F1 F1 # GREEK SMALL LETTER RHO
+F2 03C2 L Y D3 F2 D3 F2 F2 F2 # GREEK SMALL LETTER FINAL SIGMA
+F3 03C3 L Y D3 F3 D3 F3 F3 F3 # GREEK SMALL LETTER SIGMA
+F4 03C4 L Y D4 F4 D4 F4 F4 F4 # GREEK SMALL LETTER TAU
+F5 03C5 L Y D5 F5 D5 F5 2A 00 # GREEK SMALL LETTER UPSILON
+F6 03C6 L Y D6 F6 D6 F6 F6 F6 # GREEK SMALL LETTER PHI
+F7 03C7 L Y D7 F7 D7 F7 F7 F7 # GREEK SMALL LETTER CHI
+F8 03C8 L Y D8 F8 D8 F8 F8 F8 # GREEK SMALL LETTER PSI
+F9 03C9 L Y D9 F9 D9 F9 2A 00 # GREEK SMALL LETTER OMEGA
+FA 03CA L Y DA FA DA E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+FB 03CB L Y DB FB DB F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+FC 03CC L Y BC FC BC EF 2A 00 # GREEK SMALL LETTER OMICRON WITH TONOS
+FD 03CD L Y BE FD BE F5 2A 00 # GREEK SMALL LETTER UPSILON WITH TONOS
+FE 03CE L Y BF FE BF F9 2A 00 # GREEK SMALL LETTER OMEGA WITH TONOS
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/iso-8859-8.cmap b/data/iso-8859-8.cmap
new file mode 100644 (file)
index 0000000..675821c
--- /dev/null
@@ -0,0 +1,1483 @@
+INTERNAL
+/
+N 1017
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D7 > AA
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F7 > BA
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+05D0 > E0
+05D1 > E1
+05D2 > E2
+05D3 > E3
+05D4 > E4
+05D5 > E5
+05D6 > E6
+05D7 > E7
+05D8 > E8
+05D9 > E9
+05DA > EA
+05DB > EB
+05DC > EC
+05DD > ED
+05DE > EE
+05DF > EF
+05E0 > F0
+05E1 > F1
+05E2 > F2
+05E3 > F3
+05E4 > F4
+05E5 > F5
+05E6 > F6
+05E7 > F7
+05E8 > F8
+05E9 > F9
+05EA > FA
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+200E > FD
+200F > FE
+2017 > DF
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB1D > E9 # unsup: 05D9 05B4
+FB20 > F2 # compat
+FB21 > E0 # compat
+FB22 > E3 # compat
+FB23 > E4 # compat
+FB24 > EB # compat
+FB25 > EC # compat
+FB26 > ED # compat
+FB27 > F8 # compat
+FB28 > FA # compat
+FB29 > 2B # compat
+FB2A > F9 # unsup: 05E9 05C1
+FB2B > F9 # unsup: 05E9 05C2
+FB2C > F9 # unsup: 05E9 05BC 05C1
+FB2D > F9 # unsup: 05E9 05BC 05C2
+FB2E > E0 # unsup: 05D0 05B7
+FB2F > E0 # unsup: 05D0 05B8
+FB30 > E0 # unsup: 05D0 05BC
+FB31 > E1 # unsup: 05D1 05BC
+FB32 > E2 # unsup: 05D2 05BC
+FB33 > E3 # unsup: 05D3 05BC
+FB34 > E4 # unsup: 05D4 05BC
+FB35 > E5 # unsup: 05D5 05BC
+FB36 > E6 # unsup: 05D6 05BC
+FB38 > E8 # unsup: 05D8 05BC
+FB39 > E9 # unsup: 05D9 05BC
+FB3A > EA # unsup: 05DA 05BC
+FB3B > EB # unsup: 05DB 05BC
+FB3C > EC # unsup: 05DC 05BC
+FB3E > EE # unsup: 05DE 05BC
+FB40 > F0 # unsup: 05E0 05BC
+FB41 > F1 # unsup: 05E1 05BC
+FB43 > F3 # unsup: 05E3 05BC
+FB44 > F4 # unsup: 05E4 05BC
+FB46 > F6 # unsup: 05E6 05BC
+FB47 > F7 # unsup: 05E7 05BC
+FB48 > F8 # unsup: 05E8 05BC
+FB49 > F9 # unsup: 05E9 05BC
+FB4A > FA # unsup: 05EA 05BC
+FB4B > E5 # unsup: 05D5 05B9
+FB4C > E1 # unsup: 05D1 05BF
+FB4D > EB # unsup: 05DB 05BF
+FB4E > F4 # unsup: 05E4 05BF
+FB4F > E0 EC # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 224
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00D7 > AA
+00F7 > BA
+037E > 3B
+0387 > B7
+05D0 > E0
+05D1 > E1
+05D2 > E2
+05D3 > E3
+05D4 > E4
+05D5 > E5
+05D6 > E6
+05D7 > E7
+05D8 > E8
+05D9 > E9
+05DA > EA
+05DB > EB
+05DC > EC
+05DD > ED
+05DE > EE
+05DF > EF
+05E0 > F0
+05E1 > F1
+05E2 > F2
+05E3 > F3
+05E4 > F4
+05E5 > F5
+05E6 > F6
+05E7 > F7
+05E8 > F8
+05E9 > F9
+05EA > FA
+1FEF > 60
+1FFD > B4
+200E > FD
+200F > FE
+2017 > DF
+.
+
+NFD
+/
+N 220
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00D7
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00F7
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+DF > 2017
+E0 > 05D0
+E1 > 05D1
+E2 > 05D2
+E3 > 05D3
+E4 > 05D4
+E5 > 05D5
+E6 > 05D6
+E7 > 05D7
+E8 > 05D8
+E9 > 05D9
+EA > 05DA
+EB > 05DB
+EC > 05DC
+ED > 05DD
+EE > 05DE
+EF > 05DF
+F0 > 05E0
+F1 > 05E1
+F2 > 05E2
+F3 > 05E3
+F4 > 05E4
+F5 > 05E5
+F6 > 05E6
+F7 > 05E7
+F8 > 05E8
+F9 > 05E9
+FA > 05EA
+FD > 200E
+FE > 200F
+.
+
+NFC
+= NFD
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-8.cset b/data/iso-8859-8.cset
new file mode 100644 (file)
index 0000000..7c80280
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-8
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 E0A1 . N A1 A1 A1 00 00 00 # <unused>
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00D7 - Y AA AA AA 00 00 00 # MULTIPLICATION SIGN
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00F7 - Y BA BA BA 00 00 00 # DIVISION SIGN
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF E0BF . N BF BF BF 00 00 00 # <unused>
+C0 E0C0 . N C0 C0 C0 00 00 00 # <unused>
+C1 E0C1 . N C1 C1 C1 00 00 00 # <unused>
+C2 E0C2 . N C2 C2 C2 00 00 00 # <unused>
+C3 E0C3 . N C3 C3 C3 00 00 00 # <unused>
+C4 E0C4 . N C4 C4 C4 00 00 00 # <unused>
+C5 E0C5 . N C5 C5 C5 00 00 00 # <unused>
+C6 E0C6 . N C6 C6 C6 00 00 00 # <unused>
+C7 E0C7 . N C7 C7 C7 00 00 00 # <unused>
+C8 E0C8 . N C8 C8 C8 00 00 00 # <unused>
+C9 E0C9 . N C9 C9 C9 00 00 00 # <unused>
+CA E0CA . N CA CA CA 00 00 00 # <unused>
+CB E0CB . N CB CB CB 00 00 00 # <unused>
+CC E0CC . N CC CC CC 00 00 00 # <unused>
+CD E0CD . N CD CD CD 00 00 00 # <unused>
+CE E0CE . N CE CE CE 00 00 00 # <unused>
+CF E0CF . N CF CF CF 00 00 00 # <unused>
+D0 E0D0 . N D0 D0 D0 00 00 00 # <unused>
+D1 E0D1 . N D1 D1 D1 00 00 00 # <unused>
+D2 E0D2 . N D2 D2 D2 00 00 00 # <unused>
+D3 E0D3 . N D3 D3 D3 00 00 00 # <unused>
+D4 E0D4 . N D4 D4 D4 00 00 00 # <unused>
+D5 E0D5 . N D5 D5 D5 00 00 00 # <unused>
+D6 E0D6 . N D6 D6 D6 00 00 00 # <unused>
+D7 E0D7 . N D7 D7 D7 00 00 00 # <unused>
+D8 E0D8 . N D8 D8 D8 00 00 00 # <unused>
+D9 E0D9 . N D9 D9 D9 00 00 00 # <unused>
+DA E0DA . N DA DA DA 00 00 00 # <unused>
+DB E0DB . N DB DB DB 00 00 00 # <unused>
+DC E0DC . N DC DC DC 00 00 00 # <unused>
+DD E0DD . N DD DD DD 00 00 00 # <unused>
+DE E0DE . N DE DE DE 00 00 00 # <unused>
+DF 2017 - Y DF DF DF 00 00 00 # DOUBLE LOW LINE
+E0 05D0 L Y E0 E0 E0 E0 E0 E0 # HEBREW LETTER ALEF
+E1 05D1 L Y E1 E1 E1 E1 E1 E1 # HEBREW LETTER BET
+E2 05D2 L Y E2 E2 E2 E2 E2 E2 # HEBREW LETTER GIMEL
+E3 05D3 L Y E3 E3 E3 E3 E3 E3 # HEBREW LETTER DALET
+E4 05D4 L Y E4 E4 E4 E4 E4 E4 # HEBREW LETTER HE
+E5 05D5 L Y E5 E5 E5 E5 E5 E5 # HEBREW LETTER VAV
+E6 05D6 L Y E6 E6 E6 E6 E6 E6 # HEBREW LETTER ZAYIN
+E7 05D7 L Y E7 E7 E7 E7 E7 E7 # HEBREW LETTER HET
+E8 05D8 L Y E8 E8 E8 E8 E8 E8 # HEBREW LETTER TET
+E9 05D9 L Y E9 E9 E9 E9 E9 E9 # HEBREW LETTER YOD
+EA 05DA L Y EA EA EA EA EA EA # HEBREW LETTER FINAL KAF
+EB 05DB L Y EB EB EB EB EB EB # HEBREW LETTER KAF
+EC 05DC L Y EC EC EC EC EC EC # HEBREW LETTER LAMED
+ED 05DD L Y ED ED ED ED ED ED # HEBREW LETTER FINAL MEM
+EE 05DE L Y EE EE EE EE EE EE # HEBREW LETTER MEM
+EF 05DF L Y EF EF EF EF EF EF # HEBREW LETTER FINAL NUN
+F0 05E0 L Y F0 F0 F0 F0 F0 F0 # HEBREW LETTER NUN
+F1 05E1 L Y F1 F1 F1 F1 F1 F1 # HEBREW LETTER SAMEKH
+F2 05E2 L Y F2 F2 F2 F2 F2 F2 # HEBREW LETTER AYIN
+F3 05E3 L Y F3 F3 F3 F3 F3 F3 # HEBREW LETTER FINAL PE
+F4 05E4 L Y F4 F4 F4 F4 F4 F4 # HEBREW LETTER PE
+F5 05E5 L Y F5 F5 F5 F5 F5 F5 # HEBREW LETTER FINAL TSADI
+F6 05E6 L Y F6 F6 F6 F6 F6 F6 # HEBREW LETTER TSADI
+F7 05E7 L Y F7 F7 F7 F7 F7 F7 # HEBREW LETTER QOF
+F8 05E8 L Y F8 F8 F8 F8 F8 F8 # HEBREW LETTER RESH
+F9 05E9 L Y F9 F9 F9 F9 F9 F9 # HEBREW LETTER SHIN
+FA 05EA L Y FA FA FA FA FA FA # HEBREW LETTER TAV
+FB E0FB . N FB FB FB 00 00 00 # <unused>
+FC E0FC . N FC FC FC 00 00 00 # <unused>
+FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK
+FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK
+FF E0FF . N FF FF FF 00 00 00 # <unused>
diff --git a/data/iso-8859-9.cmap b/data/iso-8859-9.cmap
new file mode 100644 (file)
index 0000000..9f9049e
--- /dev/null
@@ -0,0 +1,1937 @@
+INTERNAL
+/
+N 954
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0306 > D0
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > DD
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     0327 > DE
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0306 > F0
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     0327 > FE
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DD > 59 # unsup: 0059 0301
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FD > 79 # unsup: 0079 0301
+00FF > FF
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > D0
+011F > F0
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > DD
+0131 > FD
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C B7 # compat
+0140 > 6C B7 # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > DE
+015F > FE
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > DC # unsup: 00DC 0304
+01D6 > FC # unsup: 00FC 0304
+01D7 > DC # unsup: 00DC 0301
+01D8 > FC # unsup: 00FC 0301
+01D9 > DC # unsup: 00DC 030C
+01DA > FC # unsup: 00FC 030C
+01DB > DC # unsup: 00DC 0300
+01DC > FC # unsup: 00FC 0300
+01DE > C4 # unsup: 00C4 0304
+01DF > E4 # unsup: 00E4 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > C6 # unsup: 00C6 0304
+01E3 > E6 # unsup: 00E6 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > C5 # unsup: 00C5 0301
+01FB > E5 # unsup: 00E5 0301
+01FC > C6 # unsup: 00C6 0301
+01FD > E6 # unsup: 00E6 0301
+01FE > D8 # unsup: 00D8 0301
+01FF > F8 # unsup: 00F8 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > D6 # unsup: 00D6 0304
+022B > F6 # unsup: 00F6 0304
+022C > D5 # unsup: 00D5 0304
+022D > F5 # unsup: 00F5 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0385 > A8 # unsup: 00A8 0301
+0387 > B7
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > C7 # unsup: 00C7 0301
+1E09 > E7 # unsup: 00E7 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > CF # unsup: 00CF 0301
+1E2F > EF # unsup: 00EF 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > D5 # unsup: 00D5 0301
+1E4D > F5 # unsup: 00F5 0301
+1E4E > D5 # unsup: 00D5 0308
+1E4F > F5 # unsup: 00F5 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > C2 # unsup: 00C2 0301
+1EA5 > E2 # unsup: 00E2 0301
+1EA6 > C2 # unsup: 00C2 0300
+1EA7 > E2 # unsup: 00E2 0300
+1EA8 > C2 # unsup: 00C2 0309
+1EA9 > E2 # unsup: 00E2 0309
+1EAA > C2 # unsup: 00C2 0303
+1EAB > E2 # unsup: 00E2 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > CA # unsup: 00CA 0301
+1EBF > EA # unsup: 00EA 0301
+1EC0 > CA # unsup: 00CA 0300
+1EC1 > EA # unsup: 00EA 0300
+1EC2 > CA # unsup: 00CA 0309
+1EC3 > EA # unsup: 00EA 0309
+1EC4 > CA # unsup: 00CA 0303
+1EC5 > EA # unsup: 00EA 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > D4 # unsup: 00D4 0301
+1ED1 > F4 # unsup: 00F4 0301
+1ED2 > D4 # unsup: 00D4 0300
+1ED3 > F4 # unsup: 00F4 0300
+1ED4 > D4 # unsup: 00D4 0309
+1ED5 > F4 # unsup: 00F4 0309
+1ED6 > D4 # unsup: 00D4 0303
+1ED7 > F4 # unsup: 00F4 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FC1 > A8 # unsup: 00A8 0342
+1FED > A8 # unsup: 00A8 0300
+1FEE > A8 # unsup: 00A8 0301
+1FEF > 60
+1FFD > B4
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+FFE0 > A2 # compat
+FFE1 > A3 # compat
+FFE2 > AC # compat
+FFE3 > AF # compat
+FFE4 > A6 # compat
+FFE5 > A5 # compat
+.
+
+STRICT
+/
+N 260
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41 /
+     N 6
+     0300 > C0
+     0301 > C1
+     0302 > C2
+     0303 > C3
+     0308 > C4
+     030A > C5
+     .
+0042 > 42
+0043 > 43 /
+     N 1
+     0327 > C7
+     .
+0044 > 44
+0045 > 45 /
+     N 4
+     0300 > C8
+     0301 > C9
+     0302 > CA
+     0308 > CB
+     .
+0046 > 46
+0047 > 47 /
+     N 1
+     0306 > D0
+     .
+0048 > 48
+0049 > 49 /
+     N 5
+     0300 > CC
+     0301 > CD
+     0302 > CE
+     0307 > DD
+     0308 > CF
+     .
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E /
+     N 1
+     0303 > D1
+     .
+004F > 4F /
+     N 5
+     0300 > D2
+     0301 > D3
+     0302 > D4
+     0303 > D5
+     0308 > D6
+     .
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53 /
+     N 1
+     0327 > DE
+     .
+0054 > 54
+0055 > 55 /
+     N 4
+     0300 > D9
+     0301 > DA
+     0302 > DB
+     0308 > DC
+     .
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61 /
+     N 6
+     0300 > E0
+     0301 > E1
+     0302 > E2
+     0303 > E3
+     0308 > E4
+     030A > E5
+     .
+0062 > 62
+0063 > 63 /
+     N 1
+     0327 > E7
+     .
+0064 > 64
+0065 > 65 /
+     N 4
+     0300 > E8
+     0301 > E9
+     0302 > EA
+     0308 > EB
+     .
+0066 > 66
+0067 > 67 /
+     N 1
+     0306 > F0
+     .
+0068 > 68
+0069 > 69 /
+     N 4
+     0300 > EC
+     0301 > ED
+     0302 > EE
+     0308 > EF
+     .
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E /
+     N 1
+     0303 > F1
+     .
+006F > 6F /
+     N 5
+     0300 > F2
+     0301 > F3
+     0302 > F4
+     0303 > F5
+     0308 > F6
+     .
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73 /
+     N 1
+     0327 > FE
+     .
+0074 > 74
+0075 > 75 /
+     N 4
+     0300 > F9
+     0301 > FA
+     0302 > FB
+     0308 > FC
+     .
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79 /
+     N 1
+     0308 > FF
+     .
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+0080 > 80
+0081 > 81
+0082 > 82
+0083 > 83
+0084 > 84
+0085 > 85
+0086 > 86
+0087 > 87
+0088 > 88
+0089 > 89
+008A > 8A
+008B > 8B
+008C > 8C
+008D > 8D
+008E > 8E
+008F > 8F
+0090 > 90
+0091 > 91
+0092 > 92
+0093 > 93
+0094 > 94
+0095 > 95
+0096 > 96
+0097 > 97
+0098 > 98
+0099 > 99
+009A > 9A
+009B > 9B
+009C > 9C
+009D > 9D
+009E > 9E
+009F > 9F
+00A0 > A0
+00A1 > A1
+00A2 > A2
+00A3 > A3
+00A4 > A4
+00A5 > A5
+00A6 > A6
+00A7 > A7
+00A8 > A8
+00A9 > A9
+00AA > AA
+00AB > AB
+00AC > AC
+00AD > AD
+00AE > AE
+00AF > AF
+00B0 > B0
+00B1 > B1
+00B2 > B2
+00B3 > B3
+00B4 > B4
+00B5 > B5
+00B6 > B6
+00B7 > B7
+00B8 > B8
+00B9 > B9
+00BA > BA
+00BB > BB
+00BC > BC
+00BD > BD
+00BE > BE
+00BF > BF
+00C0 > C0
+00C1 > C1
+00C2 > C2
+00C3 > C3
+00C4 > C4
+00C5 > C5
+00C6 > C6
+00C7 > C7
+00C8 > C8
+00C9 > C9
+00CA > CA
+00CB > CB
+00CC > CC
+00CD > CD
+00CE > CE
+00CF > CF
+00D1 > D1
+00D2 > D2
+00D3 > D3
+00D4 > D4
+00D5 > D5
+00D6 > D6
+00D7 > D7
+00D8 > D8
+00D9 > D9
+00DA > DA
+00DB > DB
+00DC > DC
+00DF > DF
+00E0 > E0
+00E1 > E1
+00E2 > E2
+00E3 > E3
+00E4 > E4
+00E5 > E5
+00E6 > E6
+00E7 > E7
+00E8 > E8
+00E9 > E9
+00EA > EA
+00EB > EB
+00EC > EC
+00ED > ED
+00EE > EE
+00EF > EF
+00F1 > F1
+00F2 > F2
+00F3 > F3
+00F4 > F4
+00F5 > F5
+00F6 > F6
+00F7 > F7
+00F8 > F8
+00F9 > F9
+00FA > FA
+00FB > FB
+00FC > FC
+00FF > FF
+011E > D0
+011F > F0
+0130 > DD
+0131 > FD
+015E > DE
+015F > FE
+037E > 3B
+0387 > B7
+1FEF > 60
+1FFD > B4
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 0041 0300
+C1 > 0041 0301
+C2 > 0041 0302
+C3 > 0041 0303
+C4 > 0041 0308
+C5 > 0041 030A
+C6 > 00C6
+C7 > 0043 0327
+C8 > 0045 0300
+C9 > 0045 0301
+CA > 0045 0302
+CB > 0045 0308
+CC > 0049 0300
+CD > 0049 0301
+CE > 0049 0302
+CF > 0049 0308
+D0 > 0047 0306
+D1 > 004E 0303
+D2 > 004F 0300
+D3 > 004F 0301
+D4 > 004F 0302
+D5 > 004F 0303
+D6 > 004F 0308
+D7 > 00D7
+D8 > 00D8
+D9 > 0055 0300
+DA > 0055 0301
+DB > 0055 0302
+DC > 0055 0308
+DD > 0049 0307
+DE > 0053 0327
+DF > 00DF
+E0 > 0061 0300
+E1 > 0061 0301
+E2 > 0061 0302
+E3 > 0061 0303
+E4 > 0061 0308
+E5 > 0061 030A
+E6 > 00E6
+E7 > 0063 0327
+E8 > 0065 0300
+E9 > 0065 0301
+EA > 0065 0302
+EB > 0065 0308
+EC > 0069 0300
+ED > 0069 0301
+EE > 0069 0302
+EF > 0069 0308
+F0 > 0067 0306
+F1 > 006E 0303
+F2 > 006F 0300
+F3 > 006F 0301
+F4 > 006F 0302
+F5 > 006F 0303
+F6 > 006F 0308
+F7 > 00F7
+F8 > 00F8
+F9 > 0075 0300
+FA > 0075 0301
+FB > 0075 0302
+FC > 0075 0308
+FD > 0131
+FE > 0073 0327
+FF > 0079 0308
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 0080
+81 > 0081
+82 > 0082
+83 > 0083
+84 > 0084
+85 > 0085
+86 > 0086
+87 > 0087
+88 > 0088
+89 > 0089
+8A > 008A
+8B > 008B
+8C > 008C
+8D > 008D
+8E > 008E
+8F > 008F
+90 > 0090
+91 > 0091
+92 > 0092
+93 > 0093
+94 > 0094
+95 > 0095
+96 > 0096
+97 > 0097
+98 > 0098
+99 > 0099
+9A > 009A
+9B > 009B
+9C > 009C
+9D > 009D
+9E > 009E
+9F > 009F
+A0 > 00A0
+A1 > 00A1
+A2 > 00A2
+A3 > 00A3
+A4 > 00A4
+A5 > 00A5
+A6 > 00A6
+A7 > 00A7
+A8 > 00A8
+A9 > 00A9
+AA > 00AA
+AB > 00AB
+AC > 00AC
+AD > 00AD
+AE > 00AE
+AF > 00AF
+B0 > 00B0
+B1 > 00B1
+B2 > 00B2
+B3 > 00B3
+B4 > 00B4
+B5 > 00B5
+B6 > 00B6
+B7 > 00B7
+B8 > 00B8
+B9 > 00B9
+BA > 00BA
+BB > 00BB
+BC > 00BC
+BD > 00BD
+BE > 00BE
+BF > 00BF
+C0 > 00C0
+C1 > 00C1
+C2 > 00C2
+C3 > 00C3
+C4 > 00C4
+C5 > 00C5
+C6 > 00C6
+C7 > 00C7
+C8 > 00C8
+C9 > 00C9
+CA > 00CA
+CB > 00CB
+CC > 00CC
+CD > 00CD
+CE > 00CE
+CF > 00CF
+D0 > 011E
+D1 > 00D1
+D2 > 00D2
+D3 > 00D3
+D4 > 00D4
+D5 > 00D5
+D6 > 00D6
+D7 > 00D7
+D8 > 00D8
+D9 > 00D9
+DA > 00DA
+DB > 00DB
+DC > 00DC
+DD > 0130
+DE > 015E
+DF > 00DF
+E0 > 00E0
+E1 > 00E1
+E2 > 00E2
+E3 > 00E3
+E4 > 00E4
+E5 > 00E5
+E6 > 00E6
+E7 > 00E7
+E8 > 00E8
+E9 > 00E9
+EA > 00EA
+EB > 00EB
+EC > 00EC
+ED > 00ED
+EE > 00EE
+EF > 00EF
+F0 > 011F
+F1 > 00F1
+F2 > 00F2
+F3 > 00F3
+F4 > 00F4
+F5 > 00F5
+F6 > 00F6
+F7 > 00F7
+F8 > 00F8
+F9 > 00F9
+FA > 00FA
+FB > 00FB
+FC > 00FC
+FD > 0131
+FE > 015F
+FF > 00FF
+.
+
+COMP
+= NFC
+.
diff --git a/data/iso-8859-9.cset b/data/iso-8859-9.cset
new file mode 100644 (file)
index 0000000..755241b
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= iso-8859-9
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 0080 . N 80 80 80 00 00 00 # <unused control>
+81 0081 . N 81 81 81 00 00 00 # <unused control>
+82 0082 . N 82 82 82 00 00 00 # <unused control>
+83 0083 . N 83 83 83 00 00 00 # <unused control>
+84 0084 . N 84 84 84 00 00 00 # <unused control>
+85 0085 . N 85 85 85 00 00 00 # <unused control>
+86 0086 . N 86 86 86 00 00 00 # <unused control>
+87 0087 . N 87 87 87 00 00 00 # <unused control>
+88 0088 . N 88 88 88 00 00 00 # <unused control>
+89 0089 . N 89 89 89 00 00 00 # <unused control>
+8A 008A . N 8A 8A 8A 00 00 00 # <unused control>
+8B 008B . N 8B 8B 8B 00 00 00 # <unused control>
+8C 008C . N 8C 8C 8C 00 00 00 # <unused control>
+8D 008D . N 8D 8D 8D 00 00 00 # <unused control>
+8E 008E . N 8E 8E 8E 00 00 00 # <unused control>
+8F 008F . N 8F 8F 8F 00 00 00 # <unused control>
+90 0090 . N 90 90 90 00 00 00 # <unused control>
+91 0091 . N 91 91 91 00 00 00 # <unused control>
+92 0092 . N 92 92 92 00 00 00 # <unused control>
+93 0093 . N 93 93 93 00 00 00 # <unused control>
+94 0094 . N 94 94 94 00 00 00 # <unused control>
+95 0095 . N 95 95 95 00 00 00 # <unused control>
+96 0096 . N 96 96 96 00 00 00 # <unused control>
+97 0097 . N 97 97 97 00 00 00 # <unused control>
+98 0098 . N 98 98 98 00 00 00 # <unused control>
+99 0099 . N 99 99 99 00 00 00 # <unused control>
+9A 009A . N 9A 9A 9A 00 00 00 # <unused control>
+9B 009B . N 9B 9B 9B 00 00 00 # <unused control>
+9C 009C . N 9C 9C 9C 00 00 00 # <unused control>
+9D 009D . N 9D 9D 9D 00 00 00 # <unused control>
+9E 009E . N 9E 9E 9E 00 00 00 # <unused control>
+9F 009F . N 9F 9F 9F 00 00 00 # <unused control>
+A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE
+A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK
+A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN
+A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN
+A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN
+A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN
+A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR
+A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN
+A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS
+A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN
+AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR
+AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN
+AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN
+AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN
+AF 00AF - Y AF AF AF 00 00 00 # MACRON
+B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN
+B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN
+B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO
+B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE
+B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT
+B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN
+B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN
+B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT
+B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA
+B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE
+BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR
+BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER
+BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF
+BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS
+BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK
+C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE
+C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE
+C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE
+C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS
+C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE
+C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE
+C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA
+C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE
+C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE
+CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS
+CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE
+CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE
+CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS
+D0 011E L Y D0 F0 D0 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE
+D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE
+D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE
+D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE
+D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE
+D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS
+D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN
+D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE
+D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE
+DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE
+DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS
+DD 0130 L Y DD 69 DD 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+DE 015E L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA
+DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S
+E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE
+E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE
+E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE
+E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS
+E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE
+E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE
+E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA
+E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE
+E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE
+EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS
+EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE
+ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE
+EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS
+F0 011F L Y D0 F0 D0 67 67 67 # LATIN SMALL LETTER G WITH BREVE
+F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE
+F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE
+F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE
+F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE
+F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS
+F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN
+F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE
+F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE
+FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE
+FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS
+FD 0131 L Y 49 FD 49 FD FD FD # LATIN SMALL LETTER DOTLESS I
+FE 015F L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA
+FF 00FF L Y FF FF FF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/data/koi8-r.cmap b/data/koi8-r.cmap
new file mode 100644 (file)
index 0000000..0157f93
--- /dev/null
@@ -0,0 +1,1857 @@
+INTERNAL
+/
+N 1039
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > 9A
+00A9 > BF
+00B0 > 9C
+00B2 > 9D
+00B7 > 9E
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F7 > 9F
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C 9E # compat
+0140 > 6C 9E # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > 9E
+0400 > E5 # unsup: 0415 0300
+0401 > B3
+0403 > E7 # unsup: 0413 0301
+040C > EB # unsup: 041A 0301
+040D > E9 # unsup: 0418 0300
+040E > F5 # unsup: 0423 0306
+0410 > E1
+0411 > E2
+0412 > F7
+0413 > E7
+0414 > E4
+0415 > E5 /
+     N 1
+     0308 > B3
+     .
+0416 > F6
+0417 > FA
+0418 > E9 /
+     N 1
+     0306 > EA
+     .
+0419 > EA
+041A > EB
+041B > EC
+041C > ED
+041D > EE
+041E > EF
+041F > F0
+0420 > F2
+0421 > F3
+0422 > F4
+0423 > F5
+0424 > E6
+0425 > E8
+0426 > E3
+0427 > FE
+0428 > FB
+0429 > FD
+042A > FF
+042B > F9
+042C > F8
+042D > FC
+042E > E0
+042F > F1
+0430 > C1
+0431 > C2
+0432 > D7
+0433 > C7
+0434 > C4
+0435 > C5 /
+     N 1
+     0308 > A3
+     .
+0436 > D6
+0437 > DA
+0438 > C9 /
+     N 1
+     0306 > CA
+     .
+0439 > CA
+043A > CB
+043B > CC
+043C > CD
+043D > CE
+043E > CF
+043F > D0
+0440 > D2
+0441 > D3
+0442 > D4
+0443 > D5
+0444 > C6
+0445 > C8
+0446 > C3
+0447 > DE
+0448 > DB
+0449 > DD
+044A > DF
+044B > D9
+044C > D8
+044D > DC
+044E > C0
+044F > D1
+0450 > C5 # unsup: 0435 0300
+0451 > A3
+0453 > C7 # unsup: 0433 0301
+045C > CB # unsup: 043A 0301
+045D > C9 # unsup: 0438 0300
+045E > D5 # unsup: 0443 0306
+04C1 > F6 # unsup: 0416 0306
+04C2 > D6 # unsup: 0436 0306
+04D0 > E1 # unsup: 0410 0306
+04D1 > C1 # unsup: 0430 0306
+04D2 > E1 # unsup: 0410 0308
+04D3 > C1 # unsup: 0430 0308
+04D6 > E5 # unsup: 0415 0306
+04D7 > C5 # unsup: 0435 0306
+04DC > F6 # unsup: 0416 0308
+04DD > D6 # unsup: 0436 0308
+04DE > FA # unsup: 0417 0308
+04DF > DA # unsup: 0437 0308
+04E2 > E9 # unsup: 0418 0304
+04E3 > C9 # unsup: 0438 0304
+04E4 > E9 # unsup: 0418 0308
+04E5 > C9 # unsup: 0438 0308
+04E6 > EF # unsup: 041E 0308
+04E7 > CF # unsup: 043E 0308
+04EC > FC # unsup: 042D 0308
+04ED > DC # unsup: 044D 0308
+04EE > F5 # unsup: 0423 0304
+04EF > D5 # unsup: 0443 0304
+04F0 > F5 # unsup: 0423 0308
+04F1 > D5 # unsup: 0443 0308
+04F2 > F5 # unsup: 0423 030B
+04F3 > D5 # unsup: 0443 030B
+04F4 > FE # unsup: 0427 0308
+04F5 > DE # unsup: 0447 0308
+04F8 > F9 # unsup: 042B 0308
+04F9 > D9 # unsup: 044B 0308
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+221A > 96
+2248 > 97
+2264 > 98
+2265 > 99
+2320 > 93
+2321 > 9B
+2500 > 80
+2502 > 81
+250C > 82
+2510 > 83
+2514 > 84
+2518 > 85
+251C > 86
+2524 > 87
+252C > 88
+2534 > 89
+253C > 8A
+2550 > A0
+2551 > A1
+2552 > A2
+2553 > A4
+2554 > A5
+2555 > A6
+2556 > A7
+2557 > A8
+2558 > A9
+2559 > AA
+255A > AB
+255B > AC
+255C > AD
+255D > AE
+255E > AF
+255F > B0
+2560 > B1
+2561 > B2
+2562 > B4
+2563 > B5
+2564 > B6
+2565 > B7
+2566 > B8
+2567 > B9
+2568 > BA
+2569 > BB
+256A > BC
+256B > BD
+256C > BE
+2580 > 8B
+2584 > 8C
+2588 > 8D
+258C > 8E
+2590 > 8F
+2591 > 90
+2592 > 91
+2593 > 92
+25A0 > 94
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > 9A
+00A9 > BF
+00B0 > 9C
+00B2 > 9D
+00B7 > 9E
+00F7 > 9F
+037E > 3B
+0387 > 9E
+0401 > B3
+0410 > E1
+0411 > E2
+0412 > F7
+0413 > E7
+0414 > E4
+0415 > E5 /
+     N 1
+     0308 > B3
+     .
+0416 > F6
+0417 > FA
+0418 > E9 /
+     N 1
+     0306 > EA
+     .
+0419 > EA
+041A > EB
+041B > EC
+041C > ED
+041D > EE
+041E > EF
+041F > F0
+0420 > F2
+0421 > F3
+0422 > F4
+0423 > F5
+0424 > E6
+0425 > E8
+0426 > E3
+0427 > FE
+0428 > FB
+0429 > FD
+042A > FF
+042B > F9
+042C > F8
+042D > FC
+042E > E0
+042F > F1
+0430 > C1
+0431 > C2
+0432 > D7
+0433 > C7
+0434 > C4
+0435 > C5 /
+     N 1
+     0308 > A3
+     .
+0436 > D6
+0437 > DA
+0438 > C9 /
+     N 1
+     0306 > CA
+     .
+0439 > CA
+043A > CB
+043B > CC
+043C > CD
+043D > CE
+043E > CF
+043F > D0
+0440 > D2
+0441 > D3
+0442 > D4
+0443 > D5
+0444 > C6
+0445 > C8
+0446 > C3
+0447 > DE
+0448 > DB
+0449 > DD
+044A > DF
+044B > D9
+044C > D8
+044D > DC
+044E > C0
+044F > D1
+0451 > A3
+1FEF > 60
+2022 > 95
+221A > 96
+2248 > 97
+2264 > 98
+2265 > 99
+2320 > 93
+2321 > 9B
+2500 > 80
+2502 > 81
+250C > 82
+2510 > 83
+2514 > 84
+2518 > 85
+251C > 86
+2524 > 87
+252C > 88
+2534 > 89
+253C > 8A
+2550 > A0
+2551 > A1
+2552 > A2
+2553 > A4
+2554 > A5
+2555 > A6
+2556 > A7
+2557 > A8
+2558 > A9
+2559 > AA
+255A > AB
+255B > AC
+255C > AD
+255D > AE
+255E > AF
+255F > B0
+2560 > B1
+2561 > B2
+2562 > B4
+2563 > B5
+2564 > B6
+2565 > B7
+2566 > B8
+2567 > B9
+2568 > BA
+2569 > BB
+256A > BC
+256B > BD
+256C > BE
+2580 > 8B
+2584 > 8C
+2588 > 8D
+258C > 8E
+2590 > 8F
+2591 > 90
+2592 > 91
+2593 > 92
+25A0 > 94
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 2500
+81 > 2502
+82 > 250C
+83 > 2510
+84 > 2514
+85 > 2518
+86 > 251C
+87 > 2524
+88 > 252C
+89 > 2534
+8A > 253C
+8B > 2580
+8C > 2584
+8D > 2588
+8E > 258C
+8F > 2590
+90 > 2591
+91 > 2592
+92 > 2593
+93 > 2320
+94 > 25A0
+95 > 2022
+96 > 221A
+97 > 2248
+98 > 2264
+99 > 2265
+9A > 00A0
+9B > 2321
+9C > 00B0
+9D > 00B2
+9E > 00B7
+9F > 00F7
+A0 > 2550
+A1 > 2551
+A2 > 2552
+A3 > 0435 0308
+A4 > 2553
+A5 > 2554
+A6 > 2555
+A7 > 2556
+A8 > 2557
+A9 > 2558
+AA > 2559
+AB > 255A
+AC > 255B
+AD > 255C
+AE > 255D
+AF > 255E
+B0 > 255F
+B1 > 2560
+B2 > 2561
+B3 > 0415 0308
+B4 > 2562
+B5 > 2563
+B6 > 2564
+B7 > 2565
+B8 > 2566
+B9 > 2567
+BA > 2568
+BB > 2569
+BC > 256A
+BD > 256B
+BE > 256C
+BF > 00A9
+C0 > 044E
+C1 > 0430
+C2 > 0431
+C3 > 0446
+C4 > 0434
+C5 > 0435
+C6 > 0444
+C7 > 0433
+C8 > 0445
+C9 > 0438
+CA > 0438 0306
+CB > 043A
+CC > 043B
+CD > 043C
+CE > 043D
+CF > 043E
+D0 > 043F
+D1 > 044F
+D2 > 0440
+D3 > 0441
+D4 > 0442
+D5 > 0443
+D6 > 0436
+D7 > 0432
+D8 > 044C
+D9 > 044B
+DA > 0437
+DB > 0448
+DC > 044D
+DD > 0449
+DE > 0447
+DF > 044A
+E0 > 042E
+E1 > 0410
+E2 > 0411
+E3 > 0426
+E4 > 0414
+E5 > 0415
+E6 > 0424
+E7 > 0413
+E8 > 0425
+E9 > 0418
+EA > 0418 0306
+EB > 041A
+EC > 041B
+ED > 041C
+EE > 041D
+EF > 041E
+F0 > 041F
+F1 > 042F
+F2 > 0420
+F3 > 0421
+F4 > 0422
+F5 > 0423
+F6 > 0416
+F7 > 0412
+F8 > 042C
+F9 > 042B
+FA > 0417
+FB > 0428
+FC > 042D
+FD > 0429
+FE > 0427
+FF > 042A
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 2500
+81 > 2502
+82 > 250C
+83 > 2510
+84 > 2514
+85 > 2518
+86 > 251C
+87 > 2524
+88 > 252C
+89 > 2534
+8A > 253C
+8B > 2580
+8C > 2584
+8D > 2588
+8E > 258C
+8F > 2590
+90 > 2591
+91 > 2592
+92 > 2593
+93 > 2320
+94 > 25A0
+95 > 2022
+96 > 221A
+97 > 2248
+98 > 2264
+99 > 2265
+9A > 00A0
+9B > 2321
+9C > 00B0
+9D > 00B2
+9E > 00B7
+9F > 00F7
+A0 > 2550
+A1 > 2551
+A2 > 2552
+A3 > 0451
+A4 > 2553
+A5 > 2554
+A6 > 2555
+A7 > 2556
+A8 > 2557
+A9 > 2558
+AA > 2559
+AB > 255A
+AC > 255B
+AD > 255C
+AE > 255D
+AF > 255E
+B0 > 255F
+B1 > 2560
+B2 > 2561
+B3 > 0401
+B4 > 2562
+B5 > 2563
+B6 > 2564
+B7 > 2565
+B8 > 2566
+B9 > 2567
+BA > 2568
+BB > 2569
+BC > 256A
+BD > 256B
+BE > 256C
+BF > 00A9
+C0 > 044E
+C1 > 0430
+C2 > 0431
+C3 > 0446
+C4 > 0434
+C5 > 0435
+C6 > 0444
+C7 > 0433
+C8 > 0445
+C9 > 0438
+CA > 0439
+CB > 043A
+CC > 043B
+CD > 043C
+CE > 043D
+CF > 043E
+D0 > 043F
+D1 > 044F
+D2 > 0440
+D3 > 0441
+D4 > 0442
+D5 > 0443
+D6 > 0436
+D7 > 0432
+D8 > 044C
+D9 > 044B
+DA > 0437
+DB > 0448
+DC > 044D
+DD > 0449
+DE > 0447
+DF > 044A
+E0 > 042E
+E1 > 0410
+E2 > 0411
+E3 > 0426
+E4 > 0414
+E5 > 0415
+E6 > 0424
+E7 > 0413
+E8 > 0425
+E9 > 0418
+EA > 0419
+EB > 041A
+EC > 041B
+ED > 041C
+EE > 041D
+EF > 041E
+F0 > 041F
+F1 > 042F
+F2 > 0420
+F3 > 0421
+F4 > 0422
+F5 > 0423
+F6 > 0416
+F7 > 0412
+F8 > 042C
+F9 > 042B
+FA > 0417
+FB > 0428
+FC > 042D
+FD > 0429
+FE > 0427
+FF > 042A
+.
+
+COMP
+= NFC
+.
diff --git a/data/koi8-r.cset b/data/koi8-r.cset
new file mode 100644 (file)
index 0000000..e53197c
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= koi8-r
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 2500 . N 80 80 80 00 00 00 # <unused special>
+81 2502 . N 81 81 81 00 00 00 # <unused special>
+82 250C . N 82 82 82 00 00 00 # <unused special>
+83 2510 . N 83 83 83 00 00 00 # <unused special>
+84 2514 . N 84 84 84 00 00 00 # <unused special>
+85 2518 . N 85 85 85 00 00 00 # <unused special>
+86 251C . N 86 86 86 00 00 00 # <unused special>
+87 2524 . N 87 87 87 00 00 00 # <unused special>
+88 252C . N 88 88 88 00 00 00 # <unused special>
+89 2534 . N 89 89 89 00 00 00 # <unused special>
+8A 253C . N 8A 8A 8A 00 00 00 # <unused special>
+8B 2580 . N 8B 8B 8B 00 00 00 # <unused special>
+8C 2584 . N 8C 8C 8C 00 00 00 # <unused special>
+8D 2588 . N 8D 8D 8D 00 00 00 # <unused special>
+8E 258C . N 8E 8E 8E 00 00 00 # <unused special>
+8F 2590 . N 8F 8F 8F 00 00 00 # <unused special>
+90 2591 . N 90 90 90 00 00 00 # <unused special>
+91 2592 . N 91 91 91 00 00 00 # <unused special>
+92 2593 . N 92 92 92 00 00 00 # <unused special>
+93 2320 . N 93 93 93 00 00 00 # <unused special>
+94 25A0 . N 94 94 94 00 00 00 # <unused special>
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 221A . N 96 96 96 00 00 00 # <unused special>
+97 2248 . N 97 97 97 00 00 00 # <unused special>
+98 2264 . N 98 98 98 00 00 00 # <unused special>
+99 2265 . N 99 99 99 00 00 00 # <unused special>
+9A 00A0 W Y 9A 9A 9A 00 00 00 # NO-BREAK SPACE
+9B 2321 . N 9B 9B 9B 00 00 00 # <unused special>
+9C 00B0 - Y 9C 9C 9C 00 00 00 # DEGREE SIGN
+9D 00B2 - Y 9D 9D 9D 00 00 00 # SUPERSCRIPT TWO
+9E 00B7 - Y 9E 9E 9E 00 00 00 # MIDDLE DOT
+9F 00F7 - Y 9F 9F 9F 00 00 00 # DIVISION SIGN
+A0 2550 . N A0 A0 A0 00 00 00 # <unused special>
+A1 2551 . N A1 A1 A1 00 00 00 # <unused special>
+A2 2552 . N A2 A2 A2 00 00 00 # <unused special>
+A3 0451 L Y B3 A3 B3 A3 A3 A3 # CYRILLIC SMALL LETTER IO
+A4 2553 . N A4 A4 A4 00 00 00 # <unused special>
+A5 2554 . N A5 A5 A5 00 00 00 # <unused special>
+A6 2555 . N A6 A6 A6 00 00 00 # <unused special>
+A7 2556 . N A7 A7 A7 00 00 00 # <unused special>
+A8 2557 . N A8 A8 A8 00 00 00 # <unused special>
+A9 2558 . N A9 A9 A9 00 00 00 # <unused special>
+AA 2559 . N AA AA AA 00 00 00 # <unused special>
+AB 255A . N AB AB AB 00 00 00 # <unused special>
+AC 255B . N AC AC AC 00 00 00 # <unused special>
+AD 255C . N AD AD AD 00 00 00 # <unused special>
+AE 255D . N AE AE AE 00 00 00 # <unused special>
+AF 255E . N AF AF AF 00 00 00 # <unused special>
+B0 255F . N B0 B0 B0 00 00 00 # <unused special>
+B1 2560 . N B1 B1 B1 00 00 00 # <unused special>
+B2 2561 . N B2 B2 B2 00 00 00 # <unused special>
+B3 0401 L Y B3 A3 B3 B3 A3 A3 # CYRILLIC CAPITAL LETTER IO
+B4 2562 . N B4 B4 B4 00 00 00 # <unused special>
+B5 2563 . N B5 B5 B5 00 00 00 # <unused special>
+B6 2564 . N B6 B6 B6 00 00 00 # <unused special>
+B7 2565 . N B7 B7 B7 00 00 00 # <unused special>
+B8 2566 . N B8 B8 B8 00 00 00 # <unused special>
+B9 2567 . N B9 B9 B9 00 00 00 # <unused special>
+BA 2568 . N BA BA BA 00 00 00 # <unused special>
+BB 2569 . N BB BB BB 00 00 00 # <unused special>
+BC 256A . N BC BC BC 00 00 00 # <unused special>
+BD 256B . N BD BD BD 00 00 00 # <unused special>
+BE 256C . N BE BE BE 00 00 00 # <unused special>
+BF 00A9 - Y BF BF BF 00 00 00 # COPYRIGHT SIGN
+C0 044E L Y E0 C0 E0 C0 2A 00 # CYRILLIC SMALL LETTER YU
+C1 0430 L Y E1 C1 E1 C1 2A 00 # CYRILLIC SMALL LETTER A
+C2 0431 L Y E2 C2 E2 C2 C2 C2 # CYRILLIC SMALL LETTER BE
+C3 0446 L Y E3 C3 E3 C3 C3 C3 # CYRILLIC SMALL LETTER TSE
+C4 0434 L Y E4 C4 E4 C4 C4 C4 # CYRILLIC SMALL LETTER DE
+C5 0435 L Y E5 C5 E5 C5 2A 00 # CYRILLIC SMALL LETTER IE
+C6 0444 L Y E6 C6 E6 C6 C6 C6 # CYRILLIC SMALL LETTER EF
+C7 0433 L Y E7 C7 E7 C7 C7 C7 # CYRILLIC SMALL LETTER GHE
+C8 0445 L Y E8 C8 E8 C8 C8 C8 # CYRILLIC SMALL LETTER HA
+C9 0438 L Y E9 C9 E9 C9 2A 00 # CYRILLIC SMALL LETTER I
+CA 0439 L Y EA CA EA CA CA CA # CYRILLIC SMALL LETTER SHORT I
+CB 043A L Y EB CB EB CB CB CB # CYRILLIC SMALL LETTER KA
+CC 043B L Y EC CC EC CC CC CC # CYRILLIC SMALL LETTER EL
+CD 043C L Y ED CD ED CD CD CD # CYRILLIC SMALL LETTER EM
+CE 043D L Y EE CE EE CE CE CE # CYRILLIC SMALL LETTER EN
+CF 043E L Y EF CF EF CF 2A 00 # CYRILLIC SMALL LETTER O
+D0 043F L Y F0 D0 F0 D0 D0 D0 # CYRILLIC SMALL LETTER PE
+D1 044F L Y F1 D1 F1 D1 2A 00 # CYRILLIC SMALL LETTER YA
+D2 0440 L Y F2 D2 F2 D2 D2 D2 # CYRILLIC SMALL LETTER ER
+D3 0441 L Y F3 D3 F3 D3 D3 D3 # CYRILLIC SMALL LETTER ES
+D4 0442 L Y F4 D4 F4 D4 D4 D4 # CYRILLIC SMALL LETTER TE
+D5 0443 L Y F5 D5 F5 D5 2A 00 # CYRILLIC SMALL LETTER U
+D6 0436 L Y F6 D6 F6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE
+D7 0432 L Y F7 D7 F7 D7 D7 D7 # CYRILLIC SMALL LETTER VE
+D8 044C L Y F8 D8 F8 D8 D8 D8 # CYRILLIC SMALL LETTER SOFT SIGN
+D9 044B L Y F9 D9 F9 D9 2A 00 # CYRILLIC SMALL LETTER YERU
+DA 0437 L Y FA DA FA DA DA DA # CYRILLIC SMALL LETTER ZE
+DB 0448 L Y FB DB FB DB DB DB # CYRILLIC SMALL LETTER SHA
+DC 044D L Y FC DC FC DC 2A 00 # CYRILLIC SMALL LETTER E
+DD 0449 L Y FD DD FD DD DD DD # CYRILLIC SMALL LETTER SHCHA
+DE 0447 L Y FE DE FE DE DE DE # CYRILLIC SMALL LETTER CHE
+DF 044A L Y FF DF FF DF DF DF # CYRILLIC SMALL LETTER HARD SIGN
+E0 042E L Y E0 C0 E0 E0 2A 00 # CYRILLIC CAPITAL LETTER YU
+E1 0410 L Y E1 C1 E1 E1 2A 00 # CYRILLIC CAPITAL LETTER A
+E2 0411 L Y E2 C2 E2 E2 C2 C2 # CYRILLIC CAPITAL LETTER BE
+E3 0426 L Y E3 C3 E3 E3 C3 C3 # CYRILLIC CAPITAL LETTER TSE
+E4 0414 L Y E4 C4 E4 E4 C4 C4 # CYRILLIC CAPITAL LETTER DE
+E5 0415 L Y E5 C5 E5 E5 2A 00 # CYRILLIC CAPITAL LETTER IE
+E6 0424 L Y E6 C6 E6 E6 C6 C6 # CYRILLIC CAPITAL LETTER EF
+E7 0413 L Y E7 C7 E7 E7 C7 C7 # CYRILLIC CAPITAL LETTER GHE
+E8 0425 L Y E8 C8 E8 E8 C8 C8 # CYRILLIC CAPITAL LETTER HA
+E9 0418 L Y E9 C9 E9 E9 2A 00 # CYRILLIC CAPITAL LETTER I
+EA 0419 L Y EA CA EA EA CA CA # CYRILLIC CAPITAL LETTER SHORT I
+EB 041A L Y EB CB EB EB CB CB # CYRILLIC CAPITAL LETTER KA
+EC 041B L Y EC CC EC EC CC CC # CYRILLIC CAPITAL LETTER EL
+ED 041C L Y ED CD ED ED CD CD # CYRILLIC CAPITAL LETTER EM
+EE 041D L Y EE CE EE EE CE CE # CYRILLIC CAPITAL LETTER EN
+EF 041E L Y EF CF EF EF 2A 00 # CYRILLIC CAPITAL LETTER O
+F0 041F L Y F0 D0 F0 F0 D0 D0 # CYRILLIC CAPITAL LETTER PE
+F1 042F L Y F1 D1 F1 F1 2A 00 # CYRILLIC CAPITAL LETTER YA
+F2 0420 L Y F2 D2 F2 F2 D2 D2 # CYRILLIC CAPITAL LETTER ER
+F3 0421 L Y F3 D3 F3 F3 D3 D3 # CYRILLIC CAPITAL LETTER ES
+F4 0422 L Y F4 D4 F4 F4 D4 D4 # CYRILLIC CAPITAL LETTER TE
+F5 0423 L Y F5 D5 F5 F5 2A 00 # CYRILLIC CAPITAL LETTER U
+F6 0416 L Y F6 D6 F6 F6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE
+F7 0412 L Y F7 D7 F7 F7 D7 D7 # CYRILLIC CAPITAL LETTER VE
+F8 042C L Y F8 D8 F8 F8 D8 D8 # CYRILLIC CAPITAL LETTER SOFT SIGN
+F9 042B L Y F9 D9 F9 F9 2A 00 # CYRILLIC CAPITAL LETTER YERU
+FA 0417 L Y FA DA FA FA DA DA # CYRILLIC CAPITAL LETTER ZE
+FB 0428 L Y FB DB FB FB DB DB # CYRILLIC CAPITAL LETTER SHA
+FC 042D L Y FC DC FC FC 2A 00 # CYRILLIC CAPITAL LETTER E
+FD 0429 L Y FD DD FD FD DD DD # CYRILLIC CAPITAL LETTER SHCHA
+FE 0427 L Y FE DE FE FE DE DE # CYRILLIC CAPITAL LETTER CHE
+FF 042A L Y FF DF FF FF DF DF # CYRILLIC CAPITAL LETTER HARD SIGN
diff --git a/data/koi8-u.cmap b/data/koi8-u.cmap
new file mode 100644 (file)
index 0000000..5b35880
--- /dev/null
@@ -0,0 +1,1869 @@
+INTERNAL
+/
+N 1039
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > 9A
+00A9 > BF
+00B0 > 9C
+00B2 > 9D
+00B7 > 9E
+00C0 > 41 # unsup: 0041 0300
+00C1 > 41 # unsup: 0041 0301
+00C2 > 41 # unsup: 0041 0302
+00C3 > 41 # unsup: 0041 0303
+00C4 > 41 # unsup: 0041 0308
+00C5 > 41 # unsup: 0041 030A
+00C6 > 41 45 # compat
+00C7 > 43 # unsup: 0043 0327
+00C8 > 45 # unsup: 0045 0300
+00C9 > 45 # unsup: 0045 0301
+00CA > 45 # unsup: 0045 0302
+00CB > 45 # unsup: 0045 0308
+00CC > 49 # unsup: 0049 0300
+00CD > 49 # unsup: 0049 0301
+00CE > 49 # unsup: 0049 0302
+00CF > 49 # unsup: 0049 0308
+00D1 > 4E # unsup: 004E 0303
+00D2 > 4F # unsup: 004F 0300
+00D3 > 4F # unsup: 004F 0301
+00D4 > 4F # unsup: 004F 0302
+00D5 > 4F # unsup: 004F 0303
+00D6 > 4F # unsup: 004F 0308
+00D9 > 55 # unsup: 0055 0300
+00DA > 55 # unsup: 0055 0301
+00DB > 55 # unsup: 0055 0302
+00DC > 55 # unsup: 0055 0308
+00DD > 59 # unsup: 0059 0301
+00E0 > 61 # unsup: 0061 0300
+00E1 > 61 # unsup: 0061 0301
+00E2 > 61 # unsup: 0061 0302
+00E3 > 61 # unsup: 0061 0303
+00E4 > 61 # unsup: 0061 0308
+00E5 > 61 # unsup: 0061 030A
+00E6 > 61 65 # compat
+00E7 > 63 # unsup: 0063 0327
+00E8 > 65 # unsup: 0065 0300
+00E9 > 65 # unsup: 0065 0301
+00EA > 65 # unsup: 0065 0302
+00EB > 65 # unsup: 0065 0308
+00EC > 69 # unsup: 0069 0300
+00ED > 69 # unsup: 0069 0301
+00EE > 69 # unsup: 0069 0302
+00EF > 69 # unsup: 0069 0308
+00F1 > 6E # unsup: 006E 0303
+00F2 > 6F # unsup: 006F 0300
+00F3 > 6F # unsup: 006F 0301
+00F4 > 6F # unsup: 006F 0302
+00F5 > 6F # unsup: 006F 0303
+00F6 > 6F # unsup: 006F 0308
+00F7 > 9F
+00F9 > 75 # unsup: 0075 0300
+00FA > 75 # unsup: 0075 0301
+00FB > 75 # unsup: 0075 0302
+00FC > 75 # unsup: 0075 0308
+00FD > 79 # unsup: 0079 0301
+00FF > 79 # unsup: 0079 0308
+0100 > 41 # unsup: 0041 0304
+0101 > 61 # unsup: 0061 0304
+0102 > 41 # unsup: 0041 0306
+0103 > 61 # unsup: 0061 0306
+0104 > 41 # unsup: 0041 0328
+0105 > 61 # unsup: 0061 0328
+0106 > 43 # unsup: 0043 0301
+0107 > 63 # unsup: 0063 0301
+0108 > 43 # unsup: 0043 0302
+0109 > 63 # unsup: 0063 0302
+010A > 43 # unsup: 0043 0307
+010B > 63 # unsup: 0063 0307
+010C > 43 # unsup: 0043 030C
+010D > 63 # unsup: 0063 030C
+010E > 44 # unsup: 0044 030C
+010F > 64 # unsup: 0064 030C
+0112 > 45 # unsup: 0045 0304
+0113 > 65 # unsup: 0065 0304
+0114 > 45 # unsup: 0045 0306
+0115 > 65 # unsup: 0065 0306
+0116 > 45 # unsup: 0045 0307
+0117 > 65 # unsup: 0065 0307
+0118 > 45 # unsup: 0045 0328
+0119 > 65 # unsup: 0065 0328
+011A > 45 # unsup: 0045 030C
+011B > 65 # unsup: 0065 030C
+011C > 47 # unsup: 0047 0302
+011D > 67 # unsup: 0067 0302
+011E > 47 # unsup: 0047 0306
+011F > 67 # unsup: 0067 0306
+0120 > 47 # unsup: 0047 0307
+0121 > 67 # unsup: 0067 0307
+0122 > 47 # unsup: 0047 0327
+0123 > 67 # unsup: 0067 0327
+0124 > 48 # unsup: 0048 0302
+0125 > 68 # unsup: 0068 0302
+0128 > 49 # unsup: 0049 0303
+0129 > 69 # unsup: 0069 0303
+012A > 49 # unsup: 0049 0304
+012B > 69 # unsup: 0069 0304
+012C > 49 # unsup: 0049 0306
+012D > 69 # unsup: 0069 0306
+012E > 49 # unsup: 0049 0328
+012F > 69 # unsup: 0069 0328
+0130 > 49 # unsup: 0049 0307
+0132 > 49 4A # compat
+0133 > 69 6A # compat
+0134 > 4A # unsup: 004A 0302
+0135 > 6A # unsup: 006A 0302
+0136 > 4B # unsup: 004B 0327
+0137 > 6B # unsup: 006B 0327
+0139 > 4C # unsup: 004C 0301
+013A > 6C # unsup: 006C 0301
+013B > 4C # unsup: 004C 0327
+013C > 6C # unsup: 006C 0327
+013D > 4C # unsup: 004C 030C
+013E > 6C # unsup: 006C 030C
+013F > 4C 9E # compat
+0140 > 6C 9E # compat
+0143 > 4E # unsup: 004E 0301
+0144 > 6E # unsup: 006E 0301
+0145 > 4E # unsup: 004E 0327
+0146 > 6E # unsup: 006E 0327
+0147 > 4E # unsup: 004E 030C
+0148 > 6E # unsup: 006E 030C
+014C > 4F # unsup: 004F 0304
+014D > 6F # unsup: 006F 0304
+014E > 4F # unsup: 004F 0306
+014F > 6F # unsup: 006F 0306
+0150 > 4F # unsup: 004F 030B
+0151 > 6F # unsup: 006F 030B
+0152 > 4F 45 # compat
+0153 > 6F 65 # compat
+0154 > 52 # unsup: 0052 0301
+0155 > 72 # unsup: 0072 0301
+0156 > 52 # unsup: 0052 0327
+0157 > 72 # unsup: 0072 0327
+0158 > 52 # unsup: 0052 030C
+0159 > 72 # unsup: 0072 030C
+015A > 53 # unsup: 0053 0301
+015B > 73 # unsup: 0073 0301
+015C > 53 # unsup: 0053 0302
+015D > 73 # unsup: 0073 0302
+015E > 53 # unsup: 0053 0327
+015F > 73 # unsup: 0073 0327
+0160 > 53 # unsup: 0053 030C
+0161 > 73 # unsup: 0073 030C
+0162 > 54 # unsup: 0054 0327
+0163 > 74 # unsup: 0074 0327
+0164 > 54 # unsup: 0054 030C
+0165 > 74 # unsup: 0074 030C
+0168 > 55 # unsup: 0055 0303
+0169 > 75 # unsup: 0075 0303
+016A > 55 # unsup: 0055 0304
+016B > 75 # unsup: 0075 0304
+016C > 55 # unsup: 0055 0306
+016D > 75 # unsup: 0075 0306
+016E > 55 # unsup: 0055 030A
+016F > 75 # unsup: 0075 030A
+0170 > 55 # unsup: 0055 030B
+0171 > 75 # unsup: 0075 030B
+0172 > 55 # unsup: 0055 0328
+0173 > 75 # unsup: 0075 0328
+0174 > 57 # unsup: 0057 0302
+0175 > 77 # unsup: 0077 0302
+0176 > 59 # unsup: 0059 0302
+0177 > 79 # unsup: 0079 0302
+0178 > 59 # unsup: 0059 0308
+0179 > 5A # unsup: 005A 0301
+017A > 7A # unsup: 007A 0301
+017B > 5A # unsup: 005A 0307
+017C > 7A # unsup: 007A 0307
+017D > 5A # unsup: 005A 030C
+017E > 7A # unsup: 007A 030C
+017F > 73 # compat
+01A0 > 4F # unsup: 004F 031B
+01A1 > 6F # unsup: 006F 031B
+01AF > 55 # unsup: 0055 031B
+01B0 > 75 # unsup: 0075 031B
+01C4 > 44 5A # unsup: 0044 005A 030C
+01C5 > 44 7A # unsup: 0044 007A 030C
+01C6 > 64 7A # unsup: 0064 007A 030C
+01C7 > 4C 4A # compat
+01C8 > 4C 6A # compat
+01C9 > 6C 6A # compat
+01CA > 4E 4A # compat
+01CB > 4E 6A # compat
+01CC > 6E 6A # compat
+01CD > 41 # unsup: 0041 030C
+01CE > 61 # unsup: 0061 030C
+01CF > 49 # unsup: 0049 030C
+01D0 > 69 # unsup: 0069 030C
+01D1 > 4F # unsup: 004F 030C
+01D2 > 6F # unsup: 006F 030C
+01D3 > 55 # unsup: 0055 030C
+01D4 > 75 # unsup: 0075 030C
+01D5 > 55 # unsup: 0055 0308 0304
+01D6 > 75 # unsup: 0075 0308 0304
+01D7 > 55 # unsup: 0055 0308 0301
+01D8 > 75 # unsup: 0075 0308 0301
+01D9 > 55 # unsup: 0055 0308 030C
+01DA > 75 # unsup: 0075 0308 030C
+01DB > 55 # unsup: 0055 0308 0300
+01DC > 75 # unsup: 0075 0308 0300
+01DE > 41 # unsup: 0041 0308 0304
+01DF > 61 # unsup: 0061 0308 0304
+01E0 > 41 # unsup: 0041 0307 0304
+01E1 > 61 # unsup: 0061 0307 0304
+01E2 > 41 45 # unsup: 0041 0045 0304
+01E3 > 61 65 # unsup: 0061 0065 0304
+01E6 > 47 # unsup: 0047 030C
+01E7 > 67 # unsup: 0067 030C
+01E8 > 4B # unsup: 004B 030C
+01E9 > 6B # unsup: 006B 030C
+01EA > 4F # unsup: 004F 0328
+01EB > 6F # unsup: 006F 0328
+01EC > 4F # unsup: 004F 0328 0304
+01ED > 6F # unsup: 006F 0328 0304
+01F0 > 6A # unsup: 006A 030C
+01F1 > 44 5A # compat
+01F2 > 44 7A # compat
+01F3 > 64 7A # compat
+01F4 > 47 # unsup: 0047 0301
+01F5 > 67 # unsup: 0067 0301
+01F8 > 4E # unsup: 004E 0300
+01F9 > 6E # unsup: 006E 0300
+01FA > 41 # unsup: 0041 030A 0301
+01FB > 61 # unsup: 0061 030A 0301
+01FC > 41 45 # unsup: 0041 0045 0301
+01FD > 61 65 # unsup: 0061 0065 0301
+0200 > 41 # unsup: 0041 030F
+0201 > 61 # unsup: 0061 030F
+0202 > 41 # unsup: 0041 0311
+0203 > 61 # unsup: 0061 0311
+0204 > 45 # unsup: 0045 030F
+0205 > 65 # unsup: 0065 030F
+0206 > 45 # unsup: 0045 0311
+0207 > 65 # unsup: 0065 0311
+0208 > 49 # unsup: 0049 030F
+0209 > 69 # unsup: 0069 030F
+020A > 49 # unsup: 0049 0311
+020B > 69 # unsup: 0069 0311
+020C > 4F # unsup: 004F 030F
+020D > 6F # unsup: 006F 030F
+020E > 4F # unsup: 004F 0311
+020F > 6F # unsup: 006F 0311
+0210 > 52 # unsup: 0052 030F
+0211 > 72 # unsup: 0072 030F
+0212 > 52 # unsup: 0052 0311
+0213 > 72 # unsup: 0072 0311
+0214 > 55 # unsup: 0055 030F
+0215 > 75 # unsup: 0075 030F
+0216 > 55 # unsup: 0055 0311
+0217 > 75 # unsup: 0075 0311
+0218 > 53 # unsup: 0053 0326
+0219 > 73 # unsup: 0073 0326
+021A > 54 # unsup: 0054 0326
+021B > 74 # unsup: 0074 0326
+021E > 48 # unsup: 0048 030C
+021F > 68 # unsup: 0068 030C
+0226 > 41 # unsup: 0041 0307
+0227 > 61 # unsup: 0061 0307
+0228 > 45 # unsup: 0045 0327
+0229 > 65 # unsup: 0065 0327
+022A > 4F # unsup: 004F 0308 0304
+022B > 6F # unsup: 006F 0308 0304
+022C > 4F # unsup: 004F 0303 0304
+022D > 6F # unsup: 006F 0303 0304
+022E > 4F # unsup: 004F 0307
+022F > 6F # unsup: 006F 0307
+0230 > 4F # unsup: 004F 0307 0304
+0231 > 6F # unsup: 006F 0307 0304
+0232 > 59 # unsup: 0059 0304
+0233 > 79 # unsup: 0079 0304
+0300 > 0 # unsup
+0301 > 0 # unsup
+0302 > 0 # unsup
+0303 > 0 # unsup
+0304 > 0 # unsup
+0305 > 0 # unsup
+0306 > 0 # unsup
+0307 > 0 # unsup
+0308 > 0 # unsup
+0309 > 0 # unsup
+030A > 0 # unsup
+030B > 0 # unsup
+030C > 0 # unsup
+030D > 0 # unsup
+030E > 0 # unsup
+030F > 0 # unsup
+0310 > 0 # unsup
+0311 > 0 # unsup
+0312 > 0 # unsup
+0313 > 0 # unsup
+0314 > 0 # unsup
+0315 > 0 # unsup
+0316 > 0 # unsup
+0317 > 0 # unsup
+0318 > 0 # unsup
+0319 > 0 # unsup
+031A > 0 # unsup
+031B > 0 # unsup
+031C > 0 # unsup
+031D > 0 # unsup
+031E > 0 # unsup
+031F > 0 # unsup
+0320 > 0 # unsup
+0321 > 0 # unsup
+0322 > 0 # unsup
+0323 > 0 # unsup
+0324 > 0 # unsup
+0325 > 0 # unsup
+0326 > 0 # unsup
+0327 > 0 # unsup
+0328 > 0 # unsup
+0329 > 0 # unsup
+032A > 0 # unsup
+032B > 0 # unsup
+032C > 0 # unsup
+032D > 0 # unsup
+032E > 0 # unsup
+032F > 0 # unsup
+0330 > 0 # unsup
+0331 > 0 # unsup
+0332 > 0 # unsup
+0333 > 0 # unsup
+0334 > 0 # unsup
+0335 > 0 # unsup
+0336 > 0 # unsup
+0337 > 0 # unsup
+0338 > 0 # unsup
+0339 > 0 # unsup
+033A > 0 # unsup
+033B > 0 # unsup
+033C > 0 # unsup
+033D > 0 # unsup
+033E > 0 # unsup
+033F > 0 # unsup
+0340 > 0 # unsup
+0341 > 0 # unsup
+0342 > 0 # unsup
+0343 > 0 # unsup
+0344 > 0 # unsup
+0345 > 0 # unsup
+037E > 3B
+0387 > 9E
+0400 > E5 # unsup: 0415 0300
+0401 > B3
+0403 > E7 # unsup: 0413 0301
+0404 > B4
+0406 > B6 /
+     N 1
+     0308 > B7
+     .
+0407 > B7
+040C > EB # unsup: 041A 0301
+040D > E9 # unsup: 0418 0300
+040E > F5 # unsup: 0423 0306
+0410 > E1
+0411 > E2
+0412 > F7
+0413 > E7
+0414 > E4
+0415 > E5 /
+     N 1
+     0308 > B3
+     .
+0416 > F6
+0417 > FA
+0418 > E9 /
+     N 1
+     0306 > EA
+     .
+0419 > EA
+041A > EB
+041B > EC
+041C > ED
+041D > EE
+041E > EF
+041F > F0
+0420 > F2
+0421 > F3
+0422 > F4
+0423 > F5
+0424 > E6
+0425 > E8
+0426 > E3
+0427 > FE
+0428 > FB
+0429 > FD
+042A > FF
+042B > F9
+042C > F8
+042D > FC
+042E > E0
+042F > F1
+0430 > C1
+0431 > C2
+0432 > D7
+0433 > C7
+0434 > C4
+0435 > C5 /
+     N 1
+     0308 > A3
+     .
+0436 > D6
+0437 > DA
+0438 > C9 /
+     N 1
+     0306 > CA
+     .
+0439 > CA
+043A > CB
+043B > CC
+043C > CD
+043D > CE
+043E > CF
+043F > D0
+0440 > D2
+0441 > D3
+0442 > D4
+0443 > D5
+0444 > C6
+0445 > C8
+0446 > C3
+0447 > DE
+0448 > DB
+0449 > DD
+044A > DF
+044B > D9
+044C > D8
+044D > DC
+044E > C0
+044F > D1
+0450 > C5 # unsup: 0435 0300
+0451 > A3
+0453 > C7 # unsup: 0433 0301
+0454 > A4
+0456 > A6 /
+     N 1
+     0308 > A7
+     .
+0457 > A7
+045C > CB # unsup: 043A 0301
+045D > C9 # unsup: 0438 0300
+045E > D5 # unsup: 0443 0306
+0490 > BD
+0491 > AD
+04C1 > F6 # unsup: 0416 0306
+04C2 > D6 # unsup: 0436 0306
+04D0 > E1 # unsup: 0410 0306
+04D1 > C1 # unsup: 0430 0306
+04D2 > E1 # unsup: 0410 0308
+04D3 > C1 # unsup: 0430 0308
+04D6 > E5 # unsup: 0415 0306
+04D7 > C5 # unsup: 0435 0306
+04DC > F6 # unsup: 0416 0308
+04DD > D6 # unsup: 0436 0308
+04DE > FA # unsup: 0417 0308
+04DF > DA # unsup: 0437 0308
+04E2 > E9 # unsup: 0418 0304
+04E3 > C9 # unsup: 0438 0304
+04E4 > E9 # unsup: 0418 0308
+04E5 > C9 # unsup: 0438 0308
+04E6 > EF # unsup: 041E 0308
+04E7 > CF # unsup: 043E 0308
+04EC > FC # unsup: 042D 0308
+04ED > DC # unsup: 044D 0308
+04EE > F5 # unsup: 0423 0304
+04EF > D5 # unsup: 0443 0304
+04F0 > F5 # unsup: 0423 0308
+04F1 > D5 # unsup: 0443 0308
+04F2 > F5 # unsup: 0423 030B
+04F3 > D5 # unsup: 0443 030B
+04F4 > FE # unsup: 0427 0308
+04F5 > DE # unsup: 0447 0308
+04F8 > F9 # unsup: 042B 0308
+04F9 > D9 # unsup: 044B 0308
+1E00 > 41 # unsup: 0041 0325
+1E01 > 61 # unsup: 0061 0325
+1E02 > 42 # unsup: 0042 0307
+1E03 > 62 # unsup: 0062 0307
+1E04 > 42 # unsup: 0042 0323
+1E05 > 62 # unsup: 0062 0323
+1E06 > 42 # unsup: 0042 0331
+1E07 > 62 # unsup: 0062 0331
+1E08 > 43 # unsup: 0043 0327 0301
+1E09 > 63 # unsup: 0063 0327 0301
+1E0A > 44 # unsup: 0044 0307
+1E0B > 64 # unsup: 0064 0307
+1E0C > 44 # unsup: 0044 0323
+1E0D > 64 # unsup: 0064 0323
+1E0E > 44 # unsup: 0044 0331
+1E0F > 64 # unsup: 0064 0331
+1E10 > 44 # unsup: 0044 0327
+1E11 > 64 # unsup: 0064 0327
+1E12 > 44 # unsup: 0044 032D
+1E13 > 64 # unsup: 0064 032D
+1E14 > 45 # unsup: 0045 0304 0300
+1E15 > 65 # unsup: 0065 0304 0300
+1E16 > 45 # unsup: 0045 0304 0301
+1E17 > 65 # unsup: 0065 0304 0301
+1E18 > 45 # unsup: 0045 032D
+1E19 > 65 # unsup: 0065 032D
+1E1A > 45 # unsup: 0045 0330
+1E1B > 65 # unsup: 0065 0330
+1E1C > 45 # unsup: 0045 0327 0306
+1E1D > 65 # unsup: 0065 0327 0306
+1E1E > 46 # unsup: 0046 0307
+1E1F > 66 # unsup: 0066 0307
+1E20 > 47 # unsup: 0047 0304
+1E21 > 67 # unsup: 0067 0304
+1E22 > 48 # unsup: 0048 0307
+1E23 > 68 # unsup: 0068 0307
+1E24 > 48 # unsup: 0048 0323
+1E25 > 68 # unsup: 0068 0323
+1E26 > 48 # unsup: 0048 0308
+1E27 > 68 # unsup: 0068 0308
+1E28 > 48 # unsup: 0048 0327
+1E29 > 68 # unsup: 0068 0327
+1E2A > 48 # unsup: 0048 032E
+1E2B > 68 # unsup: 0068 032E
+1E2C > 49 # unsup: 0049 0330
+1E2D > 69 # unsup: 0069 0330
+1E2E > 49 # unsup: 0049 0308 0301
+1E2F > 69 # unsup: 0069 0308 0301
+1E30 > 4B # unsup: 004B 0301
+1E31 > 6B # unsup: 006B 0301
+1E32 > 4B # unsup: 004B 0323
+1E33 > 6B # unsup: 006B 0323
+1E34 > 4B # unsup: 004B 0331
+1E35 > 6B # unsup: 006B 0331
+1E36 > 4C # unsup: 004C 0323
+1E37 > 6C # unsup: 006C 0323
+1E38 > 4C # unsup: 004C 0323 0304
+1E39 > 6C # unsup: 006C 0323 0304
+1E3A > 4C # unsup: 004C 0331
+1E3B > 6C # unsup: 006C 0331
+1E3C > 4C # unsup: 004C 032D
+1E3D > 6C # unsup: 006C 032D
+1E3E > 4D # unsup: 004D 0301
+1E3F > 6D # unsup: 006D 0301
+1E40 > 4D # unsup: 004D 0307
+1E41 > 6D # unsup: 006D 0307
+1E42 > 4D # unsup: 004D 0323
+1E43 > 6D # unsup: 006D 0323
+1E44 > 4E # unsup: 004E 0307
+1E45 > 6E # unsup: 006E 0307
+1E46 > 4E # unsup: 004E 0323
+1E47 > 6E # unsup: 006E 0323
+1E48 > 4E # unsup: 004E 0331
+1E49 > 6E # unsup: 006E 0331
+1E4A > 4E # unsup: 004E 032D
+1E4B > 6E # unsup: 006E 032D
+1E4C > 4F # unsup: 004F 0303 0301
+1E4D > 6F # unsup: 006F 0303 0301
+1E4E > 4F # unsup: 004F 0303 0308
+1E4F > 6F # unsup: 006F 0303 0308
+1E50 > 4F # unsup: 004F 0304 0300
+1E51 > 6F # unsup: 006F 0304 0300
+1E52 > 4F # unsup: 004F 0304 0301
+1E53 > 6F # unsup: 006F 0304 0301
+1E54 > 50 # unsup: 0050 0301
+1E55 > 70 # unsup: 0070 0301
+1E56 > 50 # unsup: 0050 0307
+1E57 > 70 # unsup: 0070 0307
+1E58 > 52 # unsup: 0052 0307
+1E59 > 72 # unsup: 0072 0307
+1E5A > 52 # unsup: 0052 0323
+1E5B > 72 # unsup: 0072 0323
+1E5C > 52 # unsup: 0052 0323 0304
+1E5D > 72 # unsup: 0072 0323 0304
+1E5E > 52 # unsup: 0052 0331
+1E5F > 72 # unsup: 0072 0331
+1E60 > 53 # unsup: 0053 0307
+1E61 > 73 # unsup: 0073 0307
+1E62 > 53 # unsup: 0053 0323
+1E63 > 73 # unsup: 0073 0323
+1E64 > 53 # unsup: 0053 0301 0307
+1E65 > 73 # unsup: 0073 0301 0307
+1E66 > 53 # unsup: 0053 030C 0307
+1E67 > 73 # unsup: 0073 030C 0307
+1E68 > 53 # unsup: 0053 0323 0307
+1E69 > 73 # unsup: 0073 0323 0307
+1E6A > 54 # unsup: 0054 0307
+1E6B > 74 # unsup: 0074 0307
+1E6C > 54 # unsup: 0054 0323
+1E6D > 74 # unsup: 0074 0323
+1E6E > 54 # unsup: 0054 0331
+1E6F > 74 # unsup: 0074 0331
+1E70 > 54 # unsup: 0054 032D
+1E71 > 74 # unsup: 0074 032D
+1E72 > 55 # unsup: 0055 0324
+1E73 > 75 # unsup: 0075 0324
+1E74 > 55 # unsup: 0055 0330
+1E75 > 75 # unsup: 0075 0330
+1E76 > 55 # unsup: 0055 032D
+1E77 > 75 # unsup: 0075 032D
+1E78 > 55 # unsup: 0055 0303 0301
+1E79 > 75 # unsup: 0075 0303 0301
+1E7A > 55 # unsup: 0055 0304 0308
+1E7B > 75 # unsup: 0075 0304 0308
+1E7C > 56 # unsup: 0056 0303
+1E7D > 76 # unsup: 0076 0303
+1E7E > 56 # unsup: 0056 0323
+1E7F > 76 # unsup: 0076 0323
+1E80 > 57 # unsup: 0057 0300
+1E81 > 77 # unsup: 0077 0300
+1E82 > 57 # unsup: 0057 0301
+1E83 > 77 # unsup: 0077 0301
+1E84 > 57 # unsup: 0057 0308
+1E85 > 77 # unsup: 0077 0308
+1E86 > 57 # unsup: 0057 0307
+1E87 > 77 # unsup: 0077 0307
+1E88 > 57 # unsup: 0057 0323
+1E89 > 77 # unsup: 0077 0323
+1E8A > 58 # unsup: 0058 0307
+1E8B > 78 # unsup: 0078 0307
+1E8C > 58 # unsup: 0058 0308
+1E8D > 78 # unsup: 0078 0308
+1E8E > 59 # unsup: 0059 0307
+1E8F > 79 # unsup: 0079 0307
+1E90 > 5A # unsup: 005A 0302
+1E91 > 7A # unsup: 007A 0302
+1E92 > 5A # unsup: 005A 0323
+1E93 > 7A # unsup: 007A 0323
+1E94 > 5A # unsup: 005A 0331
+1E95 > 7A # unsup: 007A 0331
+1E96 > 68 # unsup: 0068 0331
+1E97 > 74 # unsup: 0074 0308
+1E98 > 77 # unsup: 0077 030A
+1E99 > 79 # unsup: 0079 030A
+1E9B > 73 # unsup: 0073 0307
+1EA0 > 41 # unsup: 0041 0323
+1EA1 > 61 # unsup: 0061 0323
+1EA2 > 41 # unsup: 0041 0309
+1EA3 > 61 # unsup: 0061 0309
+1EA4 > 41 # unsup: 0041 0302 0301
+1EA5 > 61 # unsup: 0061 0302 0301
+1EA6 > 41 # unsup: 0041 0302 0300
+1EA7 > 61 # unsup: 0061 0302 0300
+1EA8 > 41 # unsup: 0041 0302 0309
+1EA9 > 61 # unsup: 0061 0302 0309
+1EAA > 41 # unsup: 0041 0302 0303
+1EAB > 61 # unsup: 0061 0302 0303
+1EAC > 41 # unsup: 0041 0323 0302
+1EAD > 61 # unsup: 0061 0323 0302
+1EAE > 41 # unsup: 0041 0306 0301
+1EAF > 61 # unsup: 0061 0306 0301
+1EB0 > 41 # unsup: 0041 0306 0300
+1EB1 > 61 # unsup: 0061 0306 0300
+1EB2 > 41 # unsup: 0041 0306 0309
+1EB3 > 61 # unsup: 0061 0306 0309
+1EB4 > 41 # unsup: 0041 0306 0303
+1EB5 > 61 # unsup: 0061 0306 0303
+1EB6 > 41 # unsup: 0041 0323 0306
+1EB7 > 61 # unsup: 0061 0323 0306
+1EB8 > 45 # unsup: 0045 0323
+1EB9 > 65 # unsup: 0065 0323
+1EBA > 45 # unsup: 0045 0309
+1EBB > 65 # unsup: 0065 0309
+1EBC > 45 # unsup: 0045 0303
+1EBD > 65 # unsup: 0065 0303
+1EBE > 45 # unsup: 0045 0302 0301
+1EBF > 65 # unsup: 0065 0302 0301
+1EC0 > 45 # unsup: 0045 0302 0300
+1EC1 > 65 # unsup: 0065 0302 0300
+1EC2 > 45 # unsup: 0045 0302 0309
+1EC3 > 65 # unsup: 0065 0302 0309
+1EC4 > 45 # unsup: 0045 0302 0303
+1EC5 > 65 # unsup: 0065 0302 0303
+1EC6 > 45 # unsup: 0045 0323 0302
+1EC7 > 65 # unsup: 0065 0323 0302
+1EC8 > 49 # unsup: 0049 0309
+1EC9 > 69 # unsup: 0069 0309
+1ECA > 49 # unsup: 0049 0323
+1ECB > 69 # unsup: 0069 0323
+1ECC > 4F # unsup: 004F 0323
+1ECD > 6F # unsup: 006F 0323
+1ECE > 4F # unsup: 004F 0309
+1ECF > 6F # unsup: 006F 0309
+1ED0 > 4F # unsup: 004F 0302 0301
+1ED1 > 6F # unsup: 006F 0302 0301
+1ED2 > 4F # unsup: 004F 0302 0300
+1ED3 > 6F # unsup: 006F 0302 0300
+1ED4 > 4F # unsup: 004F 0302 0309
+1ED5 > 6F # unsup: 006F 0302 0309
+1ED6 > 4F # unsup: 004F 0302 0303
+1ED7 > 6F # unsup: 006F 0302 0303
+1ED8 > 4F # unsup: 004F 0323 0302
+1ED9 > 6F # unsup: 006F 0323 0302
+1EDA > 4F # unsup: 004F 031B 0301
+1EDB > 6F # unsup: 006F 031B 0301
+1EDC > 4F # unsup: 004F 031B 0300
+1EDD > 6F # unsup: 006F 031B 0300
+1EDE > 4F # unsup: 004F 031B 0309
+1EDF > 6F # unsup: 006F 031B 0309
+1EE0 > 4F # unsup: 004F 031B 0303
+1EE1 > 6F # unsup: 006F 031B 0303
+1EE2 > 4F # unsup: 004F 031B 0323
+1EE3 > 6F # unsup: 006F 031B 0323
+1EE4 > 55 # unsup: 0055 0323
+1EE5 > 75 # unsup: 0075 0323
+1EE6 > 55 # unsup: 0055 0309
+1EE7 > 75 # unsup: 0075 0309
+1EE8 > 55 # unsup: 0055 031B 0301
+1EE9 > 75 # unsup: 0075 031B 0301
+1EEA > 55 # unsup: 0055 031B 0300
+1EEB > 75 # unsup: 0075 031B 0300
+1EEC > 55 # unsup: 0055 031B 0309
+1EED > 75 # unsup: 0075 031B 0309
+1EEE > 55 # unsup: 0055 031B 0303
+1EEF > 75 # unsup: 0075 031B 0303
+1EF0 > 55 # unsup: 0055 031B 0323
+1EF1 > 75 # unsup: 0075 031B 0323
+1EF2 > 59 # unsup: 0059 0300
+1EF3 > 79 # unsup: 0079 0300
+1EF4 > 59 # unsup: 0059 0323
+1EF5 > 79 # unsup: 0079 0323
+1EF6 > 59 # unsup: 0059 0309
+1EF7 > 79 # unsup: 0079 0309
+1EF8 > 59 # unsup: 0059 0303
+1EF9 > 79 # unsup: 0079 0303
+1FEF > 60
+2000 > 20 # compat
+2001 > 20 # compat
+2002 > 20 # compat
+2003 > 20 # compat
+2004 > 20 # compat
+2005 > 20 # compat
+2006 > 20 # compat
+2007 > 20 # compat
+2008 > 20 # compat
+2009 > 20 # compat
+200A > 20 # compat
+2022 > 95
+2024 > 2E # compat
+2025 > 2E 2E # compat
+2026 > 2E 2E 2E # compat
+202F > 20 # compat
+203C > 21 21 # compat
+2047 > 3F 3F # compat
+2048 > 3F 21 # compat
+2049 > 21 3F # compat
+205F > 20 # compat
+221A > 96
+2248 > 97
+2264 > 98
+2265 > 99
+2320 > 93
+2321 > 9B
+2500 > 80
+2502 > 81
+250C > 82
+2510 > 83
+2514 > 84
+2518 > 85
+251C > 86
+2524 > 87
+252C > 88
+2534 > 89
+253C > 8A
+2550 > A0
+2551 > A1
+2552 > A2
+2554 > A5
+2557 > A8
+2558 > A9
+2559 > AA
+255A > AB
+255B > AC
+255D > AE
+255E > AF
+255F > B0
+2560 > B1
+2561 > B2
+2563 > B5
+2566 > B8
+2567 > B9
+2568 > BA
+2569 > BB
+256A > BC
+256C > BE
+2580 > 8B
+2584 > 8C
+2588 > 8D
+258C > 8E
+2590 > 8F
+2591 > 90
+2592 > 91
+2593 > 92
+25A0 > 94
+FB00 > 66 66 # compat
+FB01 > 66 69 # compat
+FB02 > 66 6C # compat
+FB03 > 66 66 69 # compat
+FB04 > 66 66 6C # compat
+FB05 > 73 74 # compat
+FB06 > 73 74 # compat
+FB29 > 2B # compat
+FE30 > 2E 2E # compat
+FE33 > 5F # compat
+FE34 > 5F # compat
+FE35 > 28 # compat
+FE36 > 29 # compat
+FE37 > 7B # compat
+FE38 > 7D # compat
+FE47 > 5B # compat
+FE48 > 5D # compat
+FE4D > 5F # compat
+FE4E > 5F # compat
+FE4F > 5F # compat
+FE50 > 2C # compat
+FE52 > 2E # compat
+FE54 > 3B # compat
+FE55 > 3A # compat
+FE56 > 3F # compat
+FE57 > 21 # compat
+FE59 > 28 # compat
+FE5A > 29 # compat
+FE5B > 7B # compat
+FE5C > 7D # compat
+FE5F > 23 # compat
+FE60 > 26 # compat
+FE61 > 2A # compat
+FE62 > 2B # compat
+FE63 > 2D # compat
+FE64 > 3C # compat
+FE65 > 3E # compat
+FE66 > 3D # compat
+FE68 > 5C # compat
+FE69 > 24 # compat
+FE6A > 25 # compat
+FE6B > 40 # compat
+FF01 > 21 # compat
+FF02 > 22 # compat
+FF03 > 23 # compat
+FF04 > 24 # compat
+FF05 > 25 # compat
+FF06 > 26 # compat
+FF07 > 27 # compat
+FF08 > 28 # compat
+FF09 > 29 # compat
+FF0A > 2A # compat
+FF0B > 2B # compat
+FF0C > 2C # compat
+FF0D > 2D # compat
+FF0E > 2E # compat
+FF0F > 2F # compat
+FF10 > 30 # compat
+FF11 > 31 # compat
+FF12 > 32 # compat
+FF13 > 33 # compat
+FF14 > 34 # compat
+FF15 > 35 # compat
+FF16 > 36 # compat
+FF17 > 37 # compat
+FF18 > 38 # compat
+FF19 > 39 # compat
+FF1A > 3A # compat
+FF1B > 3B # compat
+FF1C > 3C # compat
+FF1D > 3D # compat
+FF1E > 3E # compat
+FF1F > 3F # compat
+FF20 > 40 # compat
+FF21 > 41 # compat
+FF22 > 42 # compat
+FF23 > 43 # compat
+FF24 > 44 # compat
+FF25 > 45 # compat
+FF26 > 46 # compat
+FF27 > 47 # compat
+FF28 > 48 # compat
+FF29 > 49 # compat
+FF2A > 4A # compat
+FF2B > 4B # compat
+FF2C > 4C # compat
+FF2D > 4D # compat
+FF2E > 4E # compat
+FF2F > 4F # compat
+FF30 > 50 # compat
+FF31 > 51 # compat
+FF32 > 52 # compat
+FF33 > 53 # compat
+FF34 > 54 # compat
+FF35 > 55 # compat
+FF36 > 56 # compat
+FF37 > 57 # compat
+FF38 > 58 # compat
+FF39 > 59 # compat
+FF3A > 5A # compat
+FF3B > 5B # compat
+FF3C > 5C # compat
+FF3D > 5D # compat
+FF3E > 5E # compat
+FF3F > 5F # compat
+FF40 > 60 # compat
+FF41 > 61 # compat
+FF42 > 62 # compat
+FF43 > 63 # compat
+FF44 > 64 # compat
+FF45 > 65 # compat
+FF46 > 66 # compat
+FF47 > 67 # compat
+FF48 > 68 # compat
+FF49 > 69 # compat
+FF4A > 6A # compat
+FF4B > 6B # compat
+FF4C > 6C # compat
+FF4D > 6D # compat
+FF4E > 6E # compat
+FF4F > 6F # compat
+FF50 > 70 # compat
+FF51 > 71 # compat
+FF52 > 72 # compat
+FF53 > 73 # compat
+FF54 > 74 # compat
+FF55 > 75 # compat
+FF56 > 76 # compat
+FF57 > 77 # compat
+FF58 > 78 # compat
+FF59 > 79 # compat
+FF5A > 7A # compat
+FF5B > 7B # compat
+FF5C > 7C # compat
+FF5D > 7D # compat
+FF5E > 7E # compat
+.
+
+STRICT
+/
+N 259
+0000 > 00
+0001 > 01
+0002 > 02
+0003 > 03
+0004 > 04
+0005 > 05
+0006 > 06
+0007 > 07
+0008 > 08
+0009 > 09
+000A > 0A
+000B > 0B
+000C > 0C
+000D > 0D
+000E > 0E
+000F > 0F
+0010 > 10
+0011 > 11
+0012 > 12
+0013 > 13
+0014 > 14
+0015 > 15
+0016 > 16
+0017 > 17
+0018 > 18
+0019 > 19
+001A > 1A
+001B > 1B
+001C > 1C
+001D > 1D
+001E > 1E
+001F > 1F
+0020 > 20
+0021 > 21
+0022 > 22
+0023 > 23
+0024 > 24
+0025 > 25
+0026 > 26
+0027 > 27
+0028 > 28
+0029 > 29
+002A > 2A
+002B > 2B
+002C > 2C
+002D > 2D
+002E > 2E
+002F > 2F
+0030 > 30
+0031 > 31
+0032 > 32
+0033 > 33
+0034 > 34
+0035 > 35
+0036 > 36
+0037 > 37
+0038 > 38
+0039 > 39
+003A > 3A
+003B > 3B
+003C > 3C
+003D > 3D
+003E > 3E
+003F > 3F
+0040 > 40
+0041 > 41
+0042 > 42
+0043 > 43
+0044 > 44
+0045 > 45
+0046 > 46
+0047 > 47
+0048 > 48
+0049 > 49
+004A > 4A
+004B > 4B
+004C > 4C
+004D > 4D
+004E > 4E
+004F > 4F
+0050 > 50
+0051 > 51
+0052 > 52
+0053 > 53
+0054 > 54
+0055 > 55
+0056 > 56
+0057 > 57
+0058 > 58
+0059 > 59
+005A > 5A
+005B > 5B
+005C > 5C
+005D > 5D
+005E > 5E
+005F > 5F
+0060 > 60
+0061 > 61
+0062 > 62
+0063 > 63
+0064 > 64
+0065 > 65
+0066 > 66
+0067 > 67
+0068 > 68
+0069 > 69
+006A > 6A
+006B > 6B
+006C > 6C
+006D > 6D
+006E > 6E
+006F > 6F
+0070 > 70
+0071 > 71
+0072 > 72
+0073 > 73
+0074 > 74
+0075 > 75
+0076 > 76
+0077 > 77
+0078 > 78
+0079 > 79
+007A > 7A
+007B > 7B
+007C > 7C
+007D > 7D
+007E > 7E
+007F > 7F
+00A0 > 9A
+00A9 > BF
+00B0 > 9C
+00B2 > 9D
+00B7 > 9E
+00F7 > 9F
+037E > 3B
+0387 > 9E
+0401 > B3
+0404 > B4
+0406 > B6 /
+     N 1
+     0308 > B7
+     .
+0407 > B7
+0410 > E1
+0411 > E2
+0412 > F7
+0413 > E7
+0414 > E4
+0415 > E5 /
+     N 1
+     0308 > B3
+     .
+0416 > F6
+0417 > FA
+0418 > E9 /
+     N 1
+     0306 > EA
+     .
+0419 > EA
+041A > EB
+041B > EC
+041C > ED
+041D > EE
+041E > EF
+041F > F0
+0420 > F2
+0421 > F3
+0422 > F4
+0423 > F5
+0424 > E6
+0425 > E8
+0426 > E3
+0427 > FE
+0428 > FB
+0429 > FD
+042A > FF
+042B > F9
+042C > F8
+042D > FC
+042E > E0
+042F > F1
+0430 > C1
+0431 > C2
+0432 > D7
+0433 > C7
+0434 > C4
+0435 > C5 /
+     N 1
+     0308 > A3
+     .
+0436 > D6
+0437 > DA
+0438 > C9 /
+     N 1
+     0306 > CA
+     .
+0439 > CA
+043A > CB
+043B > CC
+043C > CD
+043D > CE
+043E > CF
+043F > D0
+0440 > D2
+0441 > D3
+0442 > D4
+0443 > D5
+0444 > C6
+0445 > C8
+0446 > C3
+0447 > DE
+0448 > DB
+0449 > DD
+044A > DF
+044B > D9
+044C > D8
+044D > DC
+044E > C0
+044F > D1
+0451 > A3
+0454 > A4
+0456 > A6 /
+     N 1
+     0308 > A7
+     .
+0457 > A7
+0490 > BD
+0491 > AD
+1FEF > 60
+2022 > 95
+221A > 96
+2248 > 97
+2264 > 98
+2265 > 99
+2320 > 93
+2321 > 9B
+2500 > 80
+2502 > 81
+250C > 82
+2510 > 83
+2514 > 84
+2518 > 85
+251C > 86
+2524 > 87
+252C > 88
+2534 > 89
+253C > 8A
+2550 > A0
+2551 > A1
+2552 > A2
+2554 > A5
+2557 > A8
+2558 > A9
+2559 > AA
+255A > AB
+255B > AC
+255D > AE
+255E > AF
+255F > B0
+2560 > B1
+2561 > B2
+2563 > B5
+2566 > B8
+2567 > B9
+2568 > BA
+2569 > BB
+256A > BC
+256C > BE
+2580 > 8B
+2584 > 8C
+2588 > 8D
+258C > 8E
+2590 > 8F
+2591 > 90
+2592 > 91
+2593 > 92
+25A0 > 94
+.
+
+NFD
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 2500
+81 > 2502
+82 > 250C
+83 > 2510
+84 > 2514
+85 > 2518
+86 > 251C
+87 > 2524
+88 > 252C
+89 > 2534
+8A > 253C
+8B > 2580
+8C > 2584
+8D > 2588
+8E > 258C
+8F > 2590
+90 > 2591
+91 > 2592
+92 > 2593
+93 > 2320
+94 > 25A0
+95 > 2022
+96 > 221A
+97 > 2248
+98 > 2264
+99 > 2265
+9A > 00A0
+9B > 2321
+9C > 00B0
+9D > 00B2
+9E > 00B7
+9F > 00F7
+A0 > 2550
+A1 > 2551
+A2 > 2552
+A3 > 0435 0308
+A4 > 0454
+A5 > 2554
+A6 > 0456
+A7 > 0456 0308
+A8 > 2557
+A9 > 2558
+AA > 2559
+AB > 255A
+AC > 255B
+AD > 0491
+AE > 255D
+AF > 255E
+B0 > 255F
+B1 > 2560
+B2 > 2561
+B3 > 0415 0308
+B4 > 0404
+B5 > 2563
+B6 > 0406
+B7 > 0406 0308
+B8 > 2566
+B9 > 2567
+BA > 2568
+BB > 2569
+BC > 256A
+BD > 0490
+BE > 256C
+BF > 00A9
+C0 > 044E
+C1 > 0430
+C2 > 0431
+C3 > 0446
+C4 > 0434
+C5 > 0435
+C6 > 0444
+C7 > 0433
+C8 > 0445
+C9 > 0438
+CA > 0438 0306
+CB > 043A
+CC > 043B
+CD > 043C
+CE > 043D
+CF > 043E
+D0 > 043F
+D1 > 044F
+D2 > 0440
+D3 > 0441
+D4 > 0442
+D5 > 0443
+D6 > 0436
+D7 > 0432
+D8 > 044C
+D9 > 044B
+DA > 0437
+DB > 0448
+DC > 044D
+DD > 0449
+DE > 0447
+DF > 044A
+E0 > 042E
+E1 > 0410
+E2 > 0411
+E3 > 0426
+E4 > 0414
+E5 > 0415
+E6 > 0424
+E7 > 0413
+E8 > 0425
+E9 > 0418
+EA > 0418 0306
+EB > 041A
+EC > 041B
+ED > 041C
+EE > 041D
+EF > 041E
+F0 > 041F
+F1 > 042F
+F2 > 0420
+F3 > 0421
+F4 > 0422
+F5 > 0423
+F6 > 0416
+F7 > 0412
+F8 > 042C
+F9 > 042B
+FA > 0417
+FB > 0428
+FC > 042D
+FD > 0429
+FE > 0427
+FF > 042A
+.
+
+NFC
+/
+N 256
+00 > 0000
+01 > 0001
+02 > 0002
+03 > 0003
+04 > 0004
+05 > 0005
+06 > 0006
+07 > 0007
+08 > 0008
+09 > 0009
+0A > 000A
+0B > 000B
+0C > 000C
+0D > 000D
+0E > 000E
+0F > 000F
+10 > 0010
+11 > 0011
+12 > 0012
+13 > 0013
+14 > 0014
+15 > 0015
+16 > 0016
+17 > 0017
+18 > 0018
+19 > 0019
+1A > 001A
+1B > 001B
+1C > 001C
+1D > 001D
+1E > 001E
+1F > 001F
+20 > 0020
+21 > 0021
+22 > 0022
+23 > 0023
+24 > 0024
+25 > 0025
+26 > 0026
+27 > 0027
+28 > 0028
+29 > 0029
+2A > 002A
+2B > 002B
+2C > 002C
+2D > 002D
+2E > 002E
+2F > 002F
+30 > 0030
+31 > 0031
+32 > 0032
+33 > 0033
+34 > 0034
+35 > 0035
+36 > 0036
+37 > 0037
+38 > 0038
+39 > 0039
+3A > 003A
+3B > 003B
+3C > 003C
+3D > 003D
+3E > 003E
+3F > 003F
+40 > 0040
+41 > 0041
+42 > 0042
+43 > 0043
+44 > 0044
+45 > 0045
+46 > 0046
+47 > 0047
+48 > 0048
+49 > 0049
+4A > 004A
+4B > 004B
+4C > 004C
+4D > 004D
+4E > 004E
+4F > 004F
+50 > 0050
+51 > 0051
+52 > 0052
+53 > 0053
+54 > 0054
+55 > 0055
+56 > 0056
+57 > 0057
+58 > 0058
+59 > 0059
+5A > 005A
+5B > 005B
+5C > 005C
+5D > 005D
+5E > 005E
+5F > 005F
+60 > 0060
+61 > 0061
+62 > 0062
+63 > 0063
+64 > 0064
+65 > 0065
+66 > 0066
+67 > 0067
+68 > 0068
+69 > 0069
+6A > 006A
+6B > 006B
+6C > 006C
+6D > 006D
+6E > 006E
+6F > 006F
+70 > 0070
+71 > 0071
+72 > 0072
+73 > 0073
+74 > 0074
+75 > 0075
+76 > 0076
+77 > 0077
+78 > 0078
+79 > 0079
+7A > 007A
+7B > 007B
+7C > 007C
+7D > 007D
+7E > 007E
+7F > 007F
+80 > 2500
+81 > 2502
+82 > 250C
+83 > 2510
+84 > 2514
+85 > 2518
+86 > 251C
+87 > 2524
+88 > 252C
+89 > 2534
+8A > 253C
+8B > 2580
+8C > 2584
+8D > 2588
+8E > 258C
+8F > 2590
+90 > 2591
+91 > 2592
+92 > 2593
+93 > 2320
+94 > 25A0
+95 > 2022
+96 > 221A
+97 > 2248
+98 > 2264
+99 > 2265
+9A > 00A0
+9B > 2321
+9C > 00B0
+9D > 00B2
+9E > 00B7
+9F > 00F7
+A0 > 2550
+A1 > 2551
+A2 > 2552
+A3 > 0451
+A4 > 0454
+A5 > 2554
+A6 > 0456
+A7 > 0457
+A8 > 2557
+A9 > 2558
+AA > 2559
+AB > 255A
+AC > 255B
+AD > 0491
+AE > 255D
+AF > 255E
+B0 > 255F
+B1 > 2560
+B2 > 2561
+B3 > 0401
+B4 > 0404
+B5 > 2563
+B6 > 0406
+B7 > 0407
+B8 > 2566
+B9 > 2567
+BA > 2568
+BB > 2569
+BC > 256A
+BD > 0490
+BE > 256C
+BF > 00A9
+C0 > 044E
+C1 > 0430
+C2 > 0431
+C3 > 0446
+C4 > 0434
+C5 > 0435
+C6 > 0444
+C7 > 0433
+C8 > 0445
+C9 > 0438
+CA > 0439
+CB > 043A
+CC > 043B
+CD > 043C
+CE > 043D
+CF > 043E
+D0 > 043F
+D1 > 044F
+D2 > 0440
+D3 > 0441
+D4 > 0442
+D5 > 0443
+D6 > 0436
+D7 > 0432
+D8 > 044C
+D9 > 044B
+DA > 0437
+DB > 0448
+DC > 044D
+DD > 0449
+DE > 0447
+DF > 044A
+E0 > 042E
+E1 > 0410
+E2 > 0411
+E3 > 0426
+E4 > 0414
+E5 > 0415
+E6 > 0424
+E7 > 0413
+E8 > 0425
+E9 > 0418
+EA > 0419
+EB > 041A
+EC > 041B
+ED > 041C
+EE > 041D
+EF > 041E
+F0 > 041F
+F1 > 042F
+F2 > 0420
+F3 > 0421
+F4 > 0422
+F5 > 0423
+F6 > 0416
+F7 > 0412
+F8 > 042C
+F9 > 042B
+FA > 0417
+FB > 0428
+FC > 042D
+FD > 0429
+FE > 0427
+FF > 042A
+.
+
+COMP
+= NFC
+.
diff --git a/data/koi8-u.cset b/data/koi8-u.cset
new file mode 100644 (file)
index 0000000..3f8e2e9
--- /dev/null
@@ -0,0 +1,262 @@
+# Aspell Character Data File.
+= koi8-u
+> ascii
+/
+# <char> <uni> <type> <display> <upper> <lower> <title> <plain>
+#                                                         <sl-first> <sl-rest>
+00 0000 - N 00 00 00 00 00 00 # <control>
+01 0001 . N 01 01 01 00 00 00 # <unused control>
+02 0002 . N 02 02 02 00 00 00 # <unused control>
+03 0003 . N 03 03 03 00 00 00 # <unused control>
+04 0004 . N 04 04 04 00 00 00 # <unused control>
+05 0005 . N 05 05 05 00 00 00 # <unused control>
+06 0006 . N 06 06 06 00 00 00 # <unused control>
+07 0007 . N 07 07 07 00 00 00 # <unused control>
+08 0008 . N 08 08 08 00 00 00 # <unused control>
+09 0009 . N 09 09 09 00 00 00 # <unused control>
+0A 000A . N 0A 0A 0A 00 00 00 # <unused control>
+0B 000B . N 0B 0B 0B 00 00 00 # <unused control>
+0C 000C . N 0C 0C 0C 00 00 00 # <unused control>
+0D 000D . N 0D 0D 0D 00 00 00 # <unused control>
+0E 000E . N 0E 0E 0E 00 00 00 # <unused control>
+0F 000F . N 0F 0F 0F 00 00 00 # <unused control>
+10 0010 - N 10 10 10 00 00 00 # <control>
+11 0011 . N 11 11 11 00 00 00 # <unused control>
+12 0012 . N 12 12 12 00 00 00 # <unused control>
+13 0013 . N 13 13 13 00 00 00 # <unused control>
+14 0014 . N 14 14 14 00 00 00 # <unused control>
+15 0015 . N 15 15 15 00 00 00 # <unused control>
+16 0016 . N 16 16 16 00 00 00 # <unused control>
+17 0017 . N 17 17 17 00 00 00 # <unused control>
+18 0018 . N 18 18 18 00 00 00 # <unused control>
+19 0019 . N 19 19 19 00 00 00 # <unused control>
+1A 001A . N 1A 1A 1A 00 00 00 # <unused control>
+1B 001B . N 1B 1B 1B 00 00 00 # <unused control>
+1C 001C . N 1C 1C 1C 00 00 00 # <unused control>
+1D 001D . N 1D 1D 1D 00 00 00 # <unused control>
+1E 001E . N 1E 1E 1E 00 00 00 # <unused control>
+1F 001F . N 1F 1F 1F 00 00 00 # <unused control>
+20 0020 W Y 20 20 20 00 00 00 # SPACE
+21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK
+22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK
+23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN
+24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN
+25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN
+26 0026 - Y 26 26 26 00 00 00 # AMPERSAND
+27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE
+28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS
+29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS
+2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK
+2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN
+2C 002C - Y 2C 2C 2C 00 00 00 # COMMA
+2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS
+2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP
+2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS
+30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO
+31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE
+32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO
+33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE
+34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR
+35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE
+36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX
+37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN
+38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT
+39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE
+3A 003A - Y 3A 3A 3A 00 00 00 # COLON
+3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON
+3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN
+3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN
+3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN
+3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK
+40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT
+41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A
+42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B
+43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C
+44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D
+45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E
+46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F
+47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G
+48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H
+49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I
+4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J
+4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K
+4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L
+4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M
+4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N
+4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O
+50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P
+51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q
+52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R
+53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S
+54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T
+55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U
+56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V
+57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W
+58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X
+59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y
+5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z
+5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET
+5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS
+5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET
+5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT
+5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE
+60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT
+61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A
+62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B
+63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C
+64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D
+65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E
+66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F
+67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G
+68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H
+69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I
+6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J
+6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K
+6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L
+6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M
+6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N
+6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O
+70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P
+71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q
+72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R
+73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S
+74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T
+75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U
+76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V
+77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W
+78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X
+79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y
+7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z
+7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET
+7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE
+7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET
+7E 007E - Y 7E 7E 7E 00 00 00 # TILDE
+7F 007F - N 7F 7F 7F 00 00 00 # <control>
+80 2500 . N 80 80 80 00 00 00 # <unused special>
+81 2502 . N 81 81 81 00 00 00 # <unused special>
+82 250C . N 82 82 82 00 00 00 # <unused special>
+83 2510 . N 83 83 83 00 00 00 # <unused special>
+84 2514 . N 84 84 84 00 00 00 # <unused special>
+85 2518 . N 85 85 85 00 00 00 # <unused special>
+86 251C . N 86 86 86 00 00 00 # <unused special>
+87 2524 . N 87 87 87 00 00 00 # <unused special>
+88 252C . N 88 88 88 00 00 00 # <unused special>
+89 2534 . N 89 89 89 00 00 00 # <unused special>
+8A 253C . N 8A 8A 8A 00 00 00 # <unused special>
+8B 2580 . N 8B 8B 8B 00 00 00 # <unused special>
+8C 2584 . N 8C 8C 8C 00 00 00 # <unused special>
+8D 2588 . N 8D 8D 8D 00 00 00 # <unused special>
+8E 258C . N 8E 8E 8E 00 00 00 # <unused special>
+8F 2590 . N 8F 8F 8F 00 00 00 # <unused special>
+90 2591 . N 90 90 90 00 00 00 # <unused special>
+91 2592 . N 91 91 91 00 00 00 # <unused special>
+92 2593 . N 92 92 92 00 00 00 # <unused special>
+93 2320 . N 93 93 93 00 00 00 # <unused special>
+94 25A0 . N 94 94 94 00 00 00 # <unused special>
+95 2022 - Y 95 95 95 00 00 00 # BULLET
+96 221A . N 96 96 96 00 00 00 # <unused special>
+97 2248 . N 97 97 97 00 00 00 # <unused special>
+98 2264 . N 98 98 98 00 00 00 # <unused special>
+99 2265 . N 99 99 99 00 00 00 # <unused special>
+9A 00A0 W Y 9A 9A 9A 00 00 00 # NO-BREAK SPACE
+9B 2321 . N 9B 9B 9B 00 00 00 # <unused special>
+9C 00B0 - Y 9C 9C 9C 00 00 00 # DEGREE SIGN
+9D 00B2 - Y 9D 9D 9D 00 00 00 # SUPERSCRIPT TWO
+9E 00B7 - Y 9E 9E 9E 00 00 00 # MIDDLE DOT
+9F 00F7 - Y 9F 9F 9F 00 00 00 # DIVISION SIGN
+A0 2550 . N A0 A0 A0 00 00 00 # <unused special>
+A1 2551 . N A1 A1 A1 00 00 00 # <unused special>
+A2 2552 . N A2 A2 A2 00 00 00 # <unused special>
+A3 0451 L Y B3 A3 B3 A3 A3 A3 # CYRILLIC SMALL LETTER IO
+A4 0454 L Y B4 A4 B4 A4 A4 A4 # CYRILLIC SMALL LETTER UKRAINIAN IE
+A5 2554 . N A5 A5 A5 00 00 00 # <unused special>
+A6 0456 L Y B6 A6 B6 A6 A6 A6 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+A7 0457 L Y B7 A7 B7 A7 A7 A7 # CYRILLIC SMALL LETTER YI
+A8 2557 . N A8 A8 A8 00 00 00 # <unused special>
+A9 2558 . N A9 A9 A9 00 00 00 # <unused special>
+AA 2559 . N AA AA AA 00 00 00 # <unused special>
+AB 255A . N AB AB AB 00 00 00 # <unused special>
+AC 255B . N AC AC AC 00 00 00 # <unused special>
+AD 0491 L Y BD AD BD AD AD AD # CYRILLIC SMALL LETTER GHE WITH UPTURN
+AE 255D . N AE AE AE 00 00 00 # <unused special>
+AF 255E . N AF AF AF 00 00 00 # <unused special>
+B0 255F . N B0 B0 B0 00 00 00 # <unused special>
+B1 2560 . N B1 B1 B1 00 00 00 # <unused special>
+B2 2561 . N B2 B2 B2 00 00 00 # <unused special>
+B3 0401 L Y B3 A3 B3 B3 A3 A3 # CYRILLIC CAPITAL LETTER IO
+B4 0404 L Y B4 A4 B4 B4 A4 A4 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+B5 2563 . N B5 B5 B5 00 00 00 # <unused special>
+B6 0406 L Y B6 A6 B6 B6 A6 A6 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+B7 0407 L Y B7 A7 B7 B7 A7 A7 # CYRILLIC CAPITAL LETTER YI
+B8 2566 . N B8 B8 B8 00 00 00 # <unused special>
+B9 2567 . N B9 B9 B9 00 00 00 # <unused special>
+BA 2568 . N BA BA BA 00 00 00 # <unused special>
+BB 2569 . N BB BB BB 00 00 00 # <unused special>
+BC 256A . N BC BC BC 00 00 00 # <unused special>
+BD 0490 L Y BD AD BD BD AD AD # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+BE 256C . N BE BE BE 00 00 00 # <unused special>
+BF 00A9 - Y BF BF BF 00 00 00 # COPYRIGHT SIGN
+C0 044E L Y E0 C0 E0 C0 2A 00 # CYRILLIC SMALL LETTER YU
+C1 0430 L Y E1 C1 E1 C1 2A 00 # CYRILLIC SMALL LETTER A
+C2 0431 L Y E2 C2 E2 C2 C2 C2 # CYRILLIC SMALL LETTER BE
+C3 0446 L Y E3 C3 E3 C3 C3 C3 # CYRILLIC SMALL LETTER TSE
+C4 0434 L Y E4 C4 E4 C4 C4 C4 # CYRILLIC SMALL LETTER DE
+C5 0435 L Y E5 C5 E5 C5 2A 00 # CYRILLIC SMALL LETTER IE
+C6 0444 L Y E6 C6 E6 C6 C6 C6 # CYRILLIC SMALL LETTER EF
+C7 0433 L Y E7 C7 E7 C7 C7 C7 # CYRILLIC SMALL LETTER GHE
+C8 0445 L Y E8 C8 E8 C8 C8 C8 # CYRILLIC SMALL LETTER HA
+C9 0438 L Y E9 C9 E9 C9 2A 00 # CYRILLIC SMALL LETTER I
+CA 0439 L Y EA CA EA CA CA CA # CYRILLIC SMALL LETTER SHORT I
+CB 043A L Y EB CB EB CB CB CB # CYRILLIC SMALL LETTER KA
+CC 043B L Y EC CC EC CC CC CC # CYRILLIC SMALL LETTER EL
+CD 043C L Y ED CD ED CD CD CD # CYRILLIC SMALL LETTER EM
+CE 043D L Y EE CE EE CE CE CE # CYRILLIC SMALL LETTER EN
+CF 043E L Y EF CF EF CF 2A 00 # CYRILLIC SMALL LETTER O
+D0 043F L Y F0 D0 F0 D0 D0 D0 # CYRILLIC SMALL LETTER PE
+D1 044F L Y F1 D1 F1 D1 2A 00 # CYRILLIC SMALL LETTER YA
+D2 0440 L Y F2 D2 F2 D2 D2 D2 # CYRILLIC SMALL LETTER ER
+D3 0441 L Y F3 D3 F3 D3 D3 D3 # CYRILLIC SMALL LETTER ES
+D4 0442 L Y F4 D4 F4 D4 D4 D4 # CYRILLIC SMALL LETTER TE
+D5 0443 L Y F5 D5 F5 D5 2A 00 # CYRILLIC SMALL LETTER U
+D6 0436 L Y F6 D6 F6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE
+D7 0432 L Y F7 D7 F7 D7 D7 D7 # CYRILLIC SMALL LETTER VE
+D8 044C L Y F8 D8 F8 D8 D8 D8 # CYRILLIC SMALL LETTER SOFT SIGN
+D9 044B L Y F9 D9 F9 D9 2A 00 # CYRILLIC SMALL LETTER YERU
+DA 0437 L Y FA DA FA DA DA DA # CYRILLIC SMALL LETTER ZE
+DB 0448 L Y FB DB FB DB DB DB # CYRILLIC SMALL LETTER SHA
+DC 044D L Y FC DC FC DC 2A 00 # CYRILLIC SMALL LETTER E
+DD 0449 L Y FD DD FD DD DD DD # CYRILLIC SMALL LETTER SHCHA
+DE 0447 L Y FE DE FE DE DE DE # CYRILLIC SMALL LETTER CHE
+DF 044A L Y FF DF FF DF DF DF # CYRILLIC SMALL LETTER HARD SIGN
+E0 042E L Y E0 C0 E0 E0 2A 00 # CYRILLIC CAPITAL LETTER YU
+E1 0410 L Y E1 C1 E1 E1 2A 00 # CYRILLIC CAPITAL LETTER A
+E2 0411 L Y E2 C2 E2 E2 C2 C2 # CYRILLIC CAPITAL LETTER BE
+E3 0426 L Y E3 C3 E3 E3 C3 C3 # CYRILLIC CAPITAL LETTER TSE
+E4 0414 L Y E4 C4 E4 E4 C4 C4 # CYRILLIC CAPITAL LETTER DE
+E5 0415 L Y E5 C5 E5 E5 2A 00 # CYRILLIC CAPITAL LETTER IE
+E6 0424 L Y E6 C6 E6 E6 C6 C6 # CYRILLIC CAPITAL LETTER EF
+E7 0413 L Y E7 C7 E7 E7 C7 C7 # CYRILLIC CAPITAL LETTER GHE
+E8 0425 L Y E8 C8 E8 E8 C8 C8 # CYRILLIC CAPITAL LETTER HA
+E9 0418 L Y E9 C9 E9 E9 2A 00 # CYRILLIC CAPITAL LETTER I
+EA 0419 L Y EA CA EA EA CA CA # CYRILLIC CAPITAL LETTER SHORT I
+EB 041A L Y EB CB EB EB CB CB # CYRILLIC CAPITAL LETTER KA
+EC 041B L Y EC CC EC EC CC CC # CYRILLIC CAPITAL LETTER EL
+ED 041C L Y ED CD ED ED CD CD # CYRILLIC CAPITAL LETTER EM
+EE 041D L Y EE CE EE EE CE CE # CYRILLIC CAPITAL LETTER EN
+EF 041E L Y EF CF EF EF 2A 00 # CYRILLIC CAPITAL LETTER O
+F0 041F L Y F0 D0 F0 F0 D0 D0 # CYRILLIC CAPITAL LETTER PE
+F1 042F L Y F1 D1 F1 F1 2A 00 # CYRILLIC CAPITAL LETTER YA
+F2 0420 L Y F2 D2 F2 F2 D2 D2 # CYRILLIC CAPITAL LETTER ER
+F3 0421 L Y F3 D3 F3 F3 D3 D3 # CYRILLIC CAPITAL LETTER ES
+F4 0422 L Y F4 D4 F4 F4 D4 D4 # CYRILLIC CAPITAL LETTER TE
+F5 0423 L Y F5 D5 F5 F5 2A 00 # CYRILLIC CAPITAL LETTER U
+F6 0416 L Y F6 D6 F6 F6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE
+F7 0412 L Y F7 D7 F7 F7 D7 D7 # CYRILLIC CAPITAL LETTER VE
+F8 042C L Y F8 D8 F8 F8 D8 D8 # CYRILLIC CAPITAL LETTER SOFT SIGN
+F9 042B L Y F9 D9 F9 F9 2A 00 # CYRILLIC CAPITAL LETTER YERU
+FA 0417 L Y FA DA FA FA DA DA # CYRILLIC CAPITAL LETTER ZE
+FB 0428 L Y FB DB FB FB DB DB # CYRILLIC CAPITAL LETTER SHA
+FC 042D L Y FC DC FC FC 2A 00 # CYRILLIC CAPITAL LETTER E
+FD 0429 L Y FD DD FD FD DD DD # CYRILLIC CAPITAL LETTER SHCHA
+FE 0427 L Y FE DE FE FE DE DE # CYRILLIC CAPITAL LETTER CHE
+FF 042A L Y FF DF FF FF DF DF # CYRILLIC CAPITAL LETTER HARD SIGN
diff --git a/data/split.kbd b/data/split.kbd
new file mode 100644 (file)
index 0000000..3628872
--- /dev/null
@@ -0,0 +1,23 @@
+# Natural (split) keyboard data file
+
+qw
+we
+er
+rt
+yu
+ui
+io
+op
+as
+sd
+df
+fg
+hj
+jk
+kl
+zx
+xc
+cv
+bn
+nm
+
diff --git a/data/standard.kbd b/data/standard.kbd
new file mode 100644 (file)
index 0000000..fd57868
--- /dev/null
@@ -0,0 +1,25 @@
+# Standard keyboard data file
+
+qw
+we
+er
+rt
+ty
+yu
+ui
+io
+op
+as
+sd
+df
+fg
+gh
+hj
+jk
+kl
+zx
+xc
+cv
+vb
+bn
+nm
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..aeba4e8
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,632 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
+# Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+              s/^ *//
+              s/ \\*$//
+              s/$/:/
+              p
+            }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644 (file)
index 0000000..9e90a99
--- /dev/null
@@ -0,0 +1,13 @@
+noinst_PROGRAMS = example-c list-dicts
+
+AM_CPPFLAGS = -I${top_srcdir}/interfaces/cc/ -I${top_srcdir}/common
+
+example_c_SOURCES = example-c.c
+
+example_c_LDADD = ../libaspell.la
+
+
+list_dicts_SOURCES = list-dicts.c
+
+list_dicts_LDADD = ../libaspell.la
+
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644 (file)
index 0000000..138b8f9
--- /dev/null
@@ -0,0 +1,490 @@
+# Makefile.in generated by automake 1.10.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = example-c$(EXEEXT) list-dicts$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/gen/settings.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_example_c_OBJECTS = example-c.$(OBJEXT)
+example_c_OBJECTS = $(am_example_c_OBJECTS)
+example_c_DEPENDENCIES = ../libaspell.la
+am_list_dicts_OBJECTS = list-dicts.$(OBJEXT)
+list_dicts_OBJECTS = $(am_list_dicts_OBJECTS)
+list_dicts_DEPENDENCIES = ../libaspell.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/gen
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(example_c_SOURCES) $(list_dicts_SOURCES)
+DIST_SOURCES = $(example_c_SOURCES) $(list_dicts_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDE = @CURSES_INCLUDE@
+CURSES_LIB = @CURSES_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERLPROG = @PERLPROG@
+POSUB = @POSUB@
+PTHREAD_LIB = @PTHREAD_LIB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgdocdir = @pkgdocdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I${top_srcdir}/interfaces/cc/ -I${top_srcdir}/common
+example_c_SOURCES = example-c.c
+example_c_LDADD = ../libaspell.la
+list_dicts_SOURCES = list-dicts.c
+list_dicts_LDADD = ../libaspell.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  examples/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+example-c$(EXEEXT): $(example_c_OBJECTS) $(example_c_DEPENDENCIES) 
+       @rm -f example-c$(EXEEXT)
+       $(LINK) $(example_c_OBJECTS) $(example_c_LDADD) $(LIBS)
+list-dicts$(EXEEXT): $(list_dicts_OBJECTS) $(list_dicts_DEPENDENCIES) 
+       @rm -f list-dicts$(EXEEXT)
+       $(LINK) $(list_dicts_OBJECTS) $(list_dicts_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example-c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list-dicts.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/example-c.c b/examples/example-c.c
new file mode 100644 (file)
index 0000000..5c159e9
--- /dev/null
@@ -0,0 +1,343 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2000-2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/. 
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "aspell.h"
+
+static void print_word_list(AspellSpeller * speller, 
+                           const AspellWordList *wl,
+                           char delem) 
+{
+  if (wl == 0) {
+    printf("Error: %s\n", aspell_speller_error_message(speller));
+  } else {
+    AspellStringEnumeration * els = aspell_word_list_elements(wl);
+    const char * word;
+    while ( (word = aspell_string_enumeration_next(els)) != 0) {
+      fputs(word, stdout);
+      putc(delem, stdout);
+    }
+    delete_aspell_string_enumeration(els);
+  }
+}
+
+#define check_for_error(speller)                                  \
+  if (aspell_speller_error(speller) != 0) {                       \
+    printf("Error: %s\n", aspell_speller_error_message(speller)); \
+    break;                                                        \
+  }
+
+#define check_for_config_error(config)                            \
+  if (aspell_config_error(config) != 0) {                         \
+    printf("Error: %s\n", aspell_config_error_message(config));   \
+    break;                                                        \
+  }
+
+static void check_document(AspellSpeller * speller, const char * file);
+
+int main(int argc, const char *argv[]) 
+{
+  AspellCanHaveError * ret;
+  AspellSpeller * speller;
+  int have;
+  char word[81];
+  char * p;
+  char * word_end;
+  AspellConfig * config;
+
+  if (argc < 2) {
+    printf("Usage: %s <language> [<size>|- [[<jargon>|- [<encoding>]]]\n", argv[0]);
+    return 1;
+  }
+
+  config = new_aspell_config();
+
+  aspell_config_replace(config, "lang", argv[1]);
+
+  if (argc >= 3 && argv[2][0] != '-' && argv[2][1] != '\0')
+    aspell_config_replace(config, "size", argv[2]);
+
+  if (argc >= 4 && argv[3][0] != '-')
+    aspell_config_replace(config, "jargon", argv[3]);
+
+  if (argc >= 5 && argv[4][0] != '-')
+    aspell_config_replace(config, "encoding", argv[4]);
+
+  ret = new_aspell_speller(config);
+
+  delete_aspell_config(config);
+
+  if (aspell_error(ret) != 0) {
+    printf("Error: %s\n",aspell_error_message(ret));
+    delete_aspell_can_have_error(ret);
+    return 2;
+  }
+  speller = to_aspell_speller(ret);
+  config = aspell_speller_config(speller);
+
+  fputs("Using: ",                                      stdout);
+  fputs(aspell_config_retrieve(config, "lang"),         stdout);
+  fputs("-",                                            stdout);
+  fputs(aspell_config_retrieve(config, "jargon"),       stdout);
+  fputs("-",                                            stdout);
+  fputs(aspell_config_retrieve(config, "size"),         stdout);
+  fputs("-",                                            stdout);
+  fputs(aspell_config_retrieve(config, "module"),       stdout);
+  fputs("\n\n",                                         stdout);
+
+  puts("Type \"h\" for help.\n");
+
+  while (fgets(word, 80, stdin) != 0) {
+
+    /* remove trailing spaces */
+
+    word_end = strchr(word, '\0') - 1;
+    while (word_end != word && (*word_end == '\n' || *word_end == ' ')) 
+      --word_end;
+    ++word_end;
+    *word_end = '\0';
+    
+    putchar('\n');
+    switch (word[0]) {
+    case '\0':
+      break;
+    case 'h':
+      puts(
+       "Usage: \n"
+       "  h(elp)      help\n"
+       "  c <word>    check if a word is the correct spelling\n"
+       "  s <word>    print out a list of suggestions for a word\n"
+       "  a <word>    add a word to the personal word list\n"
+       "  i <word>    ignore a word for the rest of the session\n"
+        "  d <file>    spell checks a document\n"
+       "  p           dumps the personal word list\n"
+       "  P           dumps the session word list\n"
+       "  m           dumps the main  word list\n"
+        "  o <option> <value> sets a config option\n"
+       "  r <option>         retrieves a config option\n"
+        "  l <option>         retrieves a config option as a list\n"
+       "  S           saves all word lists\n"
+       "  C           clear the current session word list\n"
+       "  x           quit\n"  );
+      break;
+    case 'p':
+      print_word_list(speller, 
+                     aspell_speller_personal_word_list(speller), '\n');
+      break;
+    case 'P':
+      print_word_list(speller, 
+                     aspell_speller_session_word_list(speller), '\n');
+      break;
+    case 'm':
+      print_word_list(speller, 
+                     aspell_speller_main_word_list(speller), '\n');
+      break;
+    case 'S':
+      aspell_speller_save_all_word_lists(speller);
+      check_for_error(speller);
+      break;
+    case 'C': 
+      aspell_speller_clear_session(speller);
+      check_for_error(speller);
+      break;
+    case 'x':
+      goto END;
+    case 'c':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <word>\n", word[0]);
+      } else {
+       have = aspell_speller_check(speller, word + 2, -1);
+       if (have == 1) 
+         puts("correct");
+       else if (have == 0)
+         puts("incorrect");
+       else
+         printf("Error: %s\n", aspell_speller_error_message(speller));
+      }
+      break;
+    case 's':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <word>\n", word[0]);
+      } else {
+       print_word_list(speller, 
+                       aspell_speller_suggest(speller, word + 2, -1), '\n');
+      }
+      break;
+    case 'a':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <word>\n", word[0]);
+      } else {
+       aspell_speller_add_to_personal(speller, word + 2, -1);
+       check_for_error(speller);
+      }
+      break;
+    case 'i':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <word>\n", word[0]);
+      } else {
+       aspell_speller_add_to_session(speller, word + 2, -1);
+       check_for_error(speller);
+      }
+      break;
+    case 'o':
+      word[80] = '\0'; /* to make sure strchr doesn't run off end of string */
+      p = strchr(word + 3, ' ');
+      if (strlen(word) < 3 || p == 0) {
+       printf("Usage: %c <option> <value>\n", word[0]);
+      } else {
+       *p = '\0';
+       ++p;
+       aspell_config_replace(config, word + 2, p);
+       check_for_config_error(config);
+      }
+      break;
+    case 'r':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <option>\n", word[0]);
+      } else {
+       const char * val = aspell_config_retrieve(config, word + 2);
+       check_for_config_error(config);
+       if (val)
+         printf("%s = \"%s\"\n", word + 2, val);
+      }
+      break;
+    case 'l':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <option>\n", word[0]);
+      } else {
+       AspellStringList * lst = new_aspell_string_list();
+       AspellMutableContainer * lst0 
+         = aspell_string_list_to_mutable_container(lst);
+       AspellStringEnumeration * els;
+       const char * val;
+       aspell_config_retrieve_list(config, word + 2, lst0);
+       check_for_config_error(config);
+       els = aspell_string_list_elements(lst);
+       printf("%s:\n", word + 2);
+       while ( (val = aspell_string_enumeration_next(els)) != 0)
+         printf("  %s\n", val);
+       delete_aspell_string_enumeration(els);
+       delete_aspell_string_list(lst);
+      }
+      break;
+    case 'd':
+      if (strlen(word) < 3) {
+       printf("Usage: %c <file>\n", word[0]);
+      } else {
+       check_document(speller, word + 2);
+       printf("\n");
+      }
+      break;
+    default:
+      printf("Unknown Command: %s\n", word);
+    }
+    putchar('\n');
+  }
+ END:
+  delete_aspell_speller(speller);
+  return 0;
+}
+
+static void check_document(AspellSpeller * speller, const char * filename)
+{
+  /* For readablity this function does not worry about buffer overrun.
+     This is meant as an illustrative example only.  Please do not
+     attempt to spell check your documents with this function. */
+
+  AspellCanHaveError * ret;
+  AspellDocumentChecker * checker;
+  AspellToken token;
+  FILE * doc, * out;
+  char line[256], repl[256], checked_filename[256];
+  int diff;
+  unsigned int repl_len;
+  char * word_begin;
+
+  /* Open the file */
+  doc = fopen(filename, "r");
+  if (doc <= 0) {
+    printf("Error: Unable to open the file \"%s\" for reading.", filename);
+    return;
+  }
+
+  /* Open filename.checked for writing the results */
+  strcpy(checked_filename, filename);
+  strcat(checked_filename, ".checked");
+  out = fopen(checked_filename, "w");
+  if (out <= 0) {
+    printf("Error: Unable to open the file \"%s\" for writing.", 
+          checked_filename);
+    fclose(doc);
+    return;
+  }
+
+  /* Set up the document checker */
+  ret = new_aspell_document_checker(speller);
+  if (aspell_error(ret) != 0) {
+    printf("Error: %s\n",aspell_error_message(ret));
+    fclose(out);
+    fclose(doc);
+    return;
+  }
+  checker = to_aspell_document_checker(ret);
+
+  while (fgets(line, 256, doc)) 
+  {
+    /* First process the line */
+    aspell_document_checker_process(checker, line, -1);
+
+    diff = 0;
+
+    /* Now find the misspellings in the line */
+    while (token = aspell_document_checker_next_misspelling(checker),
+          token.len != 0)
+    {
+      /* Print out the misspelling and get a replacement from the user */
+
+      /* Pay particular attention to how token.offset and diff is used */
+        
+      word_begin = line + token.offset + diff;
+      printf("%.*s*%.*s*%s",
+            (int)(token.offset + diff), line,
+            (int)token.len, word_begin,
+            word_begin + token.len);
+
+      printf("Suggestions: ");
+      print_word_list(speller, 
+                     aspell_speller_suggest(speller, word_begin, token.len), 
+                     ' ');
+      printf("\n");
+
+      printf("Replacement? ");
+      fgets(repl, 256, stdin);
+      printf("\n");
+      if (repl[0] == '\n') continue; /* ignore the current misspelling */
+      repl_len = strlen(repl) - 1;
+      repl[repl_len] = '\0';
+
+      /* Replace the misspelled word with the replacement */
+      diff += repl_len - token.len;
+      memmove(word_begin + repl_len, word_begin + token.len,
+             strlen(word_begin + token.len) + 1);
+      memcpy(word_begin, repl, repl_len);
+    }
+
+    /* print the line to filename.checked */
+    fputs(line, out);
+  }
+
+  delete_aspell_document_checker(checker);
+
+  fclose(out);
+  fclose(doc);
+
+  printf("Done.  Results saved to \"%s\".", checked_filename);
+}
+
diff --git a/examples/list-dicts.c b/examples/list-dicts.c
new file mode 100644 (file)
index 0000000..c826c9b
--- /dev/null
@@ -0,0 +1,44 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/. 
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "aspell.h"
+
+int main(int argc, const char *argv[]) 
+{
+  AspellConfig * config;
+  AspellDictInfoList * dlist;
+  AspellDictInfoEnumeration * dels;
+  const AspellDictInfo * entry;
+
+  config = new_aspell_config();
+
+  /* the returned pointer should _not_ need to be deleted */
+  dlist = get_aspell_dict_info_list(config);
+
+  /* config is no longer needed */
+  delete_aspell_config(config);
+
+  dels = aspell_dict_info_list_elements(dlist);
+
+  printf("%-30s%-8s%-20s%-6s%-10s\n", "NAME", "CODE", "JARGON", "SIZE", "MODULE");
+  while ( (entry = aspell_dict_info_enumeration_next(dels)) != 0) 
+  {
+    printf("%-30s%-8s%-20s%-6s%-10s\n",
+          entry->name,
+          entry->code, entry->jargon, 
+          entry->size_str, entry->module->name);
+  }
+
+  delete_aspell_dict_info_enumeration(dels);
+
+  return 0;
+}
+
diff --git a/gen/Makefile.in b/gen/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/gen/filter.pot b/gen/filter.pot
new file mode 100644 (file)
index 0000000..a56ea71
--- /dev/null
@@ -0,0 +1,127 @@
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr ""
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr ""
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr ""
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr ""
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr ""
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+
diff --git a/gen/mk-dirs_h.pl b/gen/mk-dirs_h.pl
new file mode 100644 (file)
index 0000000..5c821b1
--- /dev/null
@@ -0,0 +1,16 @@
+
+foreach (@ARGV) {s|/+|/|g; s|/$||;}
+
+($prefix, $data, $lib, $conf) = @ARGV;
+
+sub def ( $ ) {
+  return qq|"<prefix:$1>"| if $_[0] =~ m|^$prefix/?(.+)$|;
+  return qq|"$_[0]"|;
+}
+
+printf qq|#define PREFIX "%s"\n|, $prefix;
+printf qq|#define DATA_DIR %s\n|, def($data);
+print  qq|#define DICT_DIR "<data-dir>"\n| if $lib eq $data;
+printf qq|#define DICT_DIR %s\n|, def($lib) if $lib ne $data;
+printf qq|#define CONF_DIR %s\n|, def($conf);
+
diff --git a/gen/mk-filter-pot.pl b/gen/mk-filter-pot.pl
new file mode 100644 (file)
index 0000000..ac2423e
--- /dev/null
@@ -0,0 +1,34 @@
+sub prep_str($)
+{
+  local $_ = $_[0];
+  s/\\(.)/$1/g;
+  s/([\"\\])/\\$1/g;
+  return $_;
+}
+
+open OUT, ">gen/filter.pot";
+
+print OUT <<'---';
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+---
+
+@files = (<modules/filter/*-filter.info>, <modules/filter/modes/*.amf>);
+
+foreach $f (@files)
+{
+  open IN, $f;
+  while (<IN>) 
+  {
+    next unless /^\s*(description|desc)\s+(.+?)\s*$/i;
+    $_ = prep_str($2);
+    print OUT "\#: $f:$.\n";
+    print OUT "msgid \"$_\"\n";
+    print OUT "msgstr \"\"\n";
+    print OUT "\n";
+  }
+  close IN;
+}
+
+close OUT;
diff --git a/gen/mk-static-filter.pl b/gen/mk-static-filter.pl
new file mode 100644 (file)
index 0000000..8692bd0
--- /dev/null
@@ -0,0 +1,197 @@
+#
+#unmask dots and mask quotation marks and backslashes
+sub prep_str($)
+{
+  local $_ = $_[0];
+  s/\\(.)/$1/g;
+  s/([\"\\])/\\$1/g;
+  return $_;
+}
+
+#holds the description of all recognized filters
+%filters=();
+
+while ($filename=shift) {
+
+#check if filter description file (*-filter.info) has been read before  
+  $filtername=$filename;
+  $filtername=~s/-filter\.info$//;
+  $filtername=~s/[^\/]*\///g;
+  ( exists $filters{$filtername}) &&
+   (printf STDERR "filter allready defined $filtername($filename); ignored;\n") && next;
+  ( open OPTIONFILE,"<$filename") || 
+   (printf STDERR "can't open `$filename'; ignored;\n") && next;
+
+#create basic structure holding description of filter types and options
+  $filter=$filters{$filtername}={};
+  ${$filter}{"NAME"}=$filtername;
+  ${$filter}{"DECODER"}="0";
+  ${$filter}{"FILTER"}="0";
+  ${$filter}{"ENCODER"}="0";
+  ${$filter}{"DESCRIPTION"}="";
+  $inoption=0;
+
+#parse file and fill filter structure
+  while (<OPTIONFILE>) {
+    chomp;
+
+#ignore comments and empty lines; strip leading and trailing whitespaces
+    (($_=~/^\#/) || ($_=~/^[ \t]*$/)) && next;
+    $_=~s/[ \t]+$//;
+    $_=~s/^[ \t]+//;
+#check if forced end of file
+    ($_=~s/^ENDFILE(?:[ \t]+|$)//i) && last;
+
+#if line does not belong to block, describing a filter option, check if it
+#provides basic information upon filter or if it starts an option block
+    unless ($inoption) {
+      ( $_=~s/^DES(?:CRIPTION)[ \t]+//i) && (($_=~s/\\(?=[ \t])//g) || 1) &&
+       (${$filter}{"DESCRIPTION"}=$_) && next;
+      ( $_=~s/^STATIC[ \t]+//i) && (($feature=uc $_ ) || 1) &&
+       (${$filter}{$feature}="new_aspell_".$filtername."_".(lc $_)) && next;
+      ( $_=~s/^ASPELL[ \t]+//i) && next;
+      ( $_=~/^LIB-FILE/i) && next;
+      ( $_=~/^OPTION[ \t]+/i) || 
+       (die "Invalid general key in $filename on line $.");
+    }
+
+#if line starts new option block create corresponding fields
+    if ($_=~s/^OPTION[ \t]+//i) {
+      $inoption=1;
+      $option=${$filter}{$_}={};
+      ${$option}{"NAME"}=$_;
+      ${$option}{"TYPE"}="KeyInfoBool";
+      ${$option}{"DEFAULT"}="";
+      ${$option}{"DESCRIPTION"}="";
+      next;
+    }
+#fill option structure with information provided by line
+#or terminate option block and use line to adjust other parts of the
+#filters structure
+    ( $_=~s/^TYPE[ \t]+//i) &&
+     (${$option}{"TYPE"}=$_) && next;
+    ( $_=~s/^DEF(?:AULT)[ \t]+//i) && (($_=~s/\\(?=[ \t])//g) || 1) &&
+     (((${$option}{"DEFAULT"} ne "") && (${$option}{"DEFAULT"}.=":")) ||1) &&
+     (${$option}{"DEFAULT"}.=prep_str($_)) && next;
+    ( $_=~s/^DES(?:CRIPTION)[ \t]+//i) && (($_=~s/\\(?=[ \t])//g) || 1) &&
+     (${$option}{"DESCRIPTION"}=prep_str($_)) && next;
+    ( $_=~s/^FLAGS[ \t]+//i) && 
+     (${$option}{"FLAGS"}=prep_str($_)) && next;
+    ( $_=~s/^ENDOPTION(?:[ \t]+|$)//i) && 
+     (($inoption=0)||1) && next;
+    ( $_=~s/^STATIC[ \t]+//i) && (($feature=uc $_ ) || 1) &&
+     (${$filter}{$feature}="new_".$filtername."_".(lc $_)) && 
+     (($inoption=0)||1) && next;
+    die "Invalid option key in $filename on line $.";
+  }
+  close OPTIONFILE;
+}
+
+#check what we have got. If no filter was found simply terminate. 
+#In any other case create the static_filter.src.cpp file. It will be compiled
+#into Aspell binary, all filters described within this file are assumed to be
+#statically linked into Aspell
+
+(scalar (@allfilters = keys %filters)) || exit 0;
+open STATICFILTERS, ">gen/static_filters.src.cpp" || die "cant generate static filter description\n";
+printf STATICFILTERS "/*File generated during static filter build\n".
+                     "  Automatically generated file\n*/\n";
+
+#declare all filter creation functions 
+@rallfilters=();
+while ($filter = shift @allfilters) {
+  ( $filters{$filter}{"DECODER"} ne  "0") &&
+   (printf STATICFILTERS "\n  extern \"C\" IndividualFilter * ".
+    $filters{$filter}{"DECODER"}."();\n");
+  ( $filters{$filter}{"FILTER"} ne "0") &&
+   (printf STATICFILTERS "\n  extern \"C\" IndividualFilter * ".
+                         $filters{$filter}{"FILTER"}."();\n");
+  ( $filters{$filter}{"ENCODER"} ne "0") &&
+   (printf STATICFILTERS "\n  extern \"C\" IndividualFilter * ".
+                         $filters{$filter}{"ENCODER"}."();\n");
+  push @rallfilters,$filter;
+}
+
+#create standard filter list denoting all statically linked filters
+#and corresponding variables
+@allfilters=(@rallfilters);
+printf STATICFILTERS "\n  static FilterEntry standard_filters[] = {\n";
+@filterhashes=();
+@rallfilters=();
+while ($filter = shift @allfilters) {
+  push @filterhashes,$filters{$filter};
+  (scalar @rallfilters) && (printf STATICFILTERS ",\n");
+  printf STATICFILTERS "    {\"$filter\",".$filters{$filter}{"DECODER"}.
+                                     ",".$filters{$filter}{"FILTER"}.
+                                     ",".$filters{$filter}{"ENCODER"}."}";
+  push @rallfilters,$filter;
+}
+printf STATICFILTERS "\n  };\n";
+printf STATICFILTERS "\n  const unsigned int standard_filters_size = ".
+                         "sizeof(standard_filters)/sizeof(FilterEntry);\n";
+
+
+#create KeyInfo structures for each static filter
+while ($filter = shift @filterhashes) {
+  printf STATICFILTERS "\n  static KeyInfo ".${$filter}{"NAME"}."_options[] = {\n";
+
+#create KeyInfo structs and begin end handles
+  $firstopt = 1;
+  while (($name,$option)=each %{$filter}) {
+    ($name=~/(?:NAME|(?:DE|EN)CODER|FILTER|DESCRIPTION)/) && next;
+    ( $firstopt != 1 ) && ( printf STATICFILTERS ",\n" );
+    $firstopt = 0;
+    printf STATICFILTERS "    {\n".
+                            "      \"f-${$filter}{NAME}-$name\",\n";
+    (    (lc ${$option}{"TYPE"}) eq "bool") &&
+      printf STATICFILTERS  "      KeyInfoBool,\n";
+    ( (lc ${$option}{"TYPE"}) eq "int") &&
+      printf STATICFILTERS  "      KeyInfoInt,\n";
+    ( (lc ${$option}{"TYPE"}) eq "string") &&
+      printf STATICFILTERS  "      KeyInfoString,\n";
+    ( (lc ${$option}{"TYPE"}) eq "list") &&
+      printf STATICFILTERS  "      KeyInfoList,\n";
+    print STATICFILTERS     "      \"".${$option}{"DEFAULT"}."\",\n".
+                            "      \"".${$option}{"DESCRIPTION"}."\"\n".
+                            "    }";
+  }
+  printf STATICFILTERS "\n  };\n";
+  printf STATICFILTERS "\n  const KeyInfo * ".${$filter}{"NAME"}."_options_begin = ".
+                                              ${$filter}{"NAME"}."_options;\n";
+  # If structure is empty, set options_end to same as options_begin.
+  if ($firstopt) {
+    printf STATICFILTERS "\n  const KeyInfo * ".${$filter}{"NAME"}."_options_end = ".
+                                                ${$filter}{"NAME"}."_options;\n";
+  } else {
+    printf STATICFILTERS "\n  const KeyInfo * ".${$filter}{"NAME"}."_options_end = ".
+                                                ${$filter}{"NAME"}."_options+sizeof(".
+                                                ${$filter}{"NAME"}."_options)/".
+                                                "sizeof(KeyInfo);\n";
+  }
+}
+
+#finally create filter modules list.
+printf STATICFILTERS  "\n\n  static ConfigModule filter_modules[] = {\n";
+#FIXME obsolete  due to modes moving to textfiles
+#printf STATICFILTERS      "    {\"fm\",0,modes_module_begin,modes_module_end}";
+$firstopt = 1;
+while ($filter = shift @rallfilters) {
+  ( $firstopt != 1 ) && ( printf STATICFILTERS ",\n" );
+  $firstopt = 0;
+  printf STATICFILTERS "    {\n".
+                       "      \"$filter\",0,\n".
+                       "      \"".${${filters}{$filter}}{DESCRIPTION}."\",\n" .
+                       "      ${filter}_options_begin,${filter}_options_end\n" .
+                       "    }";
+} 
+printf STATICFILTERS    "\n  };\n";
+printf STATICFILTERS "\n  const ConfigModule * filter_modules_begin = ".
+                         "filter_modules;\n";
+printf STATICFILTERS "\n  const ConfigModule * filter_modules_end = ".
+                         "filter_modules+sizeof(filter_modules)/".
+                         "sizeof(ConfigModule);\n";
+printf STATICFILTERS "\n  const size_t filter_modules_size = ".
+                          "sizeof(filter_modules);\n";
+
+close STATICFILTERS;
+
diff --git a/gen/settings.h.in b/gen/settings.h.in
new file mode 100644 (file)
index 0000000..6417edf
--- /dev/null
@@ -0,0 +1,161 @@
+/* gen/settings.h.in.  Generated from configure.ac by autoheader.  */
+
+#ifndef ASPELL_SETTINGS__H
+#define ASPELL_SETTINGS__H
+
+/* Defined if filters should be compiled in */
+#undef COMPILE_IN_FILTER
+
+/* Defined to curses header file */
+#undef CURSES_HEADER
+
+/* Defined if no special Workarounds are needed for Curses headers */
+#undef CURSES_INCLUDE_STANDARD
+
+/* Defined if special Wordaround I is need for Curses headers */
+#undef CURSES_INCLUDE_WORKAROUND_1
+
+/* Defined if curses like POSIX Functions should be used */
+#undef CURSES_ONLY
+
+/* Defined if _XOPEN_SOURCE_EXTENDED needs to be defined. (Can't define
+   globally as that will cause problems with some systems) */
+#undef DEFINE_XOPEN_SOURCE_EXTENDED
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Defined if win32 relocation should be used */
+#undef ENABLE_WIN32_RELOCATABLE
+
+/* Defined if filter version control should be used */
+#undef FILTER_VERSION_CONTROL
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Defined if msdos getch is supported */
+#undef HAVE_GETCH
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Defined if the curses library is available */
+#undef HAVE_LIBCURSES
+
+/* Define to 1 if you have the `dl' library (-ldl). */
+#undef HAVE_LIBDL
+
+/* Defined if mblen is supported */
+#undef HAVE_MBLEN
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Defined if mmap and friends is supported */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Defined if curses libraray includes wide character support */
+#undef HAVE_WIDE_CURSES
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Defined if Posix Termios is Supported */
+#undef POSIX_TERMIOS
+
+/* Defined if STL rel_ops pollute the global namespace */
+#undef REL_OPS_POLLUTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Defined to term header file */
+#undef TERM_HEADER
+
+/* Defined if file ino is supported */
+#undef USE_FILE_INO
+
+/* Defined if file locking and truncating is supported */
+#undef USE_FILE_LOCKS
+
+/* Defined if Posix locales are supported */
+#undef USE_LOCALE
+
+/* Defined if Posix mutexes are supported */
+#undef USE_POSIX_MUTEX
+
+/* Defined if Posix regex are supported */
+#undef USE_POSIX_REGEX
+
+/* Version number of package */
+#undef VERSION
+
+#define C_EXPORT extern "C"
+
+#endif /* ASPELL_SETTINGS__H */
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..6781b98
--- /dev/null
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       -*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/interfaces/Makefile.in b/interfaces/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/interfaces/cc/Makefile.in b/interfaces/cc/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/interfaces/cc/aspell.h b/interfaces/cc/aspell.h
new file mode 100644 (file)
index 0000000..9c8e81b
--- /dev/null
@@ -0,0 +1,734 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_ASPELL__H
+#define ASPELL_ASPELL__H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************* type id *******************************/
+
+
+union AspellTypeId {
+
+  unsigned int num;
+
+  char str[4];
+
+};
+
+
+typedef union AspellTypeId AspellTypeId;
+
+
+/************************** mutable container **************************/
+
+
+typedef struct AspellMutableContainer AspellMutableContainer;
+
+
+int aspell_mutable_container_add(struct AspellMutableContainer * ths, const char * to_add);
+
+int aspell_mutable_container_remove(struct AspellMutableContainer * ths, const char * to_rem);
+
+void aspell_mutable_container_clear(struct AspellMutableContainer * ths);
+
+struct AspellMutableContainer * aspell_mutable_container_to_mutable_container(struct AspellMutableContainer * ths);
+
+
+
+/******************************* key info *******************************/
+
+
+
+enum AspellKeyInfoType {AspellKeyInfoString, AspellKeyInfoInt, AspellKeyInfoBool, AspellKeyInfoList};
+typedef enum AspellKeyInfoType AspellKeyInfoType;
+
+
+struct AspellKeyInfo {
+
+  /* The name of the key. */
+  const char * name;
+
+  /* The key type. */
+  enum AspellKeyInfoType type;
+
+  /* The default value of the key. */
+  const char * def;
+
+  /* A brief description of the key or NULL if internal value. */
+  const char * desc;
+
+  int flags;
+
+  int other_data;
+
+};
+
+
+typedef struct AspellKeyInfo AspellKeyInfo;
+
+
+/******************************** config ********************************/
+
+
+typedef struct AspellKeyInfoEnumeration AspellKeyInfoEnumeration;
+
+
+int aspell_key_info_enumeration_at_end(const struct AspellKeyInfoEnumeration * ths);
+
+const struct AspellKeyInfo * aspell_key_info_enumeration_next(struct AspellKeyInfoEnumeration * ths);
+
+void delete_aspell_key_info_enumeration(struct AspellKeyInfoEnumeration * ths);
+
+struct AspellKeyInfoEnumeration * aspell_key_info_enumeration_clone(const struct AspellKeyInfoEnumeration * ths);
+
+void aspell_key_info_enumeration_assign(struct AspellKeyInfoEnumeration * ths, const struct AspellKeyInfoEnumeration * other);
+
+
+
+typedef struct AspellConfig AspellConfig;
+
+
+struct AspellConfig * new_aspell_config();
+
+void delete_aspell_config(struct AspellConfig * ths);
+
+struct AspellConfig * aspell_config_clone(const struct AspellConfig * ths);
+
+void aspell_config_assign(struct AspellConfig * ths, const struct AspellConfig * other);
+
+unsigned int aspell_config_error_number(const struct AspellConfig * ths);
+
+const char * aspell_config_error_message(const struct AspellConfig * ths);
+
+const struct AspellError * aspell_config_error(const struct AspellConfig * ths);
+
+/* Sets extra keys which this config class should
+ * accept. begin and end are expected to point to
+ * the beginning and ending of an array of Aspell
+ * Key Info. */
+void aspell_config_set_extra(struct AspellConfig * ths, const struct AspellKeyInfo * begin, const struct AspellKeyInfo * end);
+
+/* Returns the KeyInfo object for the
+ * corresponding key or returns NULL and sets
+ * error_num to PERROR_UNKNOWN_KEY if the key is
+ * not valid. The pointer returned is valid for
+ * the lifetime of the object. */
+const struct AspellKeyInfo * aspell_config_keyinfo(struct AspellConfig * ths, const char * key);
+
+/* Returns a newly allocated enumeration of all
+ * the possible objects this config class uses. */
+struct AspellKeyInfoEnumeration * aspell_config_possible_elements(struct AspellConfig * ths, int include_extra);
+
+/* Returns the default value for given key which
+ * may involve substituting variables, thus it is
+ * not the same as keyinfo(key)->def returns NULL
+ * and sets error_num to PERROR_UNKNOWN_KEY if
+ * the key is not valid. Uses the temporary
+ * string. */
+const char * aspell_config_get_default(struct AspellConfig * ths, const char * key);
+
+/* Returns a newly allocated enumeration of all
+ * the key/value pairs. This DOES not include ones
+ * which are set to their default values. */
+struct AspellStringPairEnumeration * aspell_config_elements(struct AspellConfig * ths);
+
+/* Inserts an item, if the item already exists it
+ * will be replaced. Returns TRUE if it succeeded
+ * or FALSE on error. If the key is not valid it
+ * sets error_num to PERROR_UNKNOWN_KEY, if the
+ * value is not valid it will set error_num to
+ * PERROR_BAD_VALUE, if the value can not be
+ * changed it sets error_num to
+ * PERROR_CANT_CHANGE_VALUE, and if the value is
+ * a list and you are trying to set its directory,
+ * it sets error_num to PERROR_LIST_SET */
+int aspell_config_replace(struct AspellConfig * ths, const char * key, const char * value);
+
+/* Remove a key and returns TRUE if it exists
+ * otherwise return FALSE. This effectively sets
+ * the key to its default value. Calling replace
+ * with a value of "<default>" will also call
+ * remove. If the key does not exist then it sets
+ * error_num to 0 or PERROR_NOT, if the key is
+ * not valid then it sets error_num to
+ * PERROR_UNKNOWN_KEY, if the value can not be
+ * changed then it sets error_num to
+ * PERROR_CANT_CHANGE_VALUE */
+int aspell_config_remove(struct AspellConfig * ths, const char * key);
+
+int aspell_config_have(const struct AspellConfig * ths, const char * key);
+
+/* Returns NULL on error. */
+const char * aspell_config_retrieve(struct AspellConfig * ths, const char * key);
+
+int aspell_config_retrieve_list(struct AspellConfig * ths, const char * key, struct AspellMutableContainer * lst);
+
+/* In "ths" Aspell configuration, search for a
+ * character string matching "key" string.
+ * If "key" is found then return 1 else return 0.
+ * If error encountered, then return -1. */
+int aspell_config_retrieve_bool(struct AspellConfig * ths, const char * key);
+
+/* In "ths" Aspell configuration, search for an
+ * integer value matching "key" string.
+ * Return -1 on error. */
+int aspell_config_retrieve_int(struct AspellConfig * ths, const char * key);
+
+
+
+/******************************** error ********************************/
+
+
+struct AspellError {
+
+  const char * mesg;
+
+  const struct AspellErrorInfo * err;
+
+};
+
+
+typedef struct AspellError AspellError;
+
+int aspell_error_is_a(const struct AspellError * ths, const struct AspellErrorInfo * e);
+
+
+struct AspellErrorInfo {
+
+  const struct AspellErrorInfo * isa;
+
+  const char * mesg;
+
+  unsigned int num_parms;
+
+  const char * parms[3];
+
+};
+
+
+typedef struct AspellErrorInfo AspellErrorInfo;
+
+
+/**************************** can have error ****************************/
+
+
+typedef struct AspellCanHaveError AspellCanHaveError;
+
+
+unsigned int aspell_error_number(const struct AspellCanHaveError * ths);
+
+const char * aspell_error_message(const struct AspellCanHaveError * ths);
+
+const struct AspellError * aspell_error(const struct AspellCanHaveError * ths);
+
+void delete_aspell_can_have_error(struct AspellCanHaveError * ths);
+
+
+
+/******************************** errors ********************************/
+
+
+extern const struct AspellErrorInfo * const aerror_other;
+extern const struct AspellErrorInfo * const aerror_operation_not_supported;
+extern const struct AspellErrorInfo * const   aerror_cant_copy;
+extern const struct AspellErrorInfo * const   aerror_unimplemented_method;
+extern const struct AspellErrorInfo * const aerror_file;
+extern const struct AspellErrorInfo * const   aerror_cant_open_file;
+extern const struct AspellErrorInfo * const     aerror_cant_read_file;
+extern const struct AspellErrorInfo * const     aerror_cant_write_file;
+extern const struct AspellErrorInfo * const   aerror_invalid_name;
+extern const struct AspellErrorInfo * const   aerror_bad_file_format;
+extern const struct AspellErrorInfo * const aerror_dir;
+extern const struct AspellErrorInfo * const   aerror_cant_read_dir;
+extern const struct AspellErrorInfo * const aerror_config;
+extern const struct AspellErrorInfo * const   aerror_unknown_key;
+extern const struct AspellErrorInfo * const   aerror_cant_change_value;
+extern const struct AspellErrorInfo * const   aerror_bad_key;
+extern const struct AspellErrorInfo * const   aerror_bad_value;
+extern const struct AspellErrorInfo * const   aerror_duplicate;
+extern const struct AspellErrorInfo * const   aerror_key_not_string;
+extern const struct AspellErrorInfo * const   aerror_key_not_int;
+extern const struct AspellErrorInfo * const   aerror_key_not_bool;
+extern const struct AspellErrorInfo * const   aerror_key_not_list;
+extern const struct AspellErrorInfo * const   aerror_no_value_reset;
+extern const struct AspellErrorInfo * const   aerror_no_value_enable;
+extern const struct AspellErrorInfo * const   aerror_no_value_disable;
+extern const struct AspellErrorInfo * const   aerror_no_value_clear;
+extern const struct AspellErrorInfo * const aerror_language_related;
+extern const struct AspellErrorInfo * const   aerror_unknown_language;
+extern const struct AspellErrorInfo * const   aerror_unknown_soundslike;
+extern const struct AspellErrorInfo * const   aerror_language_not_supported;
+extern const struct AspellErrorInfo * const   aerror_no_wordlist_for_lang;
+extern const struct AspellErrorInfo * const   aerror_mismatched_language;
+extern const struct AspellErrorInfo * const aerror_affix;
+extern const struct AspellErrorInfo * const   aerror_corrupt_affix;
+extern const struct AspellErrorInfo * const   aerror_invalid_cond;
+extern const struct AspellErrorInfo * const   aerror_invalid_cond_strip;
+extern const struct AspellErrorInfo * const   aerror_incorrect_encoding;
+extern const struct AspellErrorInfo * const aerror_encoding;
+extern const struct AspellErrorInfo * const   aerror_unknown_encoding;
+extern const struct AspellErrorInfo * const   aerror_encoding_not_supported;
+extern const struct AspellErrorInfo * const   aerror_conversion_not_supported;
+extern const struct AspellErrorInfo * const aerror_pipe;
+extern const struct AspellErrorInfo * const   aerror_cant_create_pipe;
+extern const struct AspellErrorInfo * const   aerror_process_died;
+extern const struct AspellErrorInfo * const aerror_bad_input;
+extern const struct AspellErrorInfo * const   aerror_invalid_string;
+extern const struct AspellErrorInfo * const   aerror_invalid_word;
+extern const struct AspellErrorInfo * const   aerror_invalid_affix;
+extern const struct AspellErrorInfo * const   aerror_inapplicable_affix;
+extern const struct AspellErrorInfo * const   aerror_unknown_unichar;
+extern const struct AspellErrorInfo * const   aerror_word_list_flags;
+extern const struct AspellErrorInfo * const     aerror_invalid_flag;
+extern const struct AspellErrorInfo * const     aerror_conflicting_flags;
+extern const struct AspellErrorInfo * const aerror_version_control;
+extern const struct AspellErrorInfo * const   aerror_bad_version_string;
+extern const struct AspellErrorInfo * const aerror_filter;
+extern const struct AspellErrorInfo * const   aerror_cant_dlopen_file;
+extern const struct AspellErrorInfo * const   aerror_empty_filter;
+extern const struct AspellErrorInfo * const   aerror_no_such_filter;
+extern const struct AspellErrorInfo * const   aerror_confusing_version;
+extern const struct AspellErrorInfo * const   aerror_bad_version;
+extern const struct AspellErrorInfo * const   aerror_identical_option;
+extern const struct AspellErrorInfo * const   aerror_options_only;
+extern const struct AspellErrorInfo * const   aerror_invalid_option_modifier;
+extern const struct AspellErrorInfo * const   aerror_cant_describe_filter;
+extern const struct AspellErrorInfo * const aerror_filter_mode_file;
+extern const struct AspellErrorInfo * const   aerror_mode_option_name;
+extern const struct AspellErrorInfo * const   aerror_no_filter_to_option;
+extern const struct AspellErrorInfo * const   aerror_bad_mode_key;
+extern const struct AspellErrorInfo * const   aerror_expect_mode_key;
+extern const struct AspellErrorInfo * const   aerror_mode_version_requirement;
+extern const struct AspellErrorInfo * const   aerror_confusing_mode_version;
+extern const struct AspellErrorInfo * const   aerror_bad_mode_version;
+extern const struct AspellErrorInfo * const   aerror_missing_magic_expression;
+extern const struct AspellErrorInfo * const   aerror_empty_file_ext;
+extern const struct AspellErrorInfo * const aerror_filter_mode_expand;
+extern const struct AspellErrorInfo * const   aerror_unknown_mode;
+extern const struct AspellErrorInfo * const   aerror_mode_extend_expand;
+extern const struct AspellErrorInfo * const aerror_filter_mode_magic;
+extern const struct AspellErrorInfo * const   aerror_file_magic_pos;
+extern const struct AspellErrorInfo * const   aerror_file_magic_range;
+extern const struct AspellErrorInfo * const   aerror_missing_magic;
+extern const struct AspellErrorInfo * const   aerror_bad_magic;
+extern const struct AspellErrorInfo * const aerror_expression;
+extern const struct AspellErrorInfo * const   aerror_invalid_expression;
+
+
+/******************************* speller *******************************/
+
+
+typedef struct AspellSpeller AspellSpeller;
+
+
+struct AspellCanHaveError * new_aspell_speller(struct AspellConfig * config);
+
+struct AspellSpeller * to_aspell_speller(struct AspellCanHaveError * obj);
+
+void delete_aspell_speller(struct AspellSpeller * ths);
+
+unsigned int aspell_speller_error_number(const struct AspellSpeller * ths);
+
+const char * aspell_speller_error_message(const struct AspellSpeller * ths);
+
+const struct AspellError * aspell_speller_error(const struct AspellSpeller * ths);
+
+struct AspellConfig * aspell_speller_config(struct AspellSpeller * ths);
+
+/* Returns 0 if it is not in the dictionary,
+ * 1 if it is, or -1 on error. */
+int aspell_speller_check(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* Add this word to your own personal word list. */
+int aspell_speller_add_to_personal(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* Add this word to the current spelling session. */
+int aspell_speller_add_to_session(struct AspellSpeller * ths, const char * word, int word_size);
+
+/* This is your own personal word list file plus
+ * any extra words added during this session to
+ * your own personal word list. */
+const struct AspellWordList * aspell_speller_personal_word_list(struct AspellSpeller * ths);
+
+/* This is a list of words added to this session
+ * that are not in the main word list or in your
+ * own personal list but are considered valid for
+ * this spelling session. */
+const struct AspellWordList * aspell_speller_session_word_list(struct AspellSpeller * ths);
+
+/* This is the main list of words used during this
+ * spelling session. */
+const struct AspellWordList * aspell_speller_main_word_list(struct AspellSpeller * ths);
+
+int aspell_speller_save_all_word_lists(struct AspellSpeller * ths);
+
+int aspell_speller_clear_session(struct AspellSpeller * ths);
+
+/* Return NULL on error.
+ * The word list returned by suggest is only
+ * valid until the next call to suggest. */
+const struct AspellWordList * aspell_speller_suggest(struct AspellSpeller * ths, const char * word, int word_size);
+
+int aspell_speller_store_replacement(struct AspellSpeller * ths, const char * mis, int mis_size, const char * cor, int cor_size);
+
+
+
+/******************************** filter ********************************/
+
+
+typedef struct AspellFilter AspellFilter;
+
+
+void delete_aspell_filter(struct AspellFilter * ths);
+
+unsigned int aspell_filter_error_number(const struct AspellFilter * ths);
+
+const char * aspell_filter_error_message(const struct AspellFilter * ths);
+
+const struct AspellError * aspell_filter_error(const struct AspellFilter * ths);
+
+struct AspellFilter * to_aspell_filter(struct AspellCanHaveError * obj);
+
+
+
+/*************************** document checker ***************************/
+
+
+struct AspellToken {
+
+  unsigned int offset;
+
+  unsigned int len;
+
+};
+
+
+typedef struct AspellToken AspellToken;
+
+
+typedef struct AspellDocumentChecker AspellDocumentChecker;
+
+
+void delete_aspell_document_checker(struct AspellDocumentChecker * ths);
+
+unsigned int aspell_document_checker_error_number(const struct AspellDocumentChecker * ths);
+
+const char * aspell_document_checker_error_message(const struct AspellDocumentChecker * ths);
+
+const struct AspellError * aspell_document_checker_error(const struct AspellDocumentChecker * ths);
+
+/* Creates a new document checker.
+ * The speller class is expected to last until
+ * this class is destroyed.
+ * If config is given it will be used to override
+ * any relevent options set by this speller class.
+ * The config class is not once this function is done.
+ * If filter is given then it will take ownership of
+ * the filter class and use it to do the filtering.
+ * You are expected to free the checker when done. */
+struct AspellCanHaveError * new_aspell_document_checker(struct AspellSpeller * speller);
+
+struct AspellDocumentChecker * to_aspell_document_checker(struct AspellCanHaveError * obj);
+
+/* Reset the internal state of the filter.
+ * Should be called whenever a new document is
+ * being filtered. */
+void aspell_document_checker_reset(struct AspellDocumentChecker * ths);
+
+/* Process a string.
+ * The string passed in should only be split on
+ * white space characters.  Furthermore, between
+ * calls to reset, each string should be passed
+ * in exactly once and in the order they appeared
+ * in the document.  Passing in strings out of
+ * order, skipping strings or passing them in
+ * more than once may lead to undefined results. */
+void aspell_document_checker_process(struct AspellDocumentChecker * ths, const char * str, int size);
+
+/* Returns the next misspelled word in the
+ * processed string.  If there are no more
+ * misspelled words, then token.word will be
+ * NULL and token.size will be 0 */
+struct AspellToken aspell_document_checker_next_misspelling(struct AspellDocumentChecker * ths);
+
+/* Returns the underlying filter class. */
+struct AspellFilter * aspell_document_checker_filter(struct AspellDocumentChecker * ths);
+
+
+
+/****************************** word list ******************************/
+
+
+typedef struct AspellWordList AspellWordList;
+
+
+int aspell_word_list_empty(const struct AspellWordList * ths);
+
+unsigned int aspell_word_list_size(const struct AspellWordList * ths);
+
+struct AspellStringEnumeration * aspell_word_list_elements(const struct AspellWordList * ths);
+
+
+
+/************************** string enumeration **************************/
+
+
+typedef struct AspellStringEnumeration AspellStringEnumeration;
+
+
+void delete_aspell_string_enumeration(struct AspellStringEnumeration * ths);
+
+struct AspellStringEnumeration * aspell_string_enumeration_clone(const struct AspellStringEnumeration * ths);
+
+void aspell_string_enumeration_assign(struct AspellStringEnumeration * ths, const struct AspellStringEnumeration * other);
+
+int aspell_string_enumeration_at_end(const struct AspellStringEnumeration * ths);
+
+const char * aspell_string_enumeration_next(struct AspellStringEnumeration * ths);
+
+
+
+/********************************* info *********************************/
+
+
+struct AspellModuleInfo {
+
+  const char * name;
+
+  double order_num;
+
+  const char * lib_dir;
+
+  struct AspellStringList * dict_dirs;
+
+  struct AspellStringList * dict_exts;
+
+};
+
+
+typedef struct AspellModuleInfo AspellModuleInfo;
+
+
+struct AspellDictInfo {
+
+  /* The Name to identify this dictionary by. */
+  const char * name;
+
+  /* The language code to identify this dictionary.
+   * A two letter UPPER-CASE ISO 639 language code
+   * and an optional two letter ISO 3166 country
+   * code after a dash or underscore. */
+  const char * code;
+
+  /* Any extra information to distinguish this
+   * variety of dictionary from other dictionaries
+   * which may have the same language and size. */
+  const char * jargon;
+
+  int size;
+
+  /* A two char digit code describing the size of
+   * the dictionary: 10=tiny, 20=really small,
+   * 30=small, 40=med-small, 50=med, 60=med-large,
+   * 70=large, 80=huge, 90=insane.  Please check
+   * the README in aspell-lang-200?????.tar.bz2 or
+   * see SCOWL (http://wordlist.sourceforge.net)
+   * for an example of how these sizes are used. */
+  const char * size_str;
+
+  struct AspellModuleInfo * module;
+
+};
+
+
+typedef struct AspellDictInfo AspellDictInfo;
+
+
+typedef struct AspellModuleInfoList AspellModuleInfoList;
+
+
+struct AspellModuleInfoList * get_aspell_module_info_list(struct AspellConfig * config);
+
+int aspell_module_info_list_empty(const struct AspellModuleInfoList * ths);
+
+unsigned int aspell_module_info_list_size(const struct AspellModuleInfoList * ths);
+
+struct AspellModuleInfoEnumeration * aspell_module_info_list_elements(const struct AspellModuleInfoList * ths);
+
+
+
+typedef struct AspellDictInfoList AspellDictInfoList;
+
+
+struct AspellDictInfoList * get_aspell_dict_info_list(struct AspellConfig * config);
+
+int aspell_dict_info_list_empty(const struct AspellDictInfoList * ths);
+
+unsigned int aspell_dict_info_list_size(const struct AspellDictInfoList * ths);
+
+struct AspellDictInfoEnumeration * aspell_dict_info_list_elements(const struct AspellDictInfoList * ths);
+
+
+
+typedef struct AspellModuleInfoEnumeration AspellModuleInfoEnumeration;
+
+
+int aspell_module_info_enumeration_at_end(const struct AspellModuleInfoEnumeration * ths);
+
+const struct AspellModuleInfo * aspell_module_info_enumeration_next(struct AspellModuleInfoEnumeration * ths);
+
+void delete_aspell_module_info_enumeration(struct AspellModuleInfoEnumeration * ths);
+
+struct AspellModuleInfoEnumeration * aspell_module_info_enumeration_clone(const struct AspellModuleInfoEnumeration * ths);
+
+void aspell_module_info_enumeration_assign(struct AspellModuleInfoEnumeration * ths, const struct AspellModuleInfoEnumeration * other);
+
+
+
+typedef struct AspellDictInfoEnumeration AspellDictInfoEnumeration;
+
+
+int aspell_dict_info_enumeration_at_end(const struct AspellDictInfoEnumeration * ths);
+
+const struct AspellDictInfo * aspell_dict_info_enumeration_next(struct AspellDictInfoEnumeration * ths);
+
+void delete_aspell_dict_info_enumeration(struct AspellDictInfoEnumeration * ths);
+
+struct AspellDictInfoEnumeration * aspell_dict_info_enumeration_clone(const struct AspellDictInfoEnumeration * ths);
+
+void aspell_dict_info_enumeration_assign(struct AspellDictInfoEnumeration * ths, const struct AspellDictInfoEnumeration * other);
+
+
+
+/***************************** string list *****************************/
+
+
+typedef struct AspellStringList AspellStringList;
+
+
+struct AspellStringList * new_aspell_string_list();
+
+int aspell_string_list_empty(const struct AspellStringList * ths);
+
+unsigned int aspell_string_list_size(const struct AspellStringList * ths);
+
+struct AspellStringEnumeration * aspell_string_list_elements(const struct AspellStringList * ths);
+
+int aspell_string_list_add(struct AspellStringList * ths, const char * to_add);
+
+int aspell_string_list_remove(struct AspellStringList * ths, const char * to_rem);
+
+void aspell_string_list_clear(struct AspellStringList * ths);
+
+struct AspellMutableContainer * aspell_string_list_to_mutable_container(struct AspellStringList * ths);
+
+void delete_aspell_string_list(struct AspellStringList * ths);
+
+struct AspellStringList * aspell_string_list_clone(const struct AspellStringList * ths);
+
+void aspell_string_list_assign(struct AspellStringList * ths, const struct AspellStringList * other);
+
+
+
+/****************************** string map ******************************/
+
+
+typedef struct AspellStringMap AspellStringMap;
+
+
+struct AspellStringMap * new_aspell_string_map();
+
+int aspell_string_map_add(struct AspellStringMap * ths, const char * to_add);
+
+int aspell_string_map_remove(struct AspellStringMap * ths, const char * to_rem);
+
+void aspell_string_map_clear(struct AspellStringMap * ths);
+
+struct AspellMutableContainer * aspell_string_map_to_mutable_container(struct AspellStringMap * ths);
+
+void delete_aspell_string_map(struct AspellStringMap * ths);
+
+struct AspellStringMap * aspell_string_map_clone(const struct AspellStringMap * ths);
+
+void aspell_string_map_assign(struct AspellStringMap * ths, const struct AspellStringMap * other);
+
+int aspell_string_map_empty(const struct AspellStringMap * ths);
+
+unsigned int aspell_string_map_size(const struct AspellStringMap * ths);
+
+struct AspellStringPairEnumeration * aspell_string_map_elements(const struct AspellStringMap * ths);
+
+/* Insert a new element.
+ * Will NOT overwrite an existing entry.
+ * Returns FALSE if the element already exists. */
+int aspell_string_map_insert(struct AspellStringMap * ths, const char * key, const char * value);
+
+/* Insert a new element.
+ * Will overwrite an existing entry.
+ * Always returns TRUE. */
+int aspell_string_map_replace(struct AspellStringMap * ths, const char * key, const char * value);
+
+/* Looks up an element and returns the value.
+ * Returns NULL if the element does not exist.
+ * Returns an empty string if the element exists
+ * but has a NULL value. */
+const char * aspell_string_map_lookup(const struct AspellStringMap * ths, const char * key);
+
+
+
+/***************************** string pair *****************************/
+
+
+struct AspellStringPair {
+
+  const char * first;
+
+  const char * second;
+
+};
+
+
+typedef struct AspellStringPair AspellStringPair;
+
+
+/*********************** string pair enumeration ***********************/
+
+
+typedef struct AspellStringPairEnumeration AspellStringPairEnumeration;
+
+
+int aspell_string_pair_enumeration_at_end(const struct AspellStringPairEnumeration * ths);
+
+struct AspellStringPair aspell_string_pair_enumeration_next(struct AspellStringPairEnumeration * ths);
+
+void delete_aspell_string_pair_enumeration(struct AspellStringPairEnumeration * ths);
+
+struct AspellStringPairEnumeration * aspell_string_pair_enumeration_clone(const struct AspellStringPairEnumeration * ths);
+
+void aspell_string_pair_enumeration_assign(struct AspellStringPairEnumeration * ths, const struct AspellStringPairEnumeration * other);
+
+
+
+/******************************** cache ********************************/
+
+
+/* Reset the global cache(s) so that cache queries will
+ * create a new object. If existing objects are still in
+ * use they are not deleted. If which is NULL then all
+ * caches will be reset. Current caches are "encode",
+ * "decode", "dictionary", "language", and "keyboard". */
+int aspell_reset_cache(const char * which);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ASPELL_ASPELL__H */
diff --git a/interfaces/cc/pspell.h b/interfaces/cc/pspell.h
new file mode 100644 (file)
index 0000000..d62d384
--- /dev/null
@@ -0,0 +1,122 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#ifndef ASPELL_PSPELL__H
+#define ASPELL_PSPELL__H
+
+#include "../aspell.h"
+
+#define PspellCanHaveError   AspellCanHaveError 
+#define PspellErrorExtraInfo AspellErrorExtraInfo
+
+#define pspell_error_number     aspell_error_number
+#define pspell_error_message    aspell_error_message
+#define delete_pspell_can_have_error delete_aspell_can_have_error
+
+#define PspellStringEmulation AspellStringEnumeration
+
+#define pspell_string_emulation_clone   aspell_string_enumeration_clone
+#define pspell_string_emulation_assign  aspell_string_enumeration_assign
+#define pspell_string_emulation_at_end  aspell_string_enumeration_at_end
+#define pspell_string_emulation_next    aspell_string_enumeration_next
+#define delete_pspell_string_emulation  delete_aspell_string_enumeration
+
+#define PspellStringPair          AspellStringPair
+#define PspellStringPairEmulation AspellStringPairEnumeration
+
+#define pspell_string_pair_emulation_clone  aspell_string_pair_enumeration_clone
+#define pspell_string_pair_emulation_assign aspell_string_pair_enumeration_assign
+#define pspell_string_pair_emulation_at_end aspell_string_pair_enumeration_at_end
+#define delete_pspell_string_pair_emulation delete_aspell_string_pair_enumeration
+
+#define PspellKeyInfoType   AspellKeyInfoType
+#define PspellKeyInfoString AspellKeyInfoString
+#define PspellKeyInfoInt    AspellKeyInfoInt
+#define PspellKeyInfoBool   AspellKeyInfoBool
+#define PspellKeyInfoList   AspellKeyInfoList
+
+#define PspellKeyInfo          AspellKeyInfo
+#define PspellKeyInfoEmulation AspellKeyInfoEnumeration
+
+#define PspellConfig AspellConfig
+
+#define new_pspell_config new_aspell_config
+#define delete_pspell_config delete_aspell_config
+#define pspell_config_error_number aspell_config_error_number
+#define pspell_config_error_message aspell_config_error_message
+#define pspell_config_clone aspell_config_clone
+#define pspell_config_assign aspell_config_assign
+#define pspell_config_set_extra aspell_config_set_extra
+#define pspell_config_keyinfo aspell_config_keyinfo
+#define pspell_config_possible_elements aspell_config_possible_elements
+#define pspell_config_get_default aspell_config_get_default
+#define pspell_config_elements aspell_config_elements
+#define pspell_config_replace aspell_config_replace
+#define pspell_config_remove aspell_config_remove
+#define pspell_config_have aspell_config_have
+#define pspell_config_retrieve aspell_config_retrieve
+#define pspell_config_retrieve_list aspell_config_retrieve_list
+#define pspell_config_retrieve_bool aspell_config_retrieve_bool
+#define pspell_config_retrieve_int aspell_config_retrieve_int
+
+#define PspellStringMap AspellStringMap;
+
+#define new_pspell_string_map new_aspell_string_map
+#define delete_pspell_string_map delete_aspell_string_map
+#define pspell_string_map_clone aspell_string_map_clone
+#define pspell_string_map_assign aspell_string_map_assign
+#define pspell_string_map_elements aspell_string_map_elements
+#define pspell_string_map_insert aspell_string_map_insert
+#define pspell_string_map_replace aspell_string_map_replace
+#define pspell_string_map_remove aspell_string_map_remove
+#define pspell_string_map_clear aspell_string_map_clear
+#define pspell_string_map_lookup aspell_string_map_lookup
+#define pspell_string_map_size aspell_string_map_size
+#define pspell_string_map_empty aspell_string_map_empty
+
+#define PspellWordList AspellWordList
+#define pspell_word_list_encoding aspell_word_list_encoding
+#define pspell_word_list_empty aspell_word_list_empty
+#define pspell_word_list_size aspell_word_list_size
+#define pspell_word_list_elements aspell_word_list_elements
+
+#define PspellManager AspellSpeller
+#define new_pspell_manager new_aspell_speller
+#define to_pspell_manager to_aspell_speller
+#define delete_pspell_manager delete_aspell_speller
+#define pspell_manager_error_number aspell_speller_error_number
+#define pspell_manager_error_message aspell_speller_error_message
+#define pspell_manager_config aspell_speller_config
+#define pspell_manager_master_word_list aspell_speller_main_word_list
+#define pspell_manager_personal_word_list aspell_speller_personal_word_list
+#define pspell_manager_session_word_list aspell_speller_session_word_list
+#define pspell_manager_save_all_word_lists aspell_speller_save_all_word_lists
+#define pspell_manager_clear_session aspell_speller_clear_session
+
+#if defined(USE_ORIGINAL_MANAGER_FUNCS)
+
+#  define pspell_manager_check(m,str)\
+    aspell_speller_check(m,str,-1)
+#  define pspell_manager_add_to_personal(m,str)\
+    aspell_speller_add_to_personal(m,str,-1)
+#  define pspell_manager_add_to_session(m,str)\
+    aspell_speller_add_to_session(m,str,-1)
+#  define pspell_manager_suggest(m,str)\
+    aspell_speller_suggest(m,str,-1)
+#  define pspell_manager_store_replacement(m,mis,cor)\
+    aspell_speller_store_replacement(m,mis,-1,cor,-1)
+
+#else
+
+#  define pspell_manager_check aspell_speller_check
+#  define pspell_manager_add_to_personal aspell_speller_add_to_personal
+#  define pspell_manager_add_to_session aspell_speller_add_to_session
+#  define pspell_manager_suggest aspell_speller_suggest
+#  define pspell_manager_store_replacement aspell_speller_store_replacement
+
+#endif
+
+#endif /* ASPELL_PSPELL__H */
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/lib/can_have_error-c.cpp b/lib/can_have_error-c.cpp
new file mode 100644 (file)
index 0000000..0a5057b
--- /dev/null
@@ -0,0 +1,40 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "can_have_error.hpp"
+#include "error.hpp"
+
+namespace acommon {
+
+class CanHaveError;
+struct Error;
+
+extern "C" unsigned int aspell_error_number(const CanHaveError * ths)
+{
+  return ths->err_ == 0 ? 0 : 1;
+}
+
+extern "C" const char * aspell_error_message(const CanHaveError * ths)
+{
+  return ths->err_ ? ths->err_->mesg : "";
+}
+
+extern "C" const Error * aspell_error(const CanHaveError * ths)
+{
+  return ths->err_;
+}
+
+extern "C" void delete_aspell_can_have_error(CanHaveError * ths)
+{
+  delete ths;
+}
+
+
+
+}
+
diff --git a/lib/config-c.cpp b/lib/config-c.cpp
new file mode 100644 (file)
index 0000000..183f4f9
--- /dev/null
@@ -0,0 +1,172 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "config.hpp"
+#include "error.hpp"
+#include "posib_err.hpp"
+#include "string.hpp"
+
+namespace acommon {
+
+class Config;
+struct Error;
+struct KeyInfo;
+class KeyInfoEnumeration;
+class MutableContainer;
+class StringPairEnumeration;
+
+extern "C" int aspell_key_info_enumeration_at_end(const KeyInfoEnumeration * ths)
+{
+  return ths->at_end();
+}
+
+extern "C" const KeyInfo * aspell_key_info_enumeration_next(KeyInfoEnumeration * ths)
+{
+  return ths->next();
+}
+
+extern "C" void delete_aspell_key_info_enumeration(KeyInfoEnumeration * ths)
+{
+  delete ths;
+}
+
+extern "C" KeyInfoEnumeration * aspell_key_info_enumeration_clone(const KeyInfoEnumeration * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_key_info_enumeration_assign(KeyInfoEnumeration * ths, const KeyInfoEnumeration * other)
+{
+  ths->assign(other);
+}
+
+extern "C" Config * new_aspell_config()
+{
+  return new_config();
+}
+
+extern "C" void delete_aspell_config(Config * ths)
+{
+  delete ths;
+}
+
+extern "C" Config * aspell_config_clone(const Config * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_config_assign(Config * ths, const Config * other)
+{
+  ths->assign(other);
+}
+
+extern "C" unsigned int aspell_config_error_number(const Config * ths)
+{
+  return ths->err_ == 0 ? 0 : 1;
+}
+
+extern "C" const char * aspell_config_error_message(const Config * ths)
+{
+  return ths->err_ ? ths->err_->mesg : "";
+}
+
+extern "C" const Error * aspell_config_error(const Config * ths)
+{
+  return ths->err_;
+}
+
+extern "C" void aspell_config_set_extra(Config * ths, const KeyInfo * begin, const KeyInfo * end)
+{
+  ths->set_extra(begin, end);
+}
+
+extern "C" const KeyInfo * aspell_config_keyinfo(Config * ths, const char * key)
+{
+  PosibErr<const KeyInfo *> ret = ths->keyinfo(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return ret.data;
+}
+
+extern "C" KeyInfoEnumeration * aspell_config_possible_elements(Config * ths, int include_extra)
+{
+  return ths->possible_elements(include_extra);
+}
+
+extern "C" const char * aspell_config_get_default(Config * ths, const char * key)
+{
+  PosibErr<String> ret = ths->get_default(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  ths->temp_str = ret.data;
+  return ths->temp_str.c_str();
+}
+
+extern "C" StringPairEnumeration * aspell_config_elements(Config * ths)
+{
+  return ths->elements();
+}
+
+extern "C" int aspell_config_replace(Config * ths, const char * key, const char * value)
+{
+  PosibErr<void> ret = ths->replace(key, value);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" int aspell_config_remove(Config * ths, const char * key)
+{
+  PosibErr<void> ret = ths->remove(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" int aspell_config_have(const Config * ths, const char * key)
+{
+  return ths->have(key);
+}
+
+extern "C" const char * aspell_config_retrieve(Config * ths, const char * key)
+{
+  PosibErr<String> ret = ths->retrieve(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  ths->temp_str = ret.data;
+  return ths->temp_str.c_str();
+}
+
+extern "C" int aspell_config_retrieve_list(Config * ths, const char * key, MutableContainer * lst)
+{
+  PosibErr<void> ret = ths->retrieve_list(key, lst);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" int aspell_config_retrieve_bool(Config * ths, const char * key)
+{
+  PosibErr<bool> ret = ths->retrieve_bool(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return -1;
+  return ret.data;
+}
+
+extern "C" int aspell_config_retrieve_int(Config * ths, const char * key)
+{
+  PosibErr<unsigned int> ret = ths->retrieve_int(key);
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return -1;
+  return ret.data;
+}
+
+
+
+}
+
diff --git a/lib/document_checker-c.cpp b/lib/document_checker-c.cpp
new file mode 100644 (file)
index 0000000..ffce994
--- /dev/null
@@ -0,0 +1,78 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "document_checker.hpp"
+#include "error.hpp"
+
+namespace acommon {
+
+class CanHaveError;
+class DocumentChecker;
+struct Error;
+class Filter;
+class Speller;
+
+extern "C" void delete_aspell_document_checker(DocumentChecker * ths)
+{
+  delete ths;
+}
+
+extern "C" unsigned int aspell_document_checker_error_number(const DocumentChecker * ths)
+{
+  return ths->err_ == 0 ? 0 : 1;
+}
+
+extern "C" const char * aspell_document_checker_error_message(const DocumentChecker * ths)
+{
+  return ths->err_ ? ths->err_->mesg : "";
+}
+
+extern "C" const Error * aspell_document_checker_error(const DocumentChecker * ths)
+{
+  return ths->err_;
+}
+
+extern "C" CanHaveError * new_aspell_document_checker(Speller * speller)
+{
+  PosibErr<DocumentChecker *> ret = new_document_checker(speller);
+  if (ret.has_err()) {
+    return new CanHaveError(ret.release_err());
+  } else {
+    return ret;
+  }
+}
+
+extern "C" DocumentChecker * to_aspell_document_checker(CanHaveError * obj)
+{
+  return static_cast<DocumentChecker *>(obj);
+}
+
+extern "C" void aspell_document_checker_reset(DocumentChecker * ths)
+{
+  ths->reset();
+}
+
+extern "C" void aspell_document_checker_process(DocumentChecker * ths, const char * str, int size)
+{
+  ths->process(str, size);
+}
+
+extern "C" Token aspell_document_checker_next_misspelling(DocumentChecker * ths)
+{
+  return ths->next_misspelling();
+}
+
+extern "C" Filter * aspell_document_checker_filter(DocumentChecker * ths)
+{
+  return ths->filter();
+}
+
+
+
+}
+
diff --git a/lib/dummy.cpp b/lib/dummy.cpp
new file mode 100644 (file)
index 0000000..0d660cc
--- /dev/null
@@ -0,0 +1 @@
+void pspell_aspell_dummy() {}
diff --git a/lib/error-c.cpp b/lib/error-c.cpp
new file mode 100644 (file)
index 0000000..87caa51
--- /dev/null
@@ -0,0 +1,24 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "error.hpp"
+
+namespace acommon {
+
+struct Error;
+struct ErrorInfo;
+
+extern "C" int aspell_error_is_a(const Error * ths, const ErrorInfo * e)
+{
+  return ths->is_a(e);
+}
+
+
+
+}
+
diff --git a/lib/filter-c.cpp b/lib/filter-c.cpp
new file mode 100644 (file)
index 0000000..75d1d83
--- /dev/null
@@ -0,0 +1,46 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "error.hpp"
+#include "filter.hpp"
+
+namespace acommon {
+
+class CanHaveError;
+struct Error;
+class Filter;
+
+extern "C" void delete_aspell_filter(Filter * ths)
+{
+  delete ths;
+}
+
+extern "C" unsigned int aspell_filter_error_number(const Filter * ths)
+{
+  return ths->err_ == 0 ? 0 : 1;
+}
+
+extern "C" const char * aspell_filter_error_message(const Filter * ths)
+{
+  return ths->err_ ? ths->err_->mesg : "";
+}
+
+extern "C" const Error * aspell_filter_error(const Filter * ths)
+{
+  return ths->err_;
+}
+
+extern "C" Filter * to_aspell_filter(CanHaveError * obj)
+{
+  return static_cast<Filter *>(obj);
+}
+
+
+
+}
+
diff --git a/lib/filter_entry.hpp b/lib/filter_entry.hpp
new file mode 100644 (file)
index 0000000..e96324c
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef FILTER_ENTRY_HEADER
+#define FILTER_ENTRY_HEADER
+
+#include "indiv_filter.hpp"
+
+namespace acommon {
+  
+  typedef IndividualFilter * (FilterFun) ();
+
+  struct FilterEntry
+  {
+    const char * name;
+    FilterFun * decoder;
+    FilterFun * filter;
+    FilterFun * encoder;
+  };
+};
+#endif
+  
diff --git a/lib/find_speller.cpp b/lib/find_speller.cpp
new file mode 100644 (file)
index 0000000..3ea469c
--- /dev/null
@@ -0,0 +1,494 @@
+// This file is part of The New Aspell
+// Copyright (C) 2000-2001 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include <assert.h>
+#include <string.h>
+
+// POSIX includes
+#include <sys/types.h>
+#include <dirent.h>
+
+#include "asc_ctype.hpp"
+#include "can_have_error.hpp"
+#include "config.hpp"
+#include "convert.hpp"
+#include "enumeration.hpp"
+#include "errors.hpp"
+#include "filter.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "info.hpp"
+#include "speller.hpp"
+#include "stack_ptr.hpp"
+#include "string_enumeration.hpp"
+#include "string_list.hpp"
+#include "string_map.hpp"
+
+#include "gettext.h"
+
+#if 0
+#include "preload.h"
+#define LT_NON_POSIX_NAMESPACE 1
+#ifdef USE_LTDL
+#include <ltdl.h>
+#endif
+#endif
+
+using namespace acommon;
+
+namespace acommon {
+
+  static void free_lt_handle(SpellerLtHandle h) 
+  {
+#ifdef USE_LTDL
+    int s;
+    s = lt_dlclose((lt_dlhandle)h);
+    assert (s == 0);
+    s = lt_dlexit();
+    assert (s == 0);
+#endif
+  }
+
+  extern "C" 
+  Speller * libaspell_speller_default_LTX_new_speller_class(SpellerLtHandle);
+  
+  PosibErr<Speller *> get_speller_class(Config * config)
+  {
+    String name = config->retrieve("module");
+    assert(name == "default");
+    return libaspell_speller_default_LTX_new_speller_class(0);
+#if 0
+    unsigned int i; 
+    for (i = 0; i != aspell_speller_funs_size; ++i) {
+      if (strcmp(name.c_str(), aspell_speller_funs[i].name) == 0) {
+       return (*aspell_speller_funs[i].fun)(config, 0);
+      }
+    }
+  
+#ifdef USE_LTDL
+    int s = lt_dlinit();
+    assert(s == 0);
+    String libname;
+    libname  = LIBDIR "/libaspell_";
+    libname += name;
+    libname += ".la";
+    lt_dlhandle h = lt_dlopen (libname.c_str());
+    if (h == 0)
+      return (new CanHaveErrorImpl())
+       ->set_error(cant_load_module, name.c_str());
+    lt_ptr_t fun = lt_dlsym (h, "new_aspell_speller_class");
+    assert (fun != 0);
+    CanHaveError * m = (*(NewSpellerClass)(fun))(config, h);
+    assert (m != 0);
+    if (m->error_number() != 0)
+      free_lt_handle(h);
+    return m;
+#else
+    return (new CanHaveErrorImpl())
+      ->set_error(cant_load_module, name.c_str());
+#endif
+#endif
+  }
+
+  // Note this writes all over str
+  static void split_string_list(StringList & list, ParmString str)
+  {
+    const char * s0 = str;
+    const char * s1;
+    while (true) {
+      while (*s0 != '\0' && asc_isspace(*s0)) ++s0;
+      if (*s0 == '\0') break;
+      s1 = s0;
+      while (!asc_isspace(*s1)) ++s1;
+      String temp(s0,s1-s0);
+      list.add(temp);
+      if (*s1 != '\0')
+       s0 = s1 + 1;
+    }
+  }
+
+  enum IsBetter {BetterMatch, WorseMatch, SameMatch};
+
+  struct Better
+  {
+    unsigned int cur_rank;
+    unsigned int best_rank;
+    unsigned int worst_rank;
+    virtual void init() = 0;
+    virtual void set_best_from_cur() = 0;
+    virtual void set_cur_rank() = 0;
+    IsBetter better_match(IsBetter prev);  
+    virtual ~Better();
+  };
+
+  Better::~Better() {}
+
+  IsBetter Better::better_match (IsBetter prev)
+  {
+    if (prev == WorseMatch)
+      return prev;
+    set_cur_rank();
+    if (cur_rank >= worst_rank)
+      return WorseMatch;
+    else if (cur_rank < best_rank)
+      return BetterMatch;
+    else if (cur_rank == best_rank)
+      return prev;
+    else // cur_rank > best_rank
+      if (prev == SameMatch)
+       return WorseMatch;
+      else
+       return BetterMatch;
+  }
+
+  struct BetterList : public Better
+  {
+    const char *         cur;
+    StringList           list;
+    const char *         best;
+    BetterList();
+    void init();
+    void set_best_from_cur();
+    void set_cur_rank();
+  };
+
+  BetterList::BetterList() 
+  {
+  }
+
+  void BetterList::init() {
+    StringListEnumeration es = list.elements_obj();
+    worst_rank = 0;
+    while ( (es.next()) != 0)
+      ++worst_rank;
+    best_rank = worst_rank;
+  }
+
+  void BetterList::set_best_from_cur() 
+  {
+    best_rank = cur_rank;
+    best = cur;
+  }
+
+  void BetterList::set_cur_rank() 
+  {
+    StringListEnumeration es = list.elements_obj();
+    const char * m;
+    cur_rank = 0;
+    while ( (m = es.next()) != 0 && strcmp(m, cur) != 0)
+      ++cur_rank;
+  }
+
+  struct BetterSize : public Better
+  {
+    unsigned int         cur;
+    const char *         cur_str;
+    char                 req_type;
+    unsigned int         requested;
+    unsigned int         size;
+    unsigned int         best;
+    const char *         best_str;
+    void init();
+    void set_best_from_cur();
+    void set_cur_rank();
+  };
+
+
+  void BetterSize::init() {
+    worst_rank = 0xFFF;
+    best_rank = worst_rank;
+  }
+
+  void BetterSize::set_best_from_cur() 
+  {
+    best_rank = cur_rank;
+    best = cur;
+    best_str = cur_str;
+  }
+
+  void BetterSize::set_cur_rank() 
+  {
+    int diff = cur - requested;
+    int sign;
+    if (diff < 0) {
+      cur_rank = -diff;
+      sign = -1;
+    } else {
+      cur_rank = diff;
+      sign = 1;
+    }
+    cur_rank <<= 1;
+    if ((sign == -1 && req_type == '+') || (sign == 1 && req_type == '-'))
+      cur_rank |= 0x1;
+    else if ((sign == -1 && req_type == '>') || (sign == 1 && req_type == '<'))
+      cur_rank |= 0x100;
+  }
+
+  struct BetterVariety : public Better
+  {
+    const char *         cur;
+    StringList           list;
+    const char *         best;
+    BetterVariety() {}
+    void init();
+    void set_best_from_cur();
+    void set_cur_rank();
+  };
+
+  void BetterVariety::init() {
+    worst_rank = 3;
+    best_rank = 3;
+  }
+
+  void BetterVariety::set_best_from_cur() 
+  {
+    best_rank = cur_rank;
+    best = cur;
+  }
+
+  void BetterVariety::set_cur_rank() 
+  {
+    if (strlen(cur) == 0) {
+      cur_rank = 2; 
+    } else {
+      StringListEnumeration es = list.elements_obj();
+      const char * m;
+      cur_rank = 3;
+      unsigned list_size = 0, num = 0;
+      while ( (m = es.next()) != 0 ) {
+        ++list_size;
+        unsigned s = strlen(m);
+        const char * c = cur;
+        unsigned p;
+        bool match = false;
+        num = 0;
+        for (; *c != '\0'; c += p) {
+          ++num;
+          p = strcspn(c, "-");
+          if (p == s && memcmp(m, c, s) == 0) {match = true; break;}
+          if (c[p] == '-') p++;
+        }
+        if (!match) goto fail;
+        cur_rank = 0;
+      }
+      if (cur_rank == 0 && num != list_size) cur_rank = 1;
+    }
+    return;
+  fail:
+    cur_rank = 3;
+  }
+
+  PosibErr<Config *> find_word_list(Config * c) 
+  {
+    Config * config = new_config();
+    RET_ON_ERR(config->read_in_settings(c));
+    String dict_name;
+
+    if (config->have("master")) {
+      dict_name = config->retrieve("master");
+
+    } else {
+
+      ////////////////////////////////////////////////////////////////////
+      //
+      // Give first preference to an exact match for the language-country
+      // code, then give preference to those in the alternate code list
+      // in the order they are presented, then if there is no match
+      // look for one for just language.  If that fails give up.
+      // Once the best matching code is found, try to find a matching
+      // variety if one exists, other wise look for one with no variety.
+      //
+
+      BetterList b_code;
+      //BetterList b_jargon;
+      BetterVariety b_variety;
+      BetterList b_module;
+      BetterSize b_size;
+      Better * better[4] = {&b_code,&b_variety,&b_module,&b_size};
+      const DictInfo * best = 0;
+
+      //
+      // retrieve and normalize code
+      //
+      const char * p;
+      String code;
+      PosibErr<String> str = config->retrieve("lang");
+      p = str.data.c_str();
+      while (asc_isalpha(*p))
+        code += asc_tolower(*p++);
+      String lang = code;
+      bool have_country = false;
+      if (*p == '-' || *p == '_') {
+        ++p;
+        have_country = true;
+        code += '_'; 
+        while (asc_isalpha(*p))
+          code += asc_toupper(*p++);
+      }
+  
+      //
+      // Retrieve acceptable code search orders
+      //
+      String lang_country_list;
+      if (have_country) {
+        lang_country_list = code;
+        lang_country_list += ' ';
+      }
+      String lang_only_list = lang;
+      lang_only_list += ' ';
+
+      // read retrieve lang_country_list and lang_only_list from file(s)
+      // FIXME: Write Me
+
+      //
+      split_string_list(b_code.list, lang_country_list);
+      split_string_list(b_code.list, lang_only_list);
+      b_code.init();
+
+      //
+      // Retrieve Variety
+      // 
+      config->retrieve_list("variety", &b_variety.list);
+      if (b_variety.list.empty() && config->have("jargon")) 
+        b_variety.list.add(config->retrieve("jargon"));
+      b_variety.init();
+      str.data.clear();
+
+      //
+      // Retrieve module list
+      //
+      if (config->have("module"))
+        b_module.list.add(config->retrieve("module"));
+      else if (config->have("module-search-order"))
+        config->retrieve_list("module-search-order", &b_module.list);
+      {
+        StackPtr<ModuleInfoEnumeration> els(get_module_info_list(config)->elements());
+        const ModuleInfo * entry;
+        while ( (entry = els->next()) != 0)
+          b_module.list.add(entry->name);
+      }
+      b_module.init();
+
+      //
+      // Retrieve size
+      //
+      str = config->retrieve("size");
+      p = str.data.c_str();
+      if (p[0] == '+' || p[0] == '-' || p[0] == '<' || p[0] == '>') {
+        b_size.req_type = p[0];
+        ++p;
+      } else {
+        b_size.req_type = '+';
+      }
+      if (!asc_isdigit(p[0]) || !asc_isdigit(p[1]) || p[2] != '\0')
+        abort(); //FIXME: create an error condition here
+      b_size.requested = atoi(p);
+      b_size.init();
+
+      //
+      // 
+      //
+
+      const DictInfoList * dlist = get_dict_info_list(config);
+      DictInfoEnumeration * dels = dlist->elements();
+      const DictInfo * entry;
+
+      while ( (entry = dels->next()) != 0) {
+
+        b_code  .cur = entry->code;
+        b_module.cur = entry->module->name;
+
+        b_variety.cur = entry->variety;
+    
+        b_size.cur_str = entry->size_str;
+        b_size.cur     = entry->size;
+
+        //
+        // check to see if we got a better match than the current
+        // best_match if any
+        //
+
+        IsBetter is_better = SameMatch;
+        for (int i = 0; i != 4; ++i)
+          is_better = better[i]->better_match(is_better);
+    
+        if (is_better == BetterMatch) {
+          for (int i = 0; i != 4; ++i)
+            better[i]->set_best_from_cur();
+          best = entry;
+        }
+      }
+
+      delete dels;
+
+      //
+      // set config to best match
+      //
+      if (best != 0) {
+        String main_wl,flags;
+        PosibErrBase ret = get_dict_file_name(best, main_wl, flags);
+        if (ret.has_err()) {
+          delete config;
+          return ret;
+        }
+        dict_name = best->name;
+        config->replace("lang", b_code.best);
+        config->replace("language-tag", b_code.best);
+        config->replace("master", main_wl.c_str());
+        config->replace("master-flags", flags.c_str());
+        config->replace("module", b_module.best);
+        config->replace("jargon", b_variety.best);
+        config->replace("clear-variety", "");
+        unsigned p;
+        for (const char * c = b_module.best; *c != '\0'; c += p) {
+          p = strcspn(c, "-");
+          config->replace("add-variety", String(c, p));
+        }
+        config->replace("size", b_size.best_str);
+      } else {
+        delete config;
+        return make_err(no_wordlist_for_lang, code);
+      }
+    }
+
+    const StringMap * dict_aliases = get_dict_aliases(config);
+    const char * val = dict_aliases->lookup(dict_name);
+    if (val) config->replace("master", val);
+    return config;
+  }
+
+  PosibErr<void> reload_filters(Speller * m) 
+  {
+    m->to_internal_->filter.clear();
+    m->from_internal_->filter.clear();
+    // Add enocder and decoder filters if any
+    RET_ON_ERR(setup_filter(m->to_internal_->filter, m->config(), 
+                           true, false, false));
+    RET_ON_ERR(setup_filter(m->from_internal_->filter, m->config(), 
+                           false, false, true));
+    return no_err;
+  }
+
+  PosibErr<Speller *> new_speller(Config * c0) 
+  {
+    aspell_gettext_init();
+
+    RET_ON_ERR_SET(find_word_list(c0), Config *, c);
+    StackPtr<Speller> m(get_speller_class(c));
+    RET_ON_ERR(m->setup(c));
+
+    RET_ON_ERR(reload_filters(m));
+    
+    return m.release();
+  }
+
+  void delete_speller(Speller * m) 
+  {
+    SpellerLtHandle h = ((Speller *)(m))->lt_handle();
+    delete m;
+    if (h != 0) free_lt_handle(h);
+  }
+}
diff --git a/lib/info-c.cpp b/lib/info-c.cpp
new file mode 100644 (file)
index 0000000..3c05e79
--- /dev/null
@@ -0,0 +1,112 @@
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "info.hpp"
+
+namespace acommon {
+
+class Config;
+struct DictInfo;
+class DictInfoEnumeration;
+class DictInfoList;
+struct ModuleInfo;
+class ModuleInfoEnumeration;
+class ModuleInfoList;
+
+extern "C" ModuleInfoList * get_aspell_module_info_list(Config * config)
+{
+  return const_cast<ModuleInfoList *>(get_module_info_list(config));
+}
+
+extern "C" int aspell_module_info_list_empty(const ModuleInfoList * ths)
+{
+  return ths->empty();
+}
+
+extern "C" unsigned int aspell_module_info_list_size(const ModuleInfoList * ths)
+{
+  return ths->size();
+}
+
+extern "C" ModuleInfoEnumeration * aspell_module_info_list_elements(const ModuleInfoList * ths)
+{
+  return ths->elements();
+}
+
+extern "C" DictInfoList * get_aspell_dict_info_list(Config * config)
+{
+  return const_cast<DictInfoList *>(get_dict_info_list(config));
+}
+
+extern "C" int aspell_dict_info_list_empty(const DictInfoList * ths)
+{
+  return ths->empty();
+}
+
+extern "C" unsigned int aspell_dict_info_list_size(const DictInfoList * ths)
+{
+  return ths->size();
+}
+
+extern "C" DictInfoEnumeration * aspell_dict_info_list_elements(const DictInfoList * ths)
+{
+  return ths->elements();
+}
+
+extern "C" int aspell_module_info_enumeration_at_end(const ModuleInfoEnumeration * ths)
+{
+  return ths->at_end();
+}
+
+extern "C" const ModuleInfo * aspell_module_info_enumeration_next(ModuleInfoEnumeration * ths)
+{
+  return ths->next();
+}
+
+extern "C" void delete_aspell_module_info_enumeration(ModuleInfoEnumeration * ths)
+{
+  delete ths;
+}
+
+extern "C" ModuleInfoEnumeration * aspell_module_info_enumeration_clone(const ModuleInfoEnumeration * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_module_info_enumeration_assign(ModuleInfoEnumeration * ths, const ModuleInfoEnumeration * other)
+{
+  ths->assign(other);
+}
+
+extern "C" int aspell_dict_info_enumeration_at_end(const DictInfoEnumeration * ths)
+{
+  return ths->at_end();
+}
+
+extern "C" const DictInfo * aspell_dict_info_enumeration_next(DictInfoEnumeration * ths)
+{
+  return ths->next();
+}
+
+extern "C" void delete_aspell_dict_info_enumeration(DictInfoEnumeration * ths)
+{
+  delete ths;
+}
+
+extern "C" DictInfoEnumeration * aspell_dict_info_enumeration_clone(const DictInfoEnumeration * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_dict_info_enumeration_assign(DictInfoEnumeration * ths, const DictInfoEnumeration * other)
+{
+  ths->assign(other);
+}
+
+
+
+}
+
diff --git a/lib/mutable_container-c.cpp b/lib/mutable_container-c.cpp
new file mode 100644 (file)
index 0000000..5d7654b
--- /dev/null
@@ -0,0 +1,39 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "mutable_container.hpp"
+#include "posib_err.hpp"
+
+namespace acommon {
+
+class MutableContainer;
+
+extern "C" int aspell_mutable_container_add(MutableContainer * ths, const char * to_add)
+{
+  return ths->add(to_add);
+}
+
+extern "C" int aspell_mutable_container_remove(MutableContainer * ths, const char * to_rem)
+{
+  return ths->remove(to_rem);
+}
+
+extern "C" void aspell_mutable_container_clear(MutableContainer * ths)
+{
+  ths->clear();
+}
+
+extern "C" MutableContainer * aspell_mutable_container_to_mutable_container(MutableContainer * ths)
+{
+  return ths;
+}
+
+
+
+}
+
diff --git a/lib/new_checker.cpp b/lib/new_checker.cpp
new file mode 100644 (file)
index 0000000..fe8509d
--- /dev/null
@@ -0,0 +1,26 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include "speller.hpp"
+#include "document_checker.hpp"
+#include "stack_ptr.hpp"
+#include "convert.hpp"
+#include "tokenizer.hpp"
+
+namespace acommon {
+
+  PosibErr<DocumentChecker *> 
+  new_document_checker(Speller * speller)
+  {
+    StackPtr<DocumentChecker> checker(new DocumentChecker());
+    Tokenizer * tokenizer = new_tokenizer(speller);
+    StackPtr<Filter> filter(new Filter);
+    setup_filter(*filter, speller->config(), true, true, false);
+    RET_ON_ERR(checker->setup(tokenizer, speller, filter.release()));
+    return checker.release();
+  }
+
+}
diff --git a/lib/new_config.cpp b/lib/new_config.cpp
new file mode 100644 (file)
index 0000000..6bcc426
--- /dev/null
@@ -0,0 +1,24 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include <string.h>
+
+#include "config.hpp"
+#include "errors.hpp"
+#include "filter.hpp"
+
+namespace acommon {
+  
+  extern void setup_static_filters(Config * config);
+
+  Config * new_config() 
+  {
+    Config * config = new_basic_config();
+    setup_static_filters(config);
+    return config;
+  }
+
+}
diff --git a/lib/new_filter.cpp b/lib/new_filter.cpp
new file mode 100644 (file)
index 0000000..728f8d4
--- /dev/null
@@ -0,0 +1,540 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson and Christoph Hintermüller
+// under the GNU LGPL license version 2.0 or 2.1.  You should have
+// received a copy of the LGPL license along with this library if you
+// did not you can find it at http://www.gnu.org/.
+//
+// Expansion for loading filter libraries and collections upon startup
+// was added by Christoph Hintermüller
+
+#include "settings.h"
+
+#include "cache-t.hpp"
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "enumeration.hpp"
+#include "errors.hpp"
+#include "filter.hpp"
+#include "filter_entry.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "indiv_filter.hpp"
+#include "iostream.hpp"
+#include "itemize.hpp"
+#include "key_info.hpp"
+#include "parm_string.hpp"
+#include "posib_err.hpp"
+#include "stack_ptr.hpp"
+#include "string_enumeration.hpp"
+#include "string_list.hpp"
+#include "string_map.hpp"
+#include "strtonum.hpp"
+#include "file_util.hpp"
+
+#include <stdio.h>
+
+#ifdef HAVE_LIBDL
+#  include <dlfcn.h>
+#endif
+
+namespace acommon
+{
+#include "static_filters.src.cpp"
+
+  //////////////////////////////////////////////////////////////////////////
+  //
+  // setup static filters
+  //
+
+  PosibErr<const ConfigModule *> get_dynamic_filter(Config * config, ParmStr value);
+  extern void activate_filter_modes(Config *config);
+
+  void setup_static_filters(Config * config)
+  {
+    config->set_filter_modules(filter_modules_begin, filter_modules_end);
+    activate_filter_modes(config);
+#ifdef HAVE_LIBDL
+    config->load_filter_hook = get_dynamic_filter;
+#endif
+  }
+
+  //////////////////////////////////////////////////////////////////////////
+  //
+  // 
+  //
+
+#ifdef HAVE_LIBDL
+
+  struct ConfigFilterModule : public Cacheable {
+    String name; 
+    String file; // path of shared object or dll
+    String desc; // description of module
+    Vector<KeyInfo> options;
+    typedef Config CacheConfig;
+    typedef String CacheKey;
+    static PosibErr<ConfigFilterModule *> get_new(const String & key, const Config *);
+    bool cache_key_eq(const String & okey) const {
+      return name == okey;
+    }
+    ConfigFilterModule() : in_option(0) {}
+    ~ConfigFilterModule();
+    bool in_option;
+    KeyInfo * new_option() {
+      options.push_back(KeyInfo()); 
+      in_option = true; 
+      return &options.back();}
+    PosibErr<void> end_option();
+  };
+
+  static GlobalCache<ConfigFilterModule> filter_module_cache("filters");
+
+  ConfigFilterModule::~ConfigFilterModule()
+  {
+    for (Vector<KeyInfo>::iterator i = options.begin();
+         i != options.end();
+         ++i)
+    {
+      free(const_cast<char *>(i->name));
+      free(const_cast<char *>(i->def));
+      free(const_cast<char *>(i->desc));
+    }
+  }
+
+#endif
+
+  class IndividualFilter;
+
+  //
+  // actual code
+  //
+
+  FilterEntry * get_standard_filter(ParmStr);
+
+  //////////////////////////////////////////////////////////////////////////
+  //
+  // setup filter
+  //
+
+  PosibErr<void> setup_filter(Filter & filter, 
+                             Config * config, 
+                             bool use_decoder, bool use_filter, bool use_encoder)
+  {
+    StringList sl;
+    config->retrieve_list("filter", &sl);
+    StringListEnumeration els = sl.elements_obj();
+    const char * filter_name;
+    String fun;
+
+    StackPtr<IndividualFilter> ifilter;
+
+    filter.clear();
+
+    while ((filter_name = els.next()) != 0) {
+      //fprintf(stderr, "Loading %s ... \n", filter_name);
+      FilterEntry * f = get_standard_filter(filter_name);
+      // In case libdl is not available a filter is only available if made
+      // one of the standard filters. This is done by statically linking
+      // the filter sources.
+      // On systems providing libdl or in case libtool mimics libdl 
+      // The following code parts assure that all filters needed and requested
+      // by user are loaded properly or be reported to be missing.
+      // 
+      FilterHandle decoder_handle, filter_handle, encoder_handle;
+#ifdef HAVE_LIBDL
+      FilterEntry dynamic_filter;
+      if (!f) {
+
+        RET_ON_ERR_SET(get_dynamic_filter(config, filter_name),
+                       const ConfigModule *, module);
+
+        if (!(decoder_handle = dlopen(module->file,RTLD_NOW)) ||
+            !(encoder_handle = dlopen(module->file,RTLD_NOW)) ||
+            !(filter_handle  = dlopen(module->file,RTLD_NOW)))
+          return make_err(cant_dlopen_file,dlerror()).with_file(filter_name);
+
+        fun = "new_aspell_";
+        fun += filter_name;
+        fun += "_decoder";
+        dynamic_filter.decoder = (FilterFun *)dlsym(decoder_handle.get(), fun.str());
+
+        fun = "new_aspell_";
+        fun += filter_name;
+        fun += "_encoder";
+        dynamic_filter.encoder = (FilterFun *)dlsym(encoder_handle.get(), fun.str());
+
+        fun = "new_aspell_";
+        fun += filter_name;
+        fun += "_filter";
+        dynamic_filter.filter = (FilterFun *)dlsym(filter_handle.get(), fun.str());
+
+        if (!dynamic_filter.decoder && 
+           !dynamic_filter.encoder &&
+           !dynamic_filter.filter)
+          return make_err(empty_filter,filter_name);
+        dynamic_filter.name = filter_name;
+        f = &dynamic_filter;
+      } 
+#else
+      if (!f)
+        return make_err(no_such_filter, filter_name);
+#endif
+      if (use_decoder && f->decoder && (ifilter = f->decoder())) {
+        RET_ON_ERR_SET(ifilter->setup(config), bool, keep);
+        ifilter->handle = decoder_handle.release();
+       if (!keep) {
+         ifilter.del();
+       } else {
+          filter.add_filter(ifilter.release());
+        }
+      } 
+      if (use_filter && f->filter && (ifilter = f->filter())) {
+        RET_ON_ERR_SET(ifilter->setup(config), bool, keep);
+        ifilter->handle = filter_handle.release();
+        if (!keep) {
+          ifilter.del();
+        } else {
+          filter.add_filter(ifilter.release());
+        }
+      }
+      if (use_encoder && f->encoder && (ifilter = f->encoder())) {
+        RET_ON_ERR_SET(ifilter->setup(config), bool, keep);
+        ifilter->handle = encoder_handle.release();
+        if (!keep) {
+          ifilter.del();
+        } else {
+          filter.add_filter(ifilter.release());
+        }
+      }
+    }
+    return no_err;
+  }
+
+  //////////////////////////////////////////////////////////////////////////
+  //
+  // get filter
+  //
+
+  FilterEntry * get_standard_filter(ParmStr filter_name) {
+    unsigned int i = 0;
+    while (i != standard_filters_size) {
+      if (standard_filters[i].name == filter_name) {
+       return (FilterEntry *) standard_filters + i;
+      }
+      ++i;
+    }
+    return 0;
+  }
+
+#ifdef HAVE_LIBDL
+
+  PosibErr<const ConfigModule *> get_dynamic_filter(Config * config, ParmStr filter_name) 
+  {
+    for (const ConfigModule * cur = config->filter_modules.pbegin();
+         cur != config->filter_modules.pend();
+         ++cur)
+    {
+      if (strcmp(cur->name,filter_name) == 0) return cur;
+    }
+
+    RET_ON_ERR_SET(get_cache_data(&filter_module_cache, config, filter_name), 
+                   ConfigFilterModule *, module);
+
+    ConfigModule m = {
+      module->name.str(), module->file.str(), module->desc.str(),
+      module->options.pbegin(), module->options.pend()
+    };
+
+    config->filter_modules_ptrs.push_back(module);
+    config->filter_modules.push_back(m);
+
+    return &config->filter_modules.back();
+  }
+
+  PosibErr<ConfigFilterModule *> ConfigFilterModule::get_new(const String & filter_name, 
+                                                             const Config * config)
+  {
+    StackPtr<ConfigFilterModule> module(new ConfigFilterModule);
+    module->name = filter_name;
+    KeyInfo * cur_opt = NULL;
+
+    String option_file = filter_name;
+    option_file += "-filter.info";
+    if (!find_file(config, "filter-path", option_file))
+      return make_err(no_such_filter, filter_name);
+
+    FStream options;
+    RET_ON_ERR(options.open(option_file,"r"));
+
+    String buf; DataPair d;
+    while (getdata_pair(options,d,buf))
+    {
+      to_lower(d.key);
+
+      //
+      // key == aspell
+      //
+      if (d.key == "aspell") 
+      {
+        if ( d.value == NULL || *d.value == '\0' )
+          return make_err(confusing_version).with_file(option_file,d.line_num);
+#ifdef FILTER_VERSION_CONTROL 
+       PosibErr<void> peb = check_version(d.value.str);
+        if (peb.has_err()) return peb.with_file(option_file,d.line_num);
+#endif
+        continue;
+      }
+         
+      //
+      // key == option
+      //
+      if (d.key == "option" ) {
+
+        RET_ON_ERR(module->end_option());
+
+        to_lower(d.value.str);
+
+        cur_opt = module->new_option();
+        
+        char * s = (char *)malloc(2 + filter_name.size() + 1 + d.value.size + 1);
+        cur_opt->name = s;
+        memcpy(s, "f-", 2); 
+        s+= 2;
+        memcpy(s, filter_name.str(), filter_name.size());
+        s += filter_name.size();
+        *s++ = '-';
+        memcpy(s, d.value.str, d.value.size);
+        s += d.value.size;
+        *s = '\0';
+        for (Vector<KeyInfo>::iterator cur = module->options.begin();
+             cur != module->options.end() - 1; // avoid checking the one just inserted
+             ++cur) {
+          if (strcmp(cur_opt->name,cur->name) == 0)
+            return make_err(identical_option).with_file(option_file,d.line_num);
+        }
+
+        continue;
+      }
+
+      //
+      // key == static
+      //
+      if (d.key == "static") {
+        RET_ON_ERR(module->end_option());
+        continue;
+      }
+
+      //
+      // key == description
+      //
+      if ((d.key == "desc") ||
+          (d.key == "description")) {
+
+        unescape(d.value);
+
+        //
+        // filter description
+        // 
+        if (!module->in_option) {
+          module->desc = d.value;
+        } 
+        //
+        //option description
+        //
+        else {
+          //avoid memory leak;
+          if (cur_opt->desc) free((char *)cur_opt->desc);
+          cur_opt->desc = strdup(d.value.str);
+        }
+        continue;
+      }
+
+      //
+      // key == lib-file
+      //
+      if (d.key == "lib-file")
+      {
+        module->file = d.value;
+        continue;
+      }
+         
+      //
+      // !active_option
+      //
+      if (!module->in_option) {
+        return make_err(options_only).with_file(option_file,d.line_num);
+      }
+
+      //
+      // key == type
+      //
+      if (d.key == "type") {
+        to_lower(d.value); // This is safe since normally option_value is used
+        if (d.value == "list") 
+          cur_opt->type = KeyInfoList;
+        else if (d.value == "int" || d.value == "integer") 
+          cur_opt->type = KeyInfoInt;
+        else if (d.value == "string")
+          cur_opt->type = KeyInfoString;
+        //FIXME why not force user to ommit type specifier or explicitly say bool ???
+        else
+          cur_opt->type = KeyInfoBool;
+        continue;
+      }
+
+      //
+      // key == default
+      //
+      if (d.key == "def" || d.key == "default") {
+            
+        if (cur_opt->type == KeyInfoList) {
+
+          int new_len = 0;
+          int orig_len = 0;
+          if (cur_opt->def) {
+            orig_len = strlen(cur_opt->def);
+            new_len += orig_len + 1;
+          }
+          for (const char * s = d.value.str; *s; ++s) {
+            if (*s == ':') ++new_len;
+            ++new_len;
+          }
+          new_len += 1;
+          char * x = (char *)realloc((char *)cur_opt->def, new_len);
+          cur_opt->def = x;
+          if (orig_len > 0) {
+            x += orig_len;
+            *x++ = ':';
+          }
+          for (const char * s = d.value.str; *s; ++s) {
+            if (*s == ':') *x++ = ':';
+            *x++ = *s;
+          }
+          *x = '\0';
+
+        } else {
+
+          // FIXME
+          //may try some syntax checking
+          //if ( cur_opt->type == KeyInfoBool ) {
+          //  check for valid bool values true false 0 1 on off ...
+          //  and issue error if wrong or assume false ??
+          //}
+          //if ( cur_opt->type == KeyInfoInt ) {
+          //  check for valid integer or double and issue error if not
+          //}
+          unescape(d.value);
+          cur_opt->def = strdup(d.value.str);
+        }
+        continue;
+      }
+          
+      //
+      // key == flags
+      //
+      if (d.key == "flags") {
+        if (d.value == "utf-8" || d.value == "UTF-8")
+          cur_opt->flags = KEYINFO_UTF8;
+        continue;
+      }
+           
+      //
+      // key == endoption
+      //
+      if (d.key=="endoption") {
+        RET_ON_ERR(module->end_option());
+        continue;
+      }
+
+      // 
+      // error
+      // 
+      return make_err(invalid_option_modifier).with_file(option_file,d.line_num);
+        
+    } // end while getdata_pair_c
+    RET_ON_ERR(module->end_option());
+    const char * slash = strrchr(option_file.str(), '/');
+    assert(slash);
+    if (module->file.empty()) {
+      module->file.assign(option_file.str(), slash + 1 - option_file.str());
+      //module->file += "lib";
+      module->file += filter_name;
+      module->file += "-filter.so";
+    } else {
+      if (module->file[0] != '/')
+        module->file.insert(0, option_file.str(), slash + 1 - option_file.str());
+      module->file += ".so";
+    }
+
+    return module.release();
+  }
+
+  PosibErr<void>  ConfigFilterModule::end_option()
+  {
+    if (in_option) 
+    {
+      // FIXME: Check to make sure there is a name and desc.
+      KeyInfo * cur_opt = &options.back();
+      if (!cur_opt->def) cur_opt->def = strdup("");
+    }
+    in_option = false;
+    return no_err;
+  }
+
+#endif
+
+  void load_all_filters(Config * config) {
+#ifdef HAVE_LIBDL
+    StringList filter_path;
+    String toload;
+    
+    config->retrieve_list("filter-path", &filter_path);
+    PathBrowser els(filter_path, "-filter.info");
+    
+    const char * file;
+    while ((file = els.next()) != NULL) {
+      
+      const char * name = strrchr(file, '/');
+      if (!name) name = file;
+      else name++;
+      unsigned len = strlen(name) - 12;
+      
+      toload.assign(name, len);
+      
+      get_dynamic_filter(config, toload);
+    }
+#endif
+  }
+
+
+  class FiltersEnumeration : public StringPairEnumeration
+  {
+  public:
+    typedef Vector<ConfigModule>::const_iterator Itr;
+  private:
+    Itr it;
+    Itr end;
+  public:
+    FiltersEnumeration(Itr i, Itr e) : it(i), end(e) {}
+    bool at_end() const {return it == end;}
+    StringPair next()
+    {
+      if (it == end) return StringPair();
+      StringPair res = StringPair(it->name, it->desc);
+      ++it;
+      return res;
+    }
+    StringPairEnumeration * clone() const {return new FiltersEnumeration(*this);}
+    void assign(const StringPairEnumeration * other0)
+    {
+      const FiltersEnumeration * other = (const FiltersEnumeration *)other0;
+      *this = *other;
+    }
+  };
+
+  PosibErr<StringPairEnumeration *> available_filters(Config * config)
+  {
+    return new FiltersEnumeration(config->filter_modules.begin(),
+                                  config->filter_modules.end());
+  }
+
+}
diff --git a/lib/new_fmode.cpp b/lib/new_fmode.cpp
new file mode 100644 (file)
index 0000000..0b5630b
--- /dev/null
@@ -0,0 +1,783 @@
+// This file is part of The New Aspell
+// Copyright (C) 2004 by Christoph Hintermüller (JEH) under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include "settings.h"
+
+#ifdef USE_POSIX_REGEX
+#  include <sys/types.h>
+#  include <regex.h>
+#endif
+
+#include "stack_ptr.hpp"
+#include "cache-t.hpp"
+#include "string.hpp"
+#include "vector.hpp"
+#include "config.hpp"
+#include "errors.hpp"
+#include "filter.hpp"
+#include "string_enumeration.hpp"
+#include "string_list.hpp"
+#include "posib_err.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "strtonum.hpp"
+#include "asc_ctype.hpp"
+#include "iostream.hpp"
+
+#include "gettext.h"
+
+namespace acommon {
+
+  class FilterMode {
+  public:
+    class MagicString {
+    public:
+      MagicString(const String & mode) : mode_(mode), fileExtensions() {}
+      MagicString(const String & magic, const String & mode)
+        : magic_(magic), mode_(mode) {} 
+      bool matchFile(FILE * in, const String & ext);
+      static PosibErr<bool> testMagic(FILE * seekIn, String & magic, const String & mode);
+      void addExtension(const String & ext) { fileExtensions.push_back(ext); }
+      bool hasExtension(const String & ext);
+      void remExtension(const String & ext);
+      MagicString & operator += (const String & ext) {addExtension(ext);return *this;}
+      MagicString & operator -= (const String & ext) {remExtension(ext);return *this;}
+      MagicString & operator = (const String & ext) { 
+        fileExtensions.clear();
+        addExtension(ext);
+        return *this; 
+      }
+      const String & magic() const { return magic_; }
+      const String & magicMode() const { return mode_; }
+      ~MagicString() {}
+    private:
+      String magic_;
+      String mode_;
+      Vector<String> fileExtensions;
+    };
+
+    FilterMode(const String & name);
+    PosibErr<bool> addModeExtension(const String & ext, String toMagic);
+    PosibErr<bool> remModeExtension(const String & ext, String toMagic);
+    bool lockFileToMode(const String & fileName,FILE * in = NULL);
+    const String & modeName() const;
+    void setDescription(const String & desc) {desc_ = desc;}
+    const String & getDescription() const {return desc_;}
+    PosibErr<void> expand(Config * config);
+    PosibErr<void> build(FStream &, int line = 1, 
+                         const char * fname = "mode file");
+
+    ~FilterMode();
+  private:
+    //map extensions to magic keys 
+    String name_;
+    String desc_;
+    String file_;
+    Vector<MagicString> magicKeys;
+    struct KeyValue {
+      String key;
+      String value;
+      KeyValue() {}
+      KeyValue(ParmStr k, ParmStr v) : key(k), value(v) {}
+    };
+    Vector<KeyValue> expansion;
+  };
+
+  class FilterModeList : public Cacheable, public Vector<FilterMode>
+  {
+  public:
+    typedef Config CacheConfig;
+    typedef String CacheKey;
+    String key;
+    static PosibErr<FilterModeList *> get_new(const String & key, const Config *);
+    bool cache_key_eq(const String & okey) const {
+      return key == okey;
+    }
+  };
+
+  class ModeNotifierImpl : public Notifier
+  {
+  private:
+    ModeNotifierImpl();
+    ModeNotifierImpl(const ModeNotifierImpl &);
+    ModeNotifierImpl & operator= (const ModeNotifierImpl & b);
+    CachePtr<FilterModeList> filter_modes_;
+  public:
+    Config * config;
+    PosibErr<FilterModeList *> get_filter_modes();
+    
+    ModeNotifierImpl(Config * c) : config(c) 
+    {
+      c->filter_mode_notifier = this;
+    }
+    ModeNotifierImpl(const ModeNotifierImpl & other,  Config * c) 
+      : filter_modes_(other.filter_modes_), config(c) 
+    {
+      c->filter_mode_notifier = this;
+    }
+    
+    ModeNotifierImpl * clone(Config * c) const {return new ModeNotifierImpl(*this, c);}
+
+    PosibErr<void> item_updated(const KeyInfo * ki, ParmStr);
+    PosibErr<void> list_updated(const KeyInfo * ki);
+
+    ~ModeNotifierImpl() {}
+  };
+
+  FilterMode::FilterMode(const String & name)
+  : name_(name) {}
+
+  PosibErr<bool> FilterMode::addModeExtension(const String & ext, String toMagic) {
+
+    bool extOnly = false;
+    
+    if (    ( toMagic == "" )
+         || ( toMagic == "<noregex>" )
+         || ( toMagic == "<nomagic>" )
+         || ( toMagic == "<empty>" ) ) {
+      extOnly = true;
+    }
+    else {
+
+      RET_ON_ERR(FilterMode::MagicString::testMagic(NULL,toMagic,name_));
+
+    } 
+
+    Vector<MagicString>::iterator it;
+
+    for ( it = magicKeys.begin() ; it != magicKeys.end() ; it++ ) {
+      if (    (    extOnly
+                && ( it->magic() == "" ) )
+           || ( it->magic() == toMagic ) ) {
+        *it += ext;
+        return true;
+      }
+    }
+    if ( it != magicKeys.end() ) {
+      return false;
+    }
+    if ( extOnly ) {
+      magicKeys.push_back(MagicString(name_));
+    }
+    else {
+      magicKeys.push_back(MagicString(toMagic,name_));
+    }
+    for ( it = magicKeys.begin() ; it != magicKeys.end() ; it++ ) {
+      if (    (    extOnly
+                && ( it->magic() == "" ) )
+           || ( it->magic() == toMagic ) ) {
+        *it += ext;
+        return true;
+      }
+    }
+    return make_err(mode_extend_expand,name_.str());
+  }
+
+  PosibErr<bool> FilterMode::remModeExtension(const String & ext, String toMagic) {
+
+    bool extOnly = false;
+
+    if (    ( toMagic == "" )
+         || ( toMagic == "<nomagic>" )
+         || ( toMagic == "<empty>" ) ) {
+      extOnly = true;
+    }
+    else {
+
+      PosibErr<bool> pe = FilterMode::MagicString::testMagic(NULL,toMagic,name_);
+
+      if ( pe.has_err() ) {
+        return PosibErrBase(pe);
+      }
+    }
+
+    for ( Vector<MagicString>::iterator it = magicKeys.begin() ;
+          it != magicKeys.end() ; it++ ) {
+      if (    (    extOnly
+                && ( it->magic() == "" ) )
+           || ( it->magic() == toMagic ) ) {
+        *it -= ext;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool FilterMode::lockFileToMode(const String & fileName,FILE * in) {
+
+    Vector<unsigned int> extStart;
+    int first_point = fileName.size();
+
+    while ( first_point > 0 ) {
+      while (    ( --first_point >= 0 )
+              && ( fileName[first_point] != '.' ) ) {
+      }
+      if (    ( first_point >= 0 )
+           && ( fileName[first_point] == '.' ) ) {
+        extStart.push_back(first_point + 1);
+      }
+    }
+    if ( extStart.size() < 1 )  {
+      return false;
+    }
+
+    bool closeFile = false;
+
+    if ( in == NULL ) {
+      in = fopen(fileName.str(),"rb");
+      closeFile= true;
+    }
+    for ( Vector<unsigned int>::iterator extSIt = extStart.begin() ;
+          extSIt != extStart.end() ; extSIt ++ ) {
+    
+      String ext(fileName);
+
+      ext.erase(0,*extSIt);
+      for ( Vector<MagicString>::iterator it = magicKeys.begin() ;
+            it != magicKeys.end() ; it++ ) {
+        PosibErr<bool> magicMatch = it->matchFile(in,ext);
+        if (    magicMatch 
+             || magicMatch.has_err() ) {
+          if ( closeFile ) {
+            fclose ( in );
+          }
+          if ( magicMatch.has_err() ) {
+            magicMatch.ignore_err();
+            return false;
+          }
+          return true;
+        }
+      }
+    }
+    if ( closeFile ) {
+      fclose(in);
+    }
+    return false;
+  }
+
+  const String & FilterMode::modeName() const {
+    return name_;
+  }
+
+  FilterMode::~FilterMode() {
+  }
+
+  bool FilterMode::MagicString::hasExtension(const String & ext) {
+    for ( Vector<String>::iterator it = fileExtensions.begin() ;
+          it != fileExtensions.end() ; it++ ) {
+      if ( *it == ext ) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  void FilterMode::MagicString::remExtension(const String & ext) {
+    Vector<String>::iterator it = fileExtensions.begin();
+    while (it != fileExtensions.end()) {
+      if (*it == ext) {
+        it = fileExtensions.erase(it);
+      } else {
+        it++;
+      }
+    }
+  }
+
+
+  bool FilterMode::MagicString::matchFile(FILE * in,const String & ext) {
+
+    Vector<String>::iterator extIt;
+
+    for ( extIt = fileExtensions.begin() ; 
+          extIt != fileExtensions.end() ; extIt ++ ) {
+      if ( *extIt == ext ) {
+        break;
+      }
+    }
+    if ( extIt == fileExtensions.end() ) {
+      return false;
+    }
+
+    PosibErr<bool> pe = testMagic(in,magic_,mode_);
+
+    if ( pe.has_err() ) {
+      pe.ignore_err();
+      return false;
+    }
+    return true;
+  }
+
+
+  PosibErr<bool> FilterMode::MagicString::testMagic(FILE * seekIn,String & magic, const String & mode) {
+
+#ifdef USE_POSIX_REGEX
+
+    if ( magic.size() == 0 ) {
+      return true;
+    }
+    unsigned int magicFilePosition = 0;
+
+    while (    ( magicFilePosition < magic.size() )
+            && ( magic[magicFilePosition] != ':' ) ) {
+      magicFilePosition++;
+    }
+
+    String number(magic);
+
+    number.erase(magicFilePosition,magic.size() - magicFilePosition);
+
+    const char * num = number.str();
+    const char * numEnd = num + number.size();
+    const char * endHere = numEnd;
+    long position = 0;
+
+    if (    ( number.size() == 0 ) 
+         || ( (position = strtoi_c(num,&numEnd)) < 0 )
+         || ( numEnd != endHere ) ) {
+      return make_err(file_magic_pos,"",magic.str());
+    }
+    if (    ( magicFilePosition >= magic.size() )
+         || (    ( seekIn != NULL )
+              && ( fseek(seekIn,position,SEEK_SET) < 0 ) ) ) {
+      if ( seekIn != NULL ) {
+        rewind(seekIn);
+      }
+      return false;
+    }
+
+    //increment magicFilePosition to skip the `:'
+    unsigned int seekRangePos = ++ magicFilePosition; 
+
+    while (    ( magicFilePosition < magic.size() )
+            && ( magic[magicFilePosition] != ':' ) ) {
+      magicFilePosition++;
+    }
+
+    String magicRegExp(magic);
+
+    magicRegExp.erase(0,magicFilePosition + 1);
+    if ( magicRegExp.size() == 0 ) {
+      if ( seekIn != NULL ) {
+        rewind(seekIn);
+      }
+      return make_err(missing_magic,mode.str(),magic.str()); //no regular expression given
+    }
+    
+    number = magic;
+    number.erase(magicFilePosition,magic.size() - magicFilePosition);
+    number.erase(0,seekRangePos);//already incremented by one see above
+    num = (char*)number.str();
+    endHere = numEnd = num + number.size();
+
+    if (    ( number.size() == 0 )
+         || ( (position = strtoi_c(num,&numEnd)) < 0 )
+         || ( numEnd != endHere ) ) {
+      if ( seekIn != NULL ) {
+        rewind(seekIn);
+      }
+      return make_err(file_magic_range,mode.str(),magic.str());//no magic range given
+    }
+
+    regex_t seekMagic;
+    int regsucess = 0;
+
+    if ( (regsucess = regcomp(&seekMagic,magicRegExp.str(),
+                              REG_NEWLINE|REG_NOSUB|REG_EXTENDED)) ){
+      if ( seekIn != NULL ) {
+        rewind(seekIn);
+      }
+
+      char regError[256];
+      regerror(regsucess,&seekMagic,&regError[0],256);
+      return make_err(bad_magic,mode.str(),magic.str(),regError);
+    }
+    if ( seekIn == NULL ) {
+      regfree(&seekMagic);
+      return true;
+    }
+
+    char * buffer = new char[(position + 1)];
+
+    if ( buffer == NULL ) {
+      regfree(&seekMagic);
+      rewind(seekIn);
+      return false;
+    }
+    memset(buffer,0,(position + 1));
+    if ( (position = fread(buffer,1,position,seekIn)) == 0 ) {
+      rewind(seekIn);
+      regfree(&seekMagic);
+      delete[] buffer;
+      return false;
+    }
+    if ( regexec(&seekMagic,buffer,0,NULL,0) ) {
+      delete[] buffer;
+      regfree(&seekMagic);
+      rewind(seekIn);
+      return false;
+    }
+    delete[] buffer;
+    regfree(&seekMagic);
+    rewind(seekIn);
+    return true;
+
+#else
+
+    return true;
+
+#endif
+
+  }
+
+  PosibErr<void> FilterMode::expand(Config * config) {
+
+    config->replace("clear-filter","");
+    for ( Vector<KeyValue>::iterator it = expansion.begin() ;
+          it != expansion.end() ; it++ ) 
+    {
+      PosibErr<void> pe = config->replace(it->key, it->value);
+      if (pe.has_err()) return pe.with_file(file_);
+    }
+    return no_err;  
+  }
+
+  PosibErr<void> FilterMode::build(FStream & toParse, int line0, const char * fname) {
+
+    String buf;
+    DataPair dp;
+
+    file_ = fname;
+
+    dp.line_num = line0;
+
+    while ( getdata_pair(toParse, dp, buf) ) {
+
+      to_lower(dp.key);
+
+      if ( dp.key == "filter" ) {
+
+        to_lower(dp.value);
+        expansion.push_back(KeyValue("add-filter", dp.value));
+
+      } else if ( dp.key == "option" ) {
+
+        split(dp);
+        // FIXME: Add check for empty key
+
+        expansion.push_back(KeyValue(dp.key, dp.value));
+
+      } else {
+        
+        return make_err(bad_mode_key,dp.key).with_file(fname,dp.line_num);
+      }
+    }
+
+    return no_err;
+  }
+
+  static GlobalCache<FilterModeList> filter_modes_cache("filter_modes");
+
+  PosibErr<void> set_mode_from_extension (Config * config, ParmString filename, FILE * in) 
+  {
+    RET_ON_ERR_SET(static_cast<ModeNotifierImpl *>(config->filter_mode_notifier)
+                   ->get_filter_modes(), FilterModeList *, fm);
+
+    for ( FilterModeList::iterator it = fm->begin(); it != fm->end(); it++ ) 
+    {
+      if ( it->lockFileToMode(filename,in) ) {
+        RET_ON_ERR(config->replace("mode", it->modeName().str()));
+        break;
+      }
+    }
+    return no_err;
+  }
+
+  void activate_filter_modes(Config *config);
+
+  PosibErr<FilterModeList *>  ModeNotifierImpl::get_filter_modes()
+  {
+    if (!filter_modes_) {
+      //FIXME is filter-path proper for filter mode files ???
+      //      if filter-options-path better ???
+      //      do we need a filter-mode-path ???
+      //      should change to use genetic data-path once implemented
+      //        and then search filter-path - KevinA
+      String filter_path;
+      StringList filter_path_lst;
+      config->retrieve_list("filter-path", &filter_path_lst);
+      combine_list(filter_path, filter_path_lst);
+      RET_ON_ERR(setup(filter_modes_, &filter_modes_cache, config, filter_path));
+    }
+    return filter_modes_.get();
+  }
+
+
+  PosibErr<void> ModeNotifierImpl::item_updated(const KeyInfo * ki, ParmStr value)
+  {
+    if ( strcmp(ki->name, "mode") == 0 ) {
+      RET_ON_ERR_SET(get_filter_modes(), FilterModeList *, filter_modes);
+      for ( Vector<FilterMode>::iterator it = filter_modes->begin() ;
+            it != filter_modes->end() ; it++ ) {
+        if ( it->modeName() == value )
+          return it->expand(config);
+      }
+      return make_err(unknown_mode, value); 
+    }
+    return no_err;
+  }
+
+  PosibErr<void> ModeNotifierImpl::list_updated(const KeyInfo * ki)
+  {
+    if (strcmp(ki->name, "filter-path") == 0) {
+      filter_modes_.reset(0);
+    }
+    return no_err;
+  }
+
+  PosibErr<FilterModeList *> FilterModeList::get_new(const String & key,
+                                                     const Config *) 
+  {
+
+    StackPtr<FilterModeList> filter_modes(new FilterModeList);
+    filter_modes->key = key;
+    StringList mode_path;
+    separate_list(key, mode_path);
+    
+    PathBrowser els(mode_path, ".amf");
+
+    String possMode;
+    String possModeFile;
+
+    const char * file;
+    while ((file = els.next()) != NULL) 
+    {
+      possModeFile = file;
+      possMode.assign(possModeFile.str(), possModeFile.size() - 4);
+
+      unsigned pathPos = 0;
+      unsigned pathPosEnd = 0;
+
+      while (    ( (pathPosEnd = possMode.find('/',pathPos)) < possMode.size() )
+              && ( pathPosEnd >= 0 ) ) {
+        pathPos = pathPosEnd + 1;
+      }
+      possMode.erase(0,pathPos);
+      to_lower(possMode.mstr());
+
+      Vector<FilterMode>::iterator fmIt = filter_modes->begin();
+
+      for ( fmIt = filter_modes->begin() ; 
+            fmIt != filter_modes->end() ; fmIt++ ) {
+        if ( (*fmIt).modeName() == possMode ) {
+          break;
+        }
+      }
+      if ( fmIt != filter_modes->end() ) {
+        continue;
+      }
+
+      FStream toParse;
+
+      RET_ON_ERR(toParse.open(possModeFile.str(),"rb"));
+
+      String buf;
+      DataPair dp;
+
+      bool get_sucess = getdata_pair(toParse, dp, buf);
+      
+      to_lower(dp.key);
+      to_lower(dp.value);
+      if (    !get_sucess
+           || ( dp.key != "mode" ) 
+           || ( dp.value != possMode.str() ) )
+        return make_err(expect_mode_key,"mode").with_file(possModeFile, dp.line_num);
+
+      get_sucess = getdata_pair(toParse, dp, buf);
+      to_lower(dp.key);
+      if (    !get_sucess
+           || ( dp.key != "aspell" )
+           || ( dp.value == NULL )
+           || ( *(dp.value) == '\0' ) )
+        return make_err(mode_version_requirement).with_file(possModeFile, dp.line_num);
+
+#ifdef FILTER_VERSION_CONTROL
+      PosibErr<void> peb = check_version(dp.value.str);
+      if (peb.has_err()) return peb.with_file(possModeFile, dp.line_num);
+#endif
+      
+      FilterMode collect(possMode);
+      
+      while ( getdata_pair(toParse,dp,buf) ) {
+        to_lower(dp.key);
+        if (   ( dp.key == "desc" ) 
+            || ( dp.key == "description" ) ) 
+        {
+          unescape(dp.value);
+          collect.setDescription(dp.value);
+          break;
+        }
+        if ( dp.key == "magic" ) {
+
+          char * regbegin = dp.value;
+
+          while (    regbegin
+                  && ( *regbegin != '/' ) ) {
+            regbegin++;
+          }
+          if (    ( regbegin == NULL )
+               || ( *regbegin == '\0' ) 
+               || ( *(++regbegin) == '\0' ) )
+            return make_err(missing_magic_expression).with_file(possModeFile, dp.line_num);
+          
+          char * regend = regbegin;
+          bool prevslash = false;
+
+          while (    regend
+                  && ( *regend != '\0' )
+                  && (    prevslash
+                       || ( * regend != '/' ) ) )  {
+            if ( *regend == '\\' ) {
+              prevslash = !prevslash;
+            }
+            else {
+              prevslash = false;
+            }
+            regend ++ ;
+          }
+          if ( regend == regbegin )
+            return make_err(missing_magic_expression).with_file(possModeFile, dp.line_num);
+
+          char swap = *regend;
+
+          *regend = '\0';
+          
+          String magic(regbegin);
+          
+          *regend = swap;
+
+          unsigned int extCount = 0;
+
+          while ( *regend != '\0' ) {
+            regend ++;
+            extCount ++;
+            regbegin = regend;
+            while (    ( *regend != '/' ) 
+                    && ( *regend != '\0' ) ) {
+              regend++;
+            }
+            if ( regend == regbegin ) 
+            {
+              char charCount[64];
+              sprintf(&charCount[0],"%li",(long)(regbegin - (char *)dp.value));
+              return  make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num);
+            }
+
+            bool remove = false;
+            bool add = true;
+
+            if ( *regbegin == '+' ) {
+              regbegin++;
+            }
+            else if ( *regbegin == '-' ) {
+              add = false;
+              remove = true;
+              regbegin++;
+            }
+            if ( regend == regbegin ) 
+            {
+              char charCount[64];
+              sprintf(&charCount[0],"%li",(long)(regbegin - (char *)dp.value));
+              return  make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num);
+            }
+            swap = *regend;
+            *regend = '\0';
+            
+            String ext(regbegin);
+
+            *regend = swap;
+
+            // partially unescape magic
+            
+            char * dest = magic.mstr();
+            const char * src  = magic.mstr();
+            while (*src) {
+              if ((*src == '\\' && src[1] == '/') || src[1] == '#')
+                ++src;
+              *dest++ = *src++;
+            }
+            magic.resize(dest - magic.mstr());
+
+            PosibErr<bool> pe;
+
+            if ( remove )
+              pe = collect.remModeExtension(ext,magic);
+            else
+              pe = collect.addModeExtension(ext,magic);
+
+            if ( pe.has_err() )
+              return pe.with_file(possModeFile, dp.line_num);
+          }
+
+          if (extCount > 0 ) continue;
+
+          char charCount[64];
+          sprintf(&charCount[0],"%lu",(unsigned long)strlen((char *)dp.value));
+          return  make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num);
+        }
+
+        return make_err(expect_mode_key,"ext[tension]/magic/desc[ription]/rel[ation]")
+          .with_file(possModeFile,dp.line_num);
+      
+      }//while getdata_pair
+      
+      RET_ON_ERR(collect.build(toParse,dp.line_num,possModeFile.str()));
+
+      filter_modes->push_back(collect);
+    }
+    return filter_modes.release();
+  }
+
+  void activate_filter_modes(Config *config) 
+  {
+    config->add_notifier(new ModeNotifierImpl(config));
+  }
+
+  class FilterModesEnumeration : public StringPairEnumeration
+  {
+  public:
+    typedef Vector<FilterMode>::const_iterator Itr;
+  private:
+    Itr it;
+    Itr end;
+  public:
+    FilterModesEnumeration(Itr i, Itr e) : it(i), end(e) {}
+    bool at_end() const {return it == end;}
+    StringPair next()
+    {
+      if (it == end) return StringPair();
+      StringPair res = StringPair(it->modeName().str(), it->getDescription().str());
+      ++it;
+      return res;
+    }
+    StringPairEnumeration * clone() const {return new FilterModesEnumeration(*this);}
+    void assign(const StringPairEnumeration * other0)
+    {
+      const FilterModesEnumeration * other = (const FilterModesEnumeration *)other0;
+      *this = *other;
+    }
+  };
+
+  PosibErr<StringPairEnumeration *> available_filter_modes(Config * config)
+  {
+    RET_ON_ERR_SET(static_cast<ModeNotifierImpl *>(config->filter_mode_notifier)
+                   ->get_filter_modes(), FilterModeList *, fm);
+    return new FilterModesEnumeration(fm->begin(), fm->end());
+  }
+
+}
+
diff --git a/lib/speller-c.cpp b/lib/speller-c.cpp
new file mode 100644 (file)
index 0000000..2e8bdd8
--- /dev/null
@@ -0,0 +1,173 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "convert.hpp"
+#include "error.hpp"
+#include "mutable_string.hpp"
+#include "posib_err.hpp"
+#include "speller.hpp"
+#include "word_list.hpp"
+
+namespace acommon {
+
+class CanHaveError;
+class Config;
+struct Error;
+class Speller;
+class WordList;
+
+extern "C" CanHaveError * new_aspell_speller(Config * config)
+{
+  PosibErr<Speller *> ret = new_speller(config);
+  if (ret.has_err()) {
+    return new CanHaveError(ret.release_err());
+  } else {
+    return ret;
+  }
+}
+
+extern "C" Speller * to_aspell_speller(CanHaveError * obj)
+{
+  return static_cast<Speller *>(obj);
+}
+
+extern "C" void delete_aspell_speller(Speller * ths)
+{
+  delete ths;
+}
+
+extern "C" unsigned int aspell_speller_error_number(const Speller * ths)
+{
+  return ths->err_ == 0 ? 0 : 1;
+}
+
+extern "C" const char * aspell_speller_error_message(const Speller * ths)
+{
+  return ths->err_ ? ths->err_->mesg : "";
+}
+
+extern "C" const Error * aspell_speller_error(const Speller * ths)
+{
+  return ths->err_;
+}
+
+extern "C" Config * aspell_speller_config(Speller * ths)
+{
+  return ths->config();
+}
+
+extern "C" int aspell_speller_check(Speller * ths, const char * word, int word_size)
+{
+  ths->temp_str_0.clear();
+  ths->to_internal_->convert(word, word_size, ths->temp_str_0);
+  unsigned int s0 = ths->temp_str_0.size();
+  PosibErr<bool> ret = ths->check(MutableString(ths->temp_str_0.mstr(), s0));
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return -1;
+  return ret.data;
+}
+
+extern "C" int aspell_speller_add_to_personal(Speller * ths, const char * word, int word_size)
+{
+  ths->temp_str_0.clear();
+  ths->to_internal_->convert(word, word_size, ths->temp_str_0);
+  unsigned int s0 = ths->temp_str_0.size();
+  PosibErr<void> ret = ths->add_to_personal(MutableString(ths->temp_str_0.mstr(), s0));
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" int aspell_speller_add_to_session(Speller * ths, const char * word, int word_size)
+{
+  ths->temp_str_0.clear();
+  ths->to_internal_->convert(word, word_size, ths->temp_str_0);
+  unsigned int s0 = ths->temp_str_0.size();
+  PosibErr<void> ret = ths->add_to_session(MutableString(ths->temp_str_0.mstr(), s0));
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" const WordList * aspell_speller_personal_word_list(Speller * ths)
+{
+  PosibErr<const WordList *> ret = ths->personal_word_list();
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  if (ret.data)
+    const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_;
+  return ret.data;
+}
+
+extern "C" const WordList * aspell_speller_session_word_list(Speller * ths)
+{
+  PosibErr<const WordList *> ret = ths->session_word_list();
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  if (ret.data)
+    const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_;
+  return ret.data;
+}
+
+extern "C" const WordList * aspell_speller_main_word_list(Speller * ths)
+{
+  PosibErr<const WordList *> ret = ths->main_word_list();
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  if (ret.data)
+    const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_;
+  return ret.data;
+}
+
+extern "C" int aspell_speller_save_all_word_lists(Speller * ths)
+{
+  PosibErr<void> ret = ths->save_all_word_lists();
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" int aspell_speller_clear_session(Speller * ths)
+{
+  PosibErr<void> ret = ths->clear_session();
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  return 1;
+}
+
+extern "C" const WordList * aspell_speller_suggest(Speller * ths, const char * word, int word_size)
+{
+  ths->temp_str_0.clear();
+  ths->to_internal_->convert(word, word_size, ths->temp_str_0);
+  unsigned int s0 = ths->temp_str_0.size();
+  PosibErr<const WordList *> ret = ths->suggest(MutableString(ths->temp_str_0.mstr(), s0));
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return 0;
+  if (ret.data)
+    const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_;
+  return ret.data;
+}
+
+extern "C" int aspell_speller_store_replacement(Speller * ths, const char * mis, int mis_size, const char * cor, int cor_size)
+{
+  ths->temp_str_0.clear();
+  ths->to_internal_->convert(mis, mis_size, ths->temp_str_0);
+  unsigned int s0 = ths->temp_str_0.size();
+  ths->temp_str_1.clear();
+  ths->to_internal_->convert(cor, cor_size, ths->temp_str_1);
+  unsigned int s1 = ths->temp_str_1.size();
+  PosibErr<bool> ret = ths->store_replacement(MutableString(ths->temp_str_0.mstr(), s0), MutableString(ths->temp_str_1.mstr(), s1));
+  ths->err_.reset(ret.release_err());
+  if (ths->err_ != 0) return -1;
+  return ret.data;
+}
+
+
+
+}
+
diff --git a/lib/string_enumeration-c.cpp b/lib/string_enumeration-c.cpp
new file mode 100644 (file)
index 0000000..0fa4ae0
--- /dev/null
@@ -0,0 +1,52 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "convert.hpp"
+#include "string_enumeration.hpp"
+
+namespace acommon {
+
+class StringEnumeration;
+
+extern "C" void delete_aspell_string_enumeration(StringEnumeration * ths)
+{
+  delete ths;
+}
+
+extern "C" StringEnumeration * aspell_string_enumeration_clone(const StringEnumeration * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_string_enumeration_assign(StringEnumeration * ths, const StringEnumeration * other)
+{
+  ths->assign(other);
+}
+
+extern "C" int aspell_string_enumeration_at_end(const StringEnumeration * ths)
+{
+  return ths->at_end();
+}
+
+extern "C" const char * aspell_string_enumeration_next(StringEnumeration * ths)
+{
+  const char * s = ths->next();
+  if (s == 0 || ths->from_internal_ == 0) {
+    return s;
+  } else {
+    ths->temp_str.clear();
+    ths->from_internal_->convert(s,-1,ths->temp_str);
+    ths->from_internal_->append_null(ths->temp_str);
+    return ths->temp_str.data();
+  }
+}
+
+
+
+}
+
diff --git a/lib/string_list-c.cpp b/lib/string_list-c.cpp
new file mode 100644 (file)
index 0000000..8a939c8
--- /dev/null
@@ -0,0 +1,76 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "posib_err.hpp"
+#include "string_list.hpp"
+
+namespace acommon {
+
+class MutableContainer;
+class StringEnumeration;
+class StringList;
+
+extern "C" StringList * new_aspell_string_list()
+{
+  return new_string_list();
+}
+
+extern "C" int aspell_string_list_empty(const StringList * ths)
+{
+  return ths->empty();
+}
+
+extern "C" unsigned int aspell_string_list_size(const StringList * ths)
+{
+  return ths->size();
+}
+
+extern "C" StringEnumeration * aspell_string_list_elements(const StringList * ths)
+{
+  return ths->elements();
+}
+
+extern "C" int aspell_string_list_add(StringList * ths, const char * to_add)
+{
+  return ths->add(to_add);
+}
+
+extern "C" int aspell_string_list_remove(StringList * ths, const char * to_rem)
+{
+  return ths->remove(to_rem);
+}
+
+extern "C" void aspell_string_list_clear(StringList * ths)
+{
+  ths->clear();
+}
+
+extern "C" MutableContainer * aspell_string_list_to_mutable_container(StringList * ths)
+{
+  return ths;
+}
+
+extern "C" void delete_aspell_string_list(StringList * ths)
+{
+  delete ths;
+}
+
+extern "C" StringList * aspell_string_list_clone(const StringList * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_string_list_assign(StringList * ths, const StringList * other)
+{
+  ths->assign(other);
+}
+
+
+
+}
+
diff --git a/lib/string_map-c.cpp b/lib/string_map-c.cpp
new file mode 100644 (file)
index 0000000..f8eaca8
--- /dev/null
@@ -0,0 +1,91 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "posib_err.hpp"
+#include "string_map.hpp"
+
+namespace acommon {
+
+class MutableContainer;
+class StringMap;
+class StringPairEnumeration;
+
+extern "C" StringMap * new_aspell_string_map()
+{
+  return new_string_map();
+}
+
+extern "C" int aspell_string_map_add(StringMap * ths, const char * to_add)
+{
+  return ths->add(to_add);
+}
+
+extern "C" int aspell_string_map_remove(StringMap * ths, const char * to_rem)
+{
+  return ths->remove(to_rem);
+}
+
+extern "C" void aspell_string_map_clear(StringMap * ths)
+{
+  ths->clear();
+}
+
+extern "C" MutableContainer * aspell_string_map_to_mutable_container(StringMap * ths)
+{
+  return ths;
+}
+
+extern "C" void delete_aspell_string_map(StringMap * ths)
+{
+  delete ths;
+}
+
+extern "C" StringMap * aspell_string_map_clone(const StringMap * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_string_map_assign(StringMap * ths, const StringMap * other)
+{
+  ths->assign(other);
+}
+
+extern "C" int aspell_string_map_empty(const StringMap * ths)
+{
+  return ths->empty();
+}
+
+extern "C" unsigned int aspell_string_map_size(const StringMap * ths)
+{
+  return ths->size();
+}
+
+extern "C" StringPairEnumeration * aspell_string_map_elements(const StringMap * ths)
+{
+  return ths->elements();
+}
+
+extern "C" int aspell_string_map_insert(StringMap * ths, const char * key, const char * value)
+{
+  return ths->insert(key, value);
+}
+
+extern "C" int aspell_string_map_replace(StringMap * ths, const char * key, const char * value)
+{
+  return ths->replace(key, value);
+}
+
+extern "C" const char * aspell_string_map_lookup(const StringMap * ths, const char * key)
+{
+  return ths->lookup(key);
+}
+
+
+
+}
+
diff --git a/lib/string_pair_enumeration-c.cpp b/lib/string_pair_enumeration-c.cpp
new file mode 100644 (file)
index 0000000..e5f668d
--- /dev/null
@@ -0,0 +1,44 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "string_pair.hpp"
+#include "string_pair_enumeration.hpp"
+
+namespace acommon {
+
+class StringPairEnumeration;
+
+extern "C" int aspell_string_pair_enumeration_at_end(const StringPairEnumeration * ths)
+{
+  return ths->at_end();
+}
+
+extern "C" StringPair aspell_string_pair_enumeration_next(StringPairEnumeration * ths)
+{
+  return ths->next();
+}
+
+extern "C" void delete_aspell_string_pair_enumeration(StringPairEnumeration * ths)
+{
+  delete ths;
+}
+
+extern "C" StringPairEnumeration * aspell_string_pair_enumeration_clone(const StringPairEnumeration * ths)
+{
+  return ths->clone();
+}
+
+extern "C" void aspell_string_pair_enumeration_assign(StringPairEnumeration * ths, const StringPairEnumeration * other)
+{
+  ths->assign(other);
+}
+
+
+
+}
+
diff --git a/lib/word_list-c.cpp b/lib/word_list-c.cpp
new file mode 100644 (file)
index 0000000..f03dbcd
--- /dev/null
@@ -0,0 +1,37 @@
+/* Automatically generated file.  Do not edit directly. */
+
+/* This file is part of The New Aspell
+ * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+ * license version 2.0 or 2.1.  You should have received a copy of the
+ * LGPL license along with this library if you did not you can find it
+ * at http://www.gnu.org/.                                              */
+
+#include "string_enumeration.hpp"
+#include "word_list.hpp"
+
+namespace acommon {
+
+class StringEnumeration;
+class WordList;
+
+extern "C" int aspell_word_list_empty(const WordList * ths)
+{
+  return ths->empty();
+}
+
+extern "C" unsigned int aspell_word_list_size(const WordList * ths)
+{
+  return ths->size();
+}
+
+extern "C" StringEnumeration * aspell_word_list_elements(const WordList * ths)
+{
+  StringEnumeration * els = ths->elements();
+  els->from_internal_ = ths->from_internal_;
+  return els;
+}
+
+
+
+}
+
diff --git a/lib5/Makefile.am b/lib5/Makefile.am
new file mode 100644 (file)
index 0000000..c17d1cf
--- /dev/null
@@ -0,0 +1,16 @@
+
+if INCREMENTED_SONAME
+
+lib_LTLIBRARIES = libaspell.la
+libaspell_la_SOURCES = aspell-dummy.cpp
+libaspell_la_LDFLAGS = -version-info 16:0:1
+libaspell_la_LIBADD = ../libaspell.la
+
+if PSPELL_COMPATIBILITY
+lib_LTLIBRARIES += libpspell.la
+libpspell_la_SOURCES = pspell-dummy.cpp
+libpspell_la_LDFLAGS = -version-info 16:0:1
+libpspell_la_LIBADD = ../libaspell.la
+endif
+
+endif
diff --git a/lib5/Makefile.in b/lib5/Makefile.in
new file mode 100644 (file)
index 0000000..2042d02
--- /dev/null
@@ -0,0 +1,536 @@
+# Makefile.in generated by automake 1.10.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@am__append_1 = libpspell.la
+subdir = lib5
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/gen/settings.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+@INCREMENTED_SONAME_TRUE@libaspell_la_DEPENDENCIES = ../libaspell.la
+am__libaspell_la_SOURCES_DIST = aspell-dummy.cpp
+@INCREMENTED_SONAME_TRUE@am_libaspell_la_OBJECTS = aspell-dummy.lo
+libaspell_la_OBJECTS = $(am_libaspell_la_OBJECTS)
+libaspell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(libaspell_la_LDFLAGS) $(LDFLAGS) -o $@
+@INCREMENTED_SONAME_TRUE@am_libaspell_la_rpath = -rpath $(libdir)
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_DEPENDENCIES = ../libaspell.la
+am__libpspell_la_SOURCES_DIST = pspell-dummy.cpp
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@am_libpspell_la_OBJECTS = pspell-dummy.lo
+libpspell_la_OBJECTS = $(am_libpspell_la_OBJECTS)
+libpspell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(libpspell_la_LDFLAGS) $(LDFLAGS) -o $@
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@am_libpspell_la_rpath =  \
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@   -rpath \
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@   $(libdir)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/gen
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libaspell_la_SOURCES) $(libpspell_la_SOURCES)
+DIST_SOURCES = $(am__libaspell_la_SOURCES_DIST) \
+       $(am__libpspell_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDE = @CURSES_INCLUDE@
+CURSES_LIB = @CURSES_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERLPROG = @PERLPROG@
+POSUB = @POSUB@
+PTHREAD_LIB = @PTHREAD_LIB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgdocdir = @pkgdocdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@INCREMENTED_SONAME_TRUE@lib_LTLIBRARIES = libaspell.la \
+@INCREMENTED_SONAME_TRUE@      $(am__append_1)
+@INCREMENTED_SONAME_TRUE@libaspell_la_SOURCES = aspell-dummy.cpp
+@INCREMENTED_SONAME_TRUE@libaspell_la_LDFLAGS = -version-info 16:0:1
+@INCREMENTED_SONAME_TRUE@libaspell_la_LIBADD = ../libaspell.la
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_SOURCES = pspell-dummy.cpp
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_LDFLAGS = -version-info 16:0:1
+@INCREMENTED_SONAME_TRUE@@PSPELL_COMPATIBILITY_TRUE@libpspell_la_LIBADD = ../libaspell.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  lib5/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  lib5/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+           $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libaspell.la: $(libaspell_la_OBJECTS) $(libaspell_la_DEPENDENCIES) 
+       $(libaspell_la_LINK) $(am_libaspell_la_rpath) $(libaspell_la_OBJECTS) $(libaspell_la_LIBADD) $(LIBS)
+libpspell.la: $(libpspell_la_OBJECTS) $(libpspell_la_DEPENDENCIES) 
+       $(libpspell_la_LINK) $(am_libpspell_la_rpath) $(libpspell_la_OBJECTS) $(libpspell_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aspell-dummy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pspell-dummy.Plo@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@  $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(libdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libLTLIBRARIES clean-libtool ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am \
+       install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-libLTLIBRARIES
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib5/aspell-dummy.cpp b/lib5/aspell-dummy.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib5/pspell-dummy.cpp b/lib5/pspell-dummy.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755 (executable)
index 0000000..a8b3f1c
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,7808 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.2
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.2
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.2
+TIMESTAMP=""
+package_revision=1.2627
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/usr/bin/grep -E"}
+: ${FGREP="/usr/bin/grep -F"}
+: ${GREP="/usr/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/opt/local/bin/gsed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,./-,'`
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=`$ECHO "X$progpath" | $Xsed -e "$dirname"`
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+# Generated shell functions inserted here.
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+  case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+{
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    $SED -e 4q "$1" 2>/dev/null \
+      | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         extracted_serial=`expr $extracted_serial + 1`
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             lipo -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      mv -f "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSifmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.[fF][09]?) xform='[fF][09].' ;;
+    *.for) xform=for ;;
+    *.java) xform=java ;;
+    *.obj) xform=obj ;;
+    *.sx) xform=sx ;;
+    esac
+
+    libobj=`$ECHO "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE" 1 2 15
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    $opt_dry_run || $RM "$libobj" "${libobj}T"
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      $opt_dry_run || $RM "$lobj" "$output_obj"
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $opt_dry_run || $RM "$obj" "$output_obj"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin*|*mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_emit_wrapper arg
+#
+# emit a libtool wrapper script on stdout
+# don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variable
+# set therein.
+#
+# arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the '.lib' directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+static const char *script_text =
+EOF
+
+           func_emit_wrapper yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *shwrapper_name;
+  intptr_t rval = 127;
+  FILE *shwrapper;
+
+  const char *dumpscript_opt = "--lt-dump-script";
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          _setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<EOF
+         printf ("%s", script_text);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 2);
+EOF
+
+           if test -n "$TARGETSHELL" ; then
+             # no path translation at all
+             lt_newargv0=$TARGETSHELL
+           else
+             case "$host" in
+               *mingw* )
+                 # awkward: cmd appends spaces to result
+                 lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+                 lt_newargv0=`( cmd //c echo $SHELL | $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo $SHELL`
+                 case $lt_newargv0 in
+                   *.exe | *.EXE) ;;
+                   *) lt_newargv0=$lt_newargv0.exe ;;
+                 esac
+                 ;;
+               * ) lt_newargv0=$SHELL ;;
+             esac
+           fi
+
+               cat <<EOF
+  newargz[0] = (char *) xstrdup ("$lt_newargv0");
+EOF
+
+           cat <<"EOF"
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  shwrapper_name = (char *) xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, shwrapper_name);
+
+  /* shwrapper_name transforms */
+  strendzap (shwrapper_name, ".exe");
+  tmp_pathspec = XMALLOC (char, (strlen (shwrapper_name) +
+                                strlen ("_ltshwrapperTMP") + 1));
+  strcpy (tmp_pathspec, shwrapper_name);
+  strcat (tmp_pathspec, "_ltshwrapperTMP");
+  XFREE (shwrapper_name);
+  shwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool shell wrapper name: %s\n",
+                         shwrapper_name));
+EOF
+
+           cat <<EOF
+  newargz[1] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (shwrapper_name) + 1));
+  strcpy (newargz[1], actual_cwrapper_path);
+  strcat (newargz[1], "$objdir");
+  strcat (newargz[1], "/");
+  strcat (newargz[1], shwrapper_name);
+EOF
+
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[1], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (shwrapper_name);
+  XFREE (actual_cwrapper_path);
+
+  /* always write in binary mode */
+  if ((shwrapper = fopen (newargz[1], FOPEN_WB)) == 0)
+    {
+      lt_fatal ("Could not open %s for writing", newargz[1]);
+    }
+  fprintf (shwrapper, "%s", script_text);
+  fclose (shwrapper);
+
+  make_executable (newargz[1]);
+
+  for (i = 1; i < argc; i++)
+    newargz[i + 1] = xstrdup (argv[i]);
+  newargz[argc + 1] = NULL;
+
+  for (i = 0; i < argc + 1; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, newargz[i]));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<EOF
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, "$lt_newargv0", (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"$lt_newargv0\": errno = %d\n", errno));
+      return 127;
+    }
+  return rval;
+}
+EOF
+               ;;
+             *)
+               cat <<EOF
+  execv ("$lt_newargv0", newargz);
+  return rval; /* =127, but avoids unused variable warning */
+}
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+           # See comment for -static flag below, for more details.
+           func_append compile_command " $link_static_flag"
+           func_append finalize_command " $link_static_flag"
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       # The effects of -all-static are defined in a previous loop.
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           deplibs="$deplib $deplibs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw*)
+               major=`expr $current - $age`
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`otool -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'`
+                     darwin_install_name=`$ECHO $darwin_install_name`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`otool64 -L $depdepl | $SED -n -e '3q;2,2p' | $SED -e 's/(.*//'`
+                          darwin_install_name=`$ECHO $darwin_install_name`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           current=`expr $number_major + $number_minor`
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           current=`expr $number_major + $number_minor`
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         major=.`expr $current - $age`
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         minor_current=`expr $current + 1`
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           major=`expr $current - $age`
+         else
+           major=`expr $current - $age + 1`
+         fi
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           iface=`expr $revision - $loop`
+           loop=`expr $loop - 1`
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         major=.`expr $current - $age`
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         major=.`expr $current - $age`
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           iface=`expr $current - $loop`
+           loop=`expr $loop - 1`
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         major=`expr $current - $age`
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             name=`expr $i : '-l\(.*\)'`
+             # If $name is empty we are operating on a -L argument.
+             if test "$name" != "" && test "$name" != "0"; then
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             name=`expr $i : '-l\(.*\)'`
+             # If $name is empty we are operating on a -L argument.
+             if test "$name" != "" && test "$name" != "0"; then
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           name=`expr $a_deplib : '-l\(.*\)'`
+           # If $name is empty we are operating on a -L argument.
+           if test "$name" != "" && test  "$name" != "0"; then
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           name=`expr $a_deplib : '-l\(.*\)'`
+           # If $name is empty we are operating on a -L argument.
+           if test -n "$name" && test "$name" != "0"; then
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             if len=`expr "X$cmd" : ".*"` &&
+              test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+               if test "X$objlist" = X ||
+                  { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+                    test "$len" -le "$max_cmd_len"; }; then
+                 objlist="$objlist $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 k=`expr $k + 1`
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 len=1
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # we should really use a build-platform specific compiler
+           # here, but OTOH, the wrappers (shell script and this C one)
+           # are only useful if you want to execute the "real" binary.
+           # Since the "real" binary is built for $host, then this
+           # wrapper might as well be built for $host, too.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               counter=`expr $counter + 1`
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       if len=`expr "X$cmds" : ".*" 2>/dev/null` &&
+          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         for obj in $save_oldobjs
+         do
+           oldobjs="$objlist $obj"
+           objlist="$objlist $obj"
+           eval test_cmds=\"$old_archive_cmds\"
+           if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+              test "$len" -le "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/m4/Makefile.in b/m4/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644 (file)
index 0000000..223955b
--- /dev/null
@@ -0,0 +1,21 @@
+# codeset.m4 serial 2 (gettext-0.16)
+dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET); return !cs;],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644 (file)
index 0000000..91c345e
--- /dev/null
@@ -0,0 +1,419 @@
+# gettext.m4 serial 59 (gettext-0.16.1)
+dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in MacOS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    gt_cv_func_CFPreferencesCopyAppValue,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in MacOS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc2.m4 b/m4/glibc2.m4
new file mode 100644 (file)
index 0000000..e8f5bfe
--- /dev/null
@@ -0,0 +1,30 @@
+# glibc2.m4 serial 1
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.0 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gt_GLIBC2],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer,
+      ac_cv_gnu_library_2,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2=yes,
+       ac_cv_gnu_library_2=no)
+      ]
+    )
+    AC_SUBST(GLIBC2)
+    GLIBC2="$ac_cv_gnu_library_2"
+  ]
+)
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644 (file)
index 0000000..d95fd98
--- /dev/null
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644 (file)
index 0000000..654c415
--- /dev/null
@@ -0,0 +1,101 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
new file mode 100644 (file)
index 0000000..b8d7817
--- /dev/null
@@ -0,0 +1,70 @@
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+    gt_cv_int_divbyzero_sigfpe,
+    [
+      AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+        [
+          # Guess based on the CPU.
+          case "$host_cpu" in
+            alpha* | i[34567]86 | m68k | s390*)
+              gt_cv_int_divbyzero_sigfpe="guessing yes";;
+            *)
+              gt_cv_int_divbyzero_sigfpe="guessing no";;
+          esac
+        ])
+    ])
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+  AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+    [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/m4/intl.m4 b/m4/intl.m4
new file mode 100644 (file)
index 0000000..dcefb11
--- /dev/null
@@ -0,0 +1,259 @@
+# intl.m4 serial 3 (gettext-0.16)
+dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+AC_PREREQ(2.52)
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([gt_GLIBC2])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([gl_VISIBILITY])dnl
+  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
+  AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gt_TYPE_INTMAX_T])
+  AC_REQUIRE([gt_PRINTF_POSIX])
+  AC_REQUIRE([gl_GLIBC21])dnl
+  AC_REQUIRE([gl_XSIZE])dnl
+  AC_REQUIRE([gt_INTL_MACOSX])dnl
+
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
+  AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen])
+
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+  case $gt_cv_func_printf_posix in
+    *yes) HAVE_POSIX_PRINTF=1 ;;
+    *) HAVE_POSIX_PRINTF=0 ;;
+  esac
+  AC_SUBST([HAVE_POSIX_PRINTF])
+  if test "$ac_cv_func_asprintf" = yes; then
+    HAVE_ASPRINTF=1
+  else
+    HAVE_ASPRINTF=0
+  fi
+  AC_SUBST([HAVE_ASPRINTF])
+  if test "$ac_cv_func_snprintf" = yes; then
+    HAVE_SNPRINTF=1
+  else
+    HAVE_SNPRINTF=0
+  fi
+  AC_SUBST([HAVE_SNPRINTF])
+  if test "$ac_cv_func_wprintf" = yes; then
+    HAVE_WPRINTF=1
+  else
+    HAVE_WPRINTF=0
+  fi
+  AC_SUBST([HAVE_WPRINTF])
+
+  AM_LANGINFO_CODESET
+  gt_LC_MESSAGES
+
+  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
+  dnl 1. when we install a shared library, we must arrange to export
+  dnl    auxiliary pointer variables for every exported variable,
+  dnl 2. when we install a shared library and a static library simultaneously,
+  dnl    the include file specifies __declspec(dllimport) and therefore we
+  dnl    must arrange to define the auxiliary pointer variables for the
+  dnl    exported variables _also_ in the static library.
+  if test "$enable_shared" = yes; then
+    case "$host_os" in
+      cygwin*) is_woe32dll=yes ;;
+      *) is_woe32dll=no ;;
+    esac
+  else
+    is_woe32dll=no
+  fi
+  WOE32DLL=$is_woe32dll
+  AC_SUBST([WOE32DLL])
+
+  dnl Rename some macros and functions used for locking.
+  AH_BOTTOM([
+#define __libc_lock_t                   gl_lock_t
+#define __libc_lock_define              gl_lock_define
+#define __libc_lock_define_initialized  gl_lock_define_initialized
+#define __libc_lock_init                gl_lock_init
+#define __libc_lock_lock                gl_lock_lock
+#define __libc_lock_unlock              gl_lock_unlock
+#define __libc_lock_recursive_t                   gl_recursive_lock_t
+#define __libc_lock_define_recursive              gl_recursive_lock_define
+#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
+#define __libc_lock_init_recursive                gl_recursive_lock_init
+#define __libc_lock_lock_recursive                gl_recursive_lock_lock
+#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
+#define glthread_in_use  libintl_thread_in_use
+#define glthread_lock_init     libintl_lock_init
+#define glthread_lock_lock     libintl_lock_lock
+#define glthread_lock_unlock   libintl_lock_unlock
+#define glthread_lock_destroy  libintl_lock_destroy
+#define glthread_rwlock_init     libintl_rwlock_init
+#define glthread_rwlock_rdlock   libintl_rwlock_rdlock
+#define glthread_rwlock_wrlock   libintl_rwlock_wrlock
+#define glthread_rwlock_unlock   libintl_rwlock_unlock
+#define glthread_rwlock_destroy  libintl_rwlock_destroy
+#define glthread_recursive_lock_init     libintl_recursive_lock_init
+#define glthread_recursive_lock_lock     libintl_recursive_lock_lock
+#define glthread_recursive_lock_unlock   libintl_recursive_lock_unlock
+#define glthread_recursive_lock_destroy  libintl_recursive_lock_destroy
+#define glthread_once                 libintl_once
+#define glthread_once_call            libintl_once_call
+#define glthread_once_singlethreaded  libintl_once_singlethreaded
+])
+])
+
+
+dnl Checks for the core files of the intl subdirectory:
+dnl   dcigettext.c
+dnl   eval-plural.h
+dnl   explodename.c
+dnl   finddomain.c
+dnl   gettextP.h
+dnl   gmo.h
+dnl   hash-string.h hash-string.c
+dnl   l10nflist.c
+dnl   libgnuintl.h.in (except the *printf stuff)
+dnl   loadinfo.h
+dnl   loadmsgcat.c
+dnl   localealias.c
+dnl   log.c
+dnl   plural-exp.h plural-exp.c
+dnl   plural.y
+dnl Used by libglocale.
+AC_DEFUN([gt_INTL_SUBDIR_CORE],
+[
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([gt_INTDIV0])dnl
+  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+  AC_REQUIRE([gt_INTTYPES_PRI])dnl
+  AC_REQUIRE([gl_LOCK])dnl
+
+  AC_TRY_LINK(
+    [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
+    [],
+    [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1,
+       [Define to 1 if the compiler understands __builtin_expect.])])
+
+  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
+    stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
+    argz_next __fsetlocking])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+  gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+
+  AM_ICONV
+
+  dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined,
+  dnl and a _NL_LOCALE_NAME macro always.
+  AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name,
+    [AC_TRY_LINK([#include <langinfo.h>
+#include <locale.h>],
+      [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));],
+      gt_cv_nl_locale_name=yes,
+      gt_cv_nl_locale_name=no)
+    ])
+  if test $gt_cv_nl_locale_name = yes; then
+    AC_DEFINE(HAVE_NL_LOCALE_NAME, 1,
+      [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.])
+  fi
+
+  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+  dnl because plural.y uses bison specific features. It requires at least
+  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+  dnl compile.
+  dnl bison is only needed for the maintainer (who touches plural.y). But in
+  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+  dnl the rule in general Makefile. Now, some people carelessly touch the
+  dnl files or have a broken "make" program, hence the plural.c rule will
+  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+  dnl present or too old.
+  AC_CHECK_PROGS([INTLBISON], [bison])
+  if test -z "$INTLBISON"; then
+    ac_verc_fail=yes
+  else
+    dnl Found it, now check the version.
+    AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+    case $ac_prog_version in
+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+    esac
+    AC_MSG_RESULT([$ac_prog_version])
+  fi
+  if test $ac_verc_fail = yes; then
+    INTLBISON=:
+  fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+    [AC_TRY_COMPILE([$2], [
+#ifndef $1
+  char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+  if test $ac_cv_have_decl_$1 = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
diff --git a/m4/intldir.m4 b/m4/intldir.m4
new file mode 100644 (file)
index 0000000..7a28843
--- /dev/null
@@ -0,0 +1,19 @@
+# intldir.m4 serial 1 (gettext-0.16)
+dnl Copyright (C) 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+AC_PREREQ(2.52)
+
+dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory.
+AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], [])
diff --git a/m4/intmax.m4 b/m4/intmax.m4
new file mode 100644 (file)
index 0000000..ce7a8a4
--- /dev/null
@@ -0,0 +1,33 @@
+# intmax.m4 serial 3 (gettext-0.16)
+dnl Copyright (C) 2002-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+    [AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+],     [intmax_t x = -1;
+        return !x;],
+       gt_cv_c_intmax_t=yes,
+       gt_cv_c_intmax_t=no)])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE(HAVE_INTMAX_T, 1,
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644 (file)
index 0000000..7c7f894
--- /dev/null
@@ -0,0 +1,36 @@
+# inttypes-pri.m4 serial 4 (gettext-0.16)
+dnl Copyright (C) 1997-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.52)
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      gt_cv_inttypes_pri_broken,
+      [
+        AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100644 (file)
index 0000000..edc8ecb
--- /dev/null
@@ -0,0 +1,26 @@
+# inttypes_h.m4 serial 7
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_inttypes_h=yes,
+    gl_cv_header_inttypes_h=no)])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644 (file)
index 0000000..19aa77e
--- /dev/null
@@ -0,0 +1,30 @@
+# lcmessage.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+  AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES,
+    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)])
+  if test $gt_cv_val_LC_MESSAGES = yes; then
+    AC_DEFINE(HAVE_LC_MESSAGES, 1,
+      [Define if your <locale.h> file defines LC_MESSAGES.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644 (file)
index 0000000..96c4e2c
--- /dev/null
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644 (file)
index 0000000..f95b7ba
--- /dev/null
@@ -0,0 +1,644 @@
+# lib-link.m4 serial 9 (gettext-0.16)
+dnl Copyright (C) 2001-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644 (file)
index 0000000..a8684e1
--- /dev/null
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644 (file)
index 0000000..10846d1
--- /dev/null
@@ -0,0 +1,7275 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 55 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_quote(m4_if([$2], [],
+                    m4_quote(lt_decl_tag_varnames),
+                 m4_quote(m4_shift($@)))),
+     m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
+m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on 
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it? 
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      icc* | ecc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/lock.m4 b/m4/lock.m4
new file mode 100644 (file)
index 0000000..0224f2f
--- /dev/null
@@ -0,0 +1,311 @@
+# lock.m4 serial 6 (gettext-0.16)
+dnl Copyright (C) 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests for a multithreading library to be used.
+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
+dnl USE_PTH_THREADS, USE_WIN32_THREADS
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
+AC_DEFUN([gl_LOCK_EARLY],
+[
+  AC_REQUIRE([gl_LOCK_EARLY_BODY])
+])
+
+dnl The guts of gl_LOCK_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_EARLY_BODY],
+[
+  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+  dnl influences the result of the autoconf tests that test for *_unlocked
+  dnl declarations, on AIX 5 at least. Therefore it must come early.
+  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+  AC_BEFORE([$0], [gl_ARGP])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_GNU_SOURCE]) dnl needed for pthread_rwlock_t on glibc systems
+  dnl Check for multithreading.
+  AC_ARG_ENABLE(threads,
+AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API])
+AC_HELP_STRING([--disable-threads], [build without multithread safety]),
+    [gl_use_threads=$enableval],
+    [case "$host_os" in
+       dnl Disable multithreading by default on OSF/1, because it interferes
+       dnl with fork()/exec(): When msgexec is linked with -lpthread, its child
+       dnl process gets an endless segmentation fault inside execvp().
+       osf*) gl_use_threads=no ;;
+       *)    gl_use_threads=yes ;;
+     esac
+    ])
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_TRY_LINK test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+])
+
+dnl The guts of gl_LOCK. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_BODY],
+[
+  AC_REQUIRE([gl_LOCK_EARLY_BODY])
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+    dnl Check whether the compiler and linker support weak declarations.
+    AC_MSG_CHECKING([whether imported symbols can be declared weak])
+    gl_have_weak=no
+    AC_TRY_LINK([extern void xyzzy ();
+#pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes])
+    AC_MSG_RESULT([$gl_have_weak])
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_LOCK_EARLY_BODY.
+      AC_CHECK_HEADER(pthread.h, gl_have_pthread_h=yes, gl_have_pthread_h=no)
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        AC_TRY_LINK([#include <pthread.h>],
+          [pthread_mutex_lock((pthread_mutex_t*)0);
+           pthread_mutexattr_init((pthread_mutexattr_t*)0);],
+          [gl_have_pthread=yes])
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          AC_CHECK_LIB(pthread, pthread_kill,
+            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], 1,
+                   [Define if the pthread_in_use() detection is hard.])
+             esac
+            ])
+        else
+          # Some library is needed. Try libpthread and libc_r.
+          AC_CHECK_LIB(pthread, pthread_kill,
+            [gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            AC_CHECK_LIB(c_r, pthread_kill,
+              [gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+          AC_DEFINE([USE_POSIX_THREADS], 1,
+            [Define if the POSIX multithreading library can be used.])
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if test $gl_have_weak = yes; then
+              AC_DEFINE([USE_POSIX_THREADS_WEAK], 1,
+                [Define if references to the POSIX multithreading library should be made weak.])
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+          # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the
+          # pthread_rwlock_* functions.
+          AC_CHECK_TYPE([pthread_rwlock_t],
+            [AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1,
+               [Define if the POSIX multithreading library has read/write locks.])],
+            [],
+            [#include <pthread.h>])
+          # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+          AC_TRY_COMPILE([#include <pthread.h>],
+            [#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif],
+            [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1,
+               [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        AC_TRY_LINK([#include <thread.h>
+#include <synch.h>],
+          [thr_self();],
+          [gl_have_solaristhread=yes])
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+          AC_DEFINE([USE_SOLARIS_THREADS], 1,
+            [Define if the old Solaris multithreading library can be used.])
+          if test $gl_have_weak = yes; then
+            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], 1,
+              [Define if references to the old Solaris multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+      AC_LIB_LINKFLAGS(pth)
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS -lpth"
+      AC_TRY_LINK([#include <pth.h>], [pth_self();], gl_have_pth=yes)
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+        AC_DEFINE([USE_PTH_THREADS], 1,
+          [Define if the GNU Pth multithreading library can be used.])
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if test $gl_have_weak = yes; then
+            AC_DEFINE([USE_PTH_THREADS_WEAK], 1,
+              [Define if references to the GNU Pth multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then
+        if { case "$host_os" in
+               mingw*) true;;
+               *) false;;
+             esac
+           }; then
+          gl_threads_api=win32
+          AC_DEFINE([USE_WIN32_THREADS], 1,
+            [Define if the Win32 multithreading API can be used.])
+        fi
+      fi
+    fi
+  fi
+  AC_MSG_CHECKING([for multithread API to use])
+  AC_MSG_RESULT([$gl_threads_api])
+  AC_SUBST(LIBTHREAD)
+  AC_SUBST(LTLIBTHREAD)
+  AC_SUBST(LIBMULTITHREAD)
+  AC_SUBST(LTLIBMULTITHREAD)
+])
+
+AC_DEFUN([gl_LOCK],
+[
+  AC_REQUIRE([gl_LOCK_EARLY])
+  AC_REQUIRE([gl_LOCK_BODY])
+  gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [
+  AC_REQUIRE([AC_C_INLINE])
+])
+
+dnl Survey of platforms:
+dnl
+dnl Platform          Available   Compiler    Supports   test-lock
+dnl                   flavours    option      weak       result
+dnl ---------------   ---------   ---------   --------   ---------
+dnl Linux 2.4/glibc   posix       -lpthread       Y      OK
+dnl
+dnl GNU Hurd/glibc    posix
+dnl
+dnl FreeBSD 5.3       posix       -lc_r           Y
+dnl                   posix       -lkse ?         Y
+dnl                   posix       -lpthread ?     Y
+dnl                   posix       -lthr           Y
+dnl
+dnl FreeBSD 5.2       posix       -lc_r           Y
+dnl                   posix       -lkse           Y
+dnl                   posix       -lthr           Y
+dnl
+dnl FreeBSD 4.0,4.10  posix       -lc_r           Y      OK
+dnl
+dnl NetBSD 1.6        --
+dnl
+dnl OpenBSD 3.4       posix       -lpthread       Y      OK
+dnl
+dnl MacOS X 10.[123]  posix       -lpthread       Y      OK
+dnl
+dnl Solaris 7,8,9     posix       -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
+dnl                   solaris     -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11          posix       -lpthread       N (cc) OK
+dnl                                               Y (gcc)
+dnl
+dnl IRIX 6.5          posix       -lpthread       Y      0.5
+dnl
+dnl AIX 4.3,5.1       posix       -lpthread       N      AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1     posix       -pthread (cc)   N      OK
+dnl                               -lpthread (gcc) Y
+dnl
+dnl Cygwin            posix       -lpthread       Y      OK
+dnl
+dnl Any of the above  pth         -lpth                  0.0
+dnl
+dnl Mingw             win32                       N      OK
+dnl
+dnl BeOS 5            --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl   OK if all three tests terminate OK,
+dnl   0.5 if the first test terminates OK but the second one loops endlessly,
+dnl   0.0 if the first test already loops endlessly.
diff --git a/m4/longdouble.m4 b/m4/longdouble.m4
new file mode 100644 (file)
index 0000000..25590f4
--- /dev/null
@@ -0,0 +1,31 @@
+# longdouble.m4 serial 2 (gettext-0.15)
+dnl Copyright (C) 2002-2003, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+dnl This file is only needed in autoconf <= 2.59.  Newer versions of autoconf
+dnl have a macro AC_TYPE_LONG_DOUBLE with identical semantics.
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+  AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+    [if test "$GCC" = yes; then
+       gt_cv_c_long_double=yes
+     else
+       AC_TRY_COMPILE([
+         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
+         long double foo = 0.0;
+         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+         int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+         ], ,
+         gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+     fi])
+  if test $gt_cv_c_long_double = yes; then
+    AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+  fi
+])
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100644 (file)
index 0000000..3716c09
--- /dev/null
@@ -0,0 +1,48 @@
+# longlong.m4 serial 8
+dnl Copyright (C) 1999-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.60, but can be removed once we
+# assume 2.61 everywhere.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), AC_TYPE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[long long int ll = 9223372036854775807ll;
+           long long int nll = -9223372036854775807LL;
+           typedef int a[((-9223372036854775807LL < 0
+                           && 0 < 9223372036854775807ll)
+                          ? 1 : -1)];
+           int i = 63;]],
+         [[long long int llmax = 9223372036854775807ll;
+           return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+                   | (llmax / ll) | (llmax % ll));]])],
+       [ac_cv_type_long_long_int=yes],
+       [ac_cv_type_long_long_int=no])])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], 1,
+      [Define to 1 if the system has the type `long long int'.])
+  fi
+])
+
+# This macro is obsolescent and should go away soon.
+AC_DEFUN([gl_AC_TYPE_LONG_LONG],
+[
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  ac_cv_type_long_long=$ac_cv_type_long_long_int
+  if test $ac_cv_type_long_long = yes; then
+    AC_DEFINE(HAVE_LONG_LONG, 1,
+      [Define if you have the 'long long' type.])
+  fi
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644 (file)
index 0000000..a1c3aba
--- /dev/null
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644 (file)
index 0000000..0d258e0
--- /dev/null
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+m4_define([lt_combine],
+[m4_if([$2], [], [],
+  [m4_if([$4], [], [],
+    [lt_join(m4_quote(m4_default([$1], [[, ]])),
+      lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_prefix, [$2],
+                  [m4_foreach(_Lt_suffix, lt_car([m4_shiftn(3, $@)]),
+                              [_Lt_prefix[]$3[]_Lt_suffix ])])))))])])dnl
+])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644 (file)
index 0000000..a14b88a
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 2627 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.2])
+m4_define([LT_PACKAGE_REVISION], [1.2627])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.2'
+macro_revision='1.2627'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644 (file)
index 0000000..5a43332
--- /dev/null
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 3
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644 (file)
index 0000000..7967cc2
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644 (file)
index 0000000..00133ef
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,428 @@
+# po.m4 serial 13 (gettext-0.15)
+dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[     ]*VARIABLE[     ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[  ]*VARIABLE[     ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+       @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+       \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+       @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+       \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4
new file mode 100644 (file)
index 0000000..af10170
--- /dev/null
@@ -0,0 +1,44 @@
+# printf-posix.m4 serial 2 (gettext-0.13.1)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+    gt_cv_func_printf_posix,
+    [
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+      [
+        AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+  notposix
+#endif
+        ], gt_cv_func_printf_posix="guessing no",
+           gt_cv_func_printf_posix="guessing yes")
+      ])
+    ])
+  case $gt_cv_func_printf_posix in
+    *yes)
+      AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+        [Define if your printf() function supports format strings with positions.])
+      ;;
+  esac
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644 (file)
index 0000000..a56365c
--- /dev/null
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/m4/size_max.m4 b/m4/size_max.m4
new file mode 100644 (file)
index 0000000..bfba811
--- /dev/null
@@ -0,0 +1,62 @@
+# size_max.m4 serial 5
+dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS(stdint.h)
+  dnl First test whether the system already has SIZE_MAX.
+  AC_MSG_CHECKING([for SIZE_MAX])
+  AC_CACHE_VAL([gl_cv_size_max], [
+    gl_cv_size_max=
+    AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], gl_cv_size_max=yes)
+    if test -z "$gl_cv_size_max"; then
+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+      dnl than the type 'unsigned long'. Try hard to find a definition that can
+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+      _AC_COMPUTE_INT([sizeof (size_t) * CHAR_BIT - 1], size_t_bits_minus_1,
+        [#include <stddef.h>
+#include <limits.h>], size_t_bits_minus_1=)
+      _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
+        [#include <stddef.h>], fits_in_uint=)
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+          AC_TRY_COMPILE([#include <stddef.h>
+            extern size_t foo;
+            extern unsigned long foo;
+            ], [], fits_in_uint=0)
+        fi
+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
+        dnl works only with 'long' integers in the host environment, while we
+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+        if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+        dnl Shouldn't happen, but who knows...
+        gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+  ])
+  AC_MSG_RESULT([$gl_cv_size_max])
+  if test "$gl_cv_size_max" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+])
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644 (file)
index 0000000..db9a8ac
--- /dev/null
@@ -0,0 +1,26 @@
+# stdint_h.m4 serial 6
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_stdint_h=yes,
+    gl_cv_header_stdint_h=no)])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
new file mode 100644 (file)
index 0000000..bf83ed7
--- /dev/null
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 9
+dnl Copyright (C) 1997-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+    test $ac_cv_type_unsigned_long_long = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+      [Define to unsigned long or unsigned long long
+       if <stdint.h> and <inttypes.h> don't define.])
+  else
+    AC_DEFINE(HAVE_UINTMAX_T, 1,
+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4
new file mode 100644 (file)
index 0000000..9fae98e
--- /dev/null
@@ -0,0 +1,48 @@
+# ulonglong.m4 serial 6
+dnl Copyright (C) 1999-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.60, but can be removed once we
+# assume 2.61 everywhere.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[unsigned long long int ull = 18446744073709551615ULL;
+           typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1
+                          ? 1 : -1)];
+          int i = 63;]],
+         [[unsigned long long int ullmax = 18446744073709551615ull;
+           return (ull << 63 | ull >> 63 | ull << i | ull >> i
+                   | ullmax / ull | ullmax % ull);]])],
+       [ac_cv_type_unsigned_long_long_int=yes],
+       [ac_cv_type_unsigned_long_long_int=no])])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
+      [Define to 1 if the system has the type `unsigned long long int'.])
+  fi
+])
+
+# This macro is obsolescent and should go away soon.
+AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  ac_cv_type_unsigned_long_long=$ac_cv_type_unsigned_long_long_int
+  if test $ac_cv_type_unsigned_long_long = yes; then
+    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+      [Define if you have the 'unsigned long long' type.])
+  fi
+])
diff --git a/m4/visibility.m4 b/m4/visibility.m4
new file mode 100644 (file)
index 0000000..2ff6330
--- /dev/null
@@ -0,0 +1,52 @@
+# visibility.m4 serial 1 (gettext-0.15)
+dnl Copyright (C) 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl MacOS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+    AC_MSG_CHECKING([for simple visibility declarations])
+    AC_CACHE_VAL(gl_cv_cc_visibility, [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      AC_TRY_COMPILE(
+        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+         extern __attribute__((__visibility__("default"))) int exportedvar;
+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);],
+        [],
+        gl_cv_cc_visibility=yes,
+        gl_cv_cc_visibility=no)
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_visibility])
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+  AC_SUBST([CFLAG_VISIBILITY])
+  AC_SUBST([HAVE_VISIBILITY])
+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100644 (file)
index 0000000..cde2129
--- /dev/null
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+    [AC_TRY_COMPILE([#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100644 (file)
index 0000000..b8fff9c
--- /dev/null
@@ -0,0 +1,20 @@
+# wint_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+    [AC_TRY_COMPILE([#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/m4/xsize.m4 b/m4/xsize.m4
new file mode 100644 (file)
index 0000000..85bb721
--- /dev/null
@@ -0,0 +1,13 @@
+# xsize.m4 serial 3
+dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_REQUIRE([AC_C_INLINE])
+  AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/maintainer/FIXMEs b/maintainer/FIXMEs
new file mode 100644 (file)
index 0000000..2387709
--- /dev/null
@@ -0,0 +1,9 @@
+FIXME: Find a correct solution to the Upper Sorbian problem
+
+FIXME: allow soundslike to be "stripped" instead of "clean"
+
+FIXME: consider Eliminate string classes and use VirEnumeration
+FIXME: make each methods collection a (possible templates) base class
+
+FIXME: figure out how to include instructions about the format of
+  translated strings such as the length.
diff --git a/maintainer/README-CVS b/maintainer/README-CVS
new file mode 100644 (file)
index 0000000..d6a035d
--- /dev/null
@@ -0,0 +1,53 @@
+
+2004/01/19
+
+The following packages need to be installed to build this package
+from CVS.
+  perl (I use v5.6.0 but other versions may work)
+  libtool 1.5 or better
+  gettext 0.14.5
+  autoconf 2.50 or better
+  automake 1.7 or better
+  makeinfo
+
+Before the build:
+
+  ./autogen
+
+  ./configure --disable-static <options> 
+  or ./config-opt <options> or ./config-debug <options>
+
+The ./config-* will set things up for easier development.  If you want
+to install Aspell to use it rather than develop with it than use the
+normal configure.  When config-* is used the default things will be
+installed in <build dir>/inst for easier testing and debugging. You
+can change that by using the --prefix option.
+
+Autogen should be run when ever anything but the source files or
+Makefile.am files are modified by either yourself or a cvs update.
+
+Than to build and install:
+
+  make
+  make install
+
+You will then need to install a dictionary package for the new Aspell.
+You can find them at http://aspell.net.  If Aspell is installed
+somewhere other than /usr/local you will probably need to add
+<prefix>/bin to your PATH or make symbolic links to the executable in
+order for the dictionary to build correctly.
+
+To run the debugger on these programs if there are not installed use
+  libtool gdb <debugger parms>
+or
+  libtool --mode execute <your debugger> <debugger parms>
+For example to debug aspell with ddd use
+  libtool --mode execute ddd prog/.libs/aspell
+
+Using libtool is necessary to make sure the shared libraries get loaded
+right. If you debug them after they are installed this will not be
+necessary.
+
+--
+Kevin Atkinson
+kevin at atkinson dhs org
diff --git a/maintainer/TODO b/maintainer/TODO
new file mode 100644 (file)
index 0000000..1126a89
--- /dev/null
@@ -0,0 +1,5 @@
+Consider adding support for recognizing options translated in a
+  different language.
+
+
+
diff --git a/maintainer/autogen b/maintainer/autogen
new file mode 100755 (executable)
index 0000000..8ee4440
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+test -d interfaces || mkdir interfaces
+test -d interfaces/cc || mkdir interfaces/cc
+cd auto/
+perl mk-src.pl
+perl mk-doc.pl
+touch auto
+cd ..
+
+cd scripts/
+test -e preunzip || ln -s prezip preunzip
+test -e precat   || ln -s prezip precat
+cd ..
+
+autopoint -f || exit 1
+libtoolize --automake || exit 1
+aclocal -I m4 $ACLOCAL_FLAGS || exit 1
+autoheader || exit 1
+automake --add-missing --foreign || exit 1
+autoconf || exit 1
+
diff --git a/maintainer/config-debug b/maintainer/config-debug
new file mode 100755 (executable)
index 0000000..b816837
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+./configure --enable-maintainer-mode \
+  --disable-shared --disable-pspell-compatibility\
+  --prefix="`pwd`/inst" CFLAGS='-g -Wall' CXXFLAGS='-g -Wall' "$@"
+
+
diff --git a/maintainer/config-opt b/maintainer/config-opt
new file mode 100755 (executable)
index 0000000..d21a862
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+./configure --enable-maintainer-mode --disable-shared --disable-pspell-compatibility \
+  --prefix="`pwd`/inst" CFLAGS='-g -O -Wall' CXXFLAGS='-g -O -Wall' "$@"
+
+
+
diff --git a/manual/Makefile.am b/manual/Makefile.am
new file mode 100644 (file)
index 0000000..f7dbe47
--- /dev/null
@@ -0,0 +1,14 @@
+
+info_TEXINFOS = aspell.texi aspell-dev.texi
+
+MAKEINFOFLAGS = --enable-encoding
+
+aspell_TEXINFOS = readme.texi fdl.texi lgpl.texi \
+  lang-supported.texi lang-unsupported.texi crubadan.texi oo-only.texi
+aspell_dev_TEXINFOS = mksrc.texi fdl.texi
+
+man_MANS = aspell.1         pspell-config.1    word-list-compress.1\
+           aspell-import.1  run-with-aspell.1  prezip-bin.1
+
+EXTRA_DIST = $(man_MANS) aspell.html aspell-dev.html
+
diff --git a/manual/Makefile.in b/manual/Makefile.in
new file mode 100644 (file)
index 0000000..0946bd7
--- /dev/null
@@ -0,0 +1,688 @@
+# Makefile.in generated by automake 1.10.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = manual
+DIST_COMMON = $(aspell_TEXINFOS) $(aspell_dev_TEXINFOS) \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/gen/settings.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = $(srcdir)/aspell.info $(srcdir)/aspell-dev.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+DVIS = aspell.dvi aspell-dev.dvi
+PDFS = aspell.pdf aspell-dev.pdf
+PSS = aspell.ps aspell-dev.ps
+HTMLS = aspell.html aspell-dev.html
+TEXINFOS = aspell.texi aspell-dev.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDE = @CURSES_INCLUDE@
+CURSES_LIB = @CURSES_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERLPROG = @PERLPROG@
+POSUB = @POSUB@
+PTHREAD_LIB = @PTHREAD_LIB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgdocdir = @pkgdocdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+info_TEXINFOS = aspell.texi aspell-dev.texi
+MAKEINFOFLAGS = --enable-encoding
+aspell_TEXINFOS = readme.texi fdl.texi lgpl.texi \
+  lang-supported.texi lang-unsupported.texi crubadan.texi oo-only.texi
+
+aspell_dev_TEXINFOS = mksrc.texi fdl.texi
+man_MANS = aspell.1         pspell-config.1    word-list-compress.1\
+           aspell-import.1  run-with-aspell.1  prezip-bin.1
+
+EXTRA_DIST = $(man_MANS) aspell.html aspell-dev.html
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  manual/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  manual/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+.texi.info:
+       restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+       am__cwd=`pwd` && cd $(srcdir) && \
+       rm -rf $$backupdir && mkdir $$backupdir && \
+       if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+         for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+           if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+         done; \
+       else :; fi && \
+       cd "$$am__cwd"; \
+       if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+        -o $@ $<; \
+       then \
+         rc=0; \
+         cd $(srcdir); \
+       else \
+         rc=$$?; \
+         cd $(srcdir) && \
+         $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+       fi; \
+       rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+       $(TEXI2DVI) $<
+
+.texi.pdf:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+       $(TEXI2PDF) $<
+
+.texi.html:
+       rm -rf $(@:.html=.htp)
+       if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+        -o $(@:.html=.htp) $<; \
+       then \
+         rm -rf $@; \
+         if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+           mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+       else \
+         if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+           rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+         exit 1; \
+       fi
+$(srcdir)/aspell.info: aspell.texi $(aspell_TEXINFOS)
+aspell.dvi: aspell.texi $(aspell_TEXINFOS)
+aspell.pdf: aspell.texi $(aspell_TEXINFOS)
+aspell.html: aspell.texi $(aspell_TEXINFOS)
+$(srcdir)/aspell-dev.info: aspell-dev.texi $(aspell_dev_TEXINFOS)
+aspell-dev.dvi: aspell-dev.texi $(aspell_dev_TEXINFOS)
+aspell-dev.pdf: aspell-dev.texi $(aspell_dev_TEXINFOS)
+aspell-dev.html: aspell-dev.texi $(aspell_dev_TEXINFOS)
+.dvi.ps:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       $(DVIPS) -o $@ $<
+
+uninstall-dvi-am:
+       @$(NORMAL_UNINSTALL)
+       @list='$(DVIS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+         rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+       done
+
+uninstall-html-am:
+       @$(NORMAL_UNINSTALL)
+       @list='$(HTMLS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+         rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+       done
+
+uninstall-info-am:
+       @$(PRE_UNINSTALL)
+       @if test -d '$(DESTDIR)$(infodir)' && \
+           (install-info --version && \
+            install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+         list='$(INFO_DEPS)'; \
+         for file in $$list; do \
+           relfile=`echo "$$file" | sed 's|^.*/||'`; \
+           echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+           install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+         done; \
+       else :; fi
+       @$(NORMAL_UNINSTALL)
+       @list='$(INFO_DEPS)'; \
+       for file in $$list; do \
+         relfile=`echo "$$file" | sed 's|^.*/||'`; \
+         relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+         (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+            echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+            rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+          else :; fi); \
+       done
+
+uninstall-pdf-am:
+       @$(NORMAL_UNINSTALL)
+       @list='$(PDFS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+       done
+
+uninstall-ps-am:
+       @$(NORMAL_UNINSTALL)
+       @list='$(PSS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(psdir)/$$f"; \
+       done
+
+dist-info: $(INFO_DEPS)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       list='$(INFO_DEPS)'; \
+       for base in $$list; do \
+         case $$base in \
+           $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+         esac; \
+         if test -f $$base; then d=.; else d=$(srcdir); fi; \
+         base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+         for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+           if test -f $$file; then \
+             relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+             test -f $(distdir)/$$relfile || \
+               cp -p $$file $(distdir)/$$relfile; \
+           else :; fi; \
+         done; \
+       done
+
+mostlyclean-aminfo:
+       -rm -rf aspell.aux aspell.cp aspell.cps aspell.fn aspell.fns aspell.ky \
+         aspell.kys aspell.log aspell.pg aspell.tmp aspell.toc \
+         aspell.tp aspell.tps aspell.vr aspell.vrs aspell.dvi \
+         aspell.pdf aspell.ps aspell.html aspell-dev.aux \
+         aspell-dev.cp aspell-dev.cps aspell-dev.fn aspell-dev.fns \
+         aspell-dev.ky aspell-dev.kys aspell-dev.log aspell-dev.pg \
+         aspell-dev.tmp aspell-dev.toc aspell-dev.tp aspell-dev.tps \
+         aspell-dev.vr aspell-dev.vrs aspell-dev.dvi aspell-dev.pdf \
+         aspell-dev.ps aspell-dev.html
+
+maintainer-clean-aminfo:
+       @list='$(INFO_DEPS)'; for i in $$list; do \
+         i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+         echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+         rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+       done
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @list='$(MANS)'; if test -n "$$list"; then \
+         list=`for p in $$list; do \
+           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+         if test -n "$$list" && \
+           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+           echo "       typically \`make maintainer-clean' will remove them" >&2; \
+           exit 1; \
+         else :; fi; \
+       else :; fi
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+       @$(NORMAL_INSTALL)
+       test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+       @list='$(DVIS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
+         $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
+       done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+       @$(NORMAL_INSTALL)
+       test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+       @list='$(HTMLS)'; for p in $$list; do \
+         if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         if test -d "$$d$$p"; then \
+           echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+           echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
+         else \
+           echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+         fi; \
+       done
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+       @$(NORMAL_INSTALL)
+       test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       list='$(INFO_DEPS)'; \
+       for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+         esac; \
+         if test -f $$file; then d=.; else d=$(srcdir); fi; \
+         file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+         for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+                      $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+           if test -f $$ifile; then \
+             relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
+             echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
+             $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+           else : ; fi; \
+         done; \
+       done
+       @$(POST_INSTALL)
+       @if (install-info --version && \
+            install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+         list='$(INFO_DEPS)'; \
+         for file in $$list; do \
+           relfile=`echo "$$file" | sed 's|^.*/||'`; \
+           echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+           install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+         done; \
+       else : ; fi
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+       @list='$(PDFS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
+         $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
+       done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+       @$(NORMAL_INSTALL)
+       test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+       @list='$(PSS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \
+         $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \
+       done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+       maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+       uninstall-man uninstall-pdf-am uninstall-ps-am
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       dist-info distclean distclean-generic distclean-libtool \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-man1 install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-aminfo \
+       maintainer-clean-generic mostlyclean mostlyclean-aminfo \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
+       uninstall-info-am uninstall-man uninstall-man1 \
+       uninstall-pdf-am uninstall-ps-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/manual/aspell-dev.html/Build-Sources.html b/manual/aspell-dev.html/Build-Sources.html
new file mode 100644 (file)
index 0000000..57db338
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Build%20Sources">
diff --git a/manual/aspell-dev.html/C_002b_002b-Standard-Library.html b/manual/aspell-dev.html/C_002b_002b-Standard-Library.html
new file mode 100644 (file)
index 0000000..79f3d09
--- /dev/null
@@ -0,0 +1,60 @@
+<html lang="en">
+<head>
+<title>C++ Standard Library - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch" title="How to Submit a Patch">
+<link rel="next" href="Templates.html#Templates" title="Templates">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="C++-Standard-Library"></a>
+<a name="C_002b_002b-Standard-Library"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Templates.html#Templates">Templates</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch">How to Submit a Patch</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">3 C++ Standard Library</h2>
+
+<p>The C++ Standard library is not used directly except under very
+specific circumstances.  The string class and the STL are used
+indirectly through wrapper classes and all I/O is done using the
+standard C library with light right helper classes to make using C I/O
+a bit more C++ like.
+
+   <p>However the <code>new</code>, <code>new[]</code>, <code>delete</code> and
+<code>delete[]</code> operators are used to allocate memory when
+appropriate.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Config-Class.html b/manual/aspell-dev.html/Config-Class.html
new file mode 100644 (file)
index 0000000..6401bad
--- /dev/null
@@ -0,0 +1,54 @@
+<html lang="en">
+<head>
+<title>Config Class - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="I_002fO.html#I_002fO" title="I/O">
+<link rel="next" href="Filter-Interface.html#Filter-Interface" title="Filter Interface">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Config-Class"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Filter-Interface.html#Filter-Interface">Filter Interface</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="I_002fO.html#I_002fO">I/O</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">10 Config Class</h2>
+
+<p>The <code>Config</code> class is used to hold configuration information.  It
+has a set of keys which it will accept.  Inserting or even trying to
+look at a key that it does not know will produce an error.  It is
+defined in <samp><span class="file">common/config.hpp</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Constructor-Function.html b/manual/aspell-dev.html/Constructor-Function.html
new file mode 100644 (file)
index 0000000..756f43c
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Constructor%20Function">
diff --git a/manual/aspell-dev.html/Copying.html b/manual/aspell-dev.html/Copying.html
new file mode 100644 (file)
index 0000000..df4505d
--- /dev/null
@@ -0,0 +1,60 @@
+<html lang="en">
+<head>
+<title>Copying - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Part-3.html#Part-3" title="Part 3">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Copying"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Part-3.html#Part-3">Part 3</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix A Copying</h2>
+
+<p>Copyright &copy; 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+   <p>Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+<ul class="menu">
+<li><a accesskey="1" href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Data-Structures.html b/manual/aspell-dev.html/Data-Structures.html
new file mode 100644 (file)
index 0000000..efef006
--- /dev/null
@@ -0,0 +1,85 @@
+<html lang="en">
+<head>
+<title>Data Structures - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Filter-Modes.html#Filter-Modes" title="Filter Modes">
+<link rel="next" href="Mk_002dSrc-Script.html#Mk_002dSrc-Script" title="Mk-Src Script">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Data-Structures"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">Mk-Src Script</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Filter-Modes.html#Filter-Modes">Filter Modes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">13 Data Structures</h2>
+
+<p>Whenever possible you should try to use one of the data structures
+available.  If the data structures do not provide enough functionality
+for your needs you should consider enhancing them rather than writing
+something from scratch.
+
+<h3 class="section">13.1 Vector</h3>
+
+<p>The <code>vector</code> class is defined in <samp><span class="file">vector.hpp</span></samp> and works the
+same way as the standard STL <code>vector</code> does except that it doesn't
+have as many constructors.
+
+<h3 class="section">13.2 BasicList</h3>
+
+<p><code>BasicList</code> is a simple list structure which can either be
+implemented as a singly or doubly linked list.  It is defined in
+<samp><span class="file">basic_list.hpp</span></samp>.
+
+<h3 class="section">13.3 StringMap</h3>
+
+<p><code>StringMap</code> is a associative array for strings.  You should try
+to use this when ever possible to avoid code bloat.  It is defined in
+<samp><span class="file">string_map.hpp</span></samp>.
+
+<h3 class="section">13.4 Hash Tables</h3>
+
+<p>Several hash tables are provided when <code>StringMap</code> is not
+appropriate.  These hash tables provide a <code>hash_set</code>,
+<code>hash_multiset</code>, <code>hash_map</code> and <code>hash_multimap</code> which
+are very similar to SGI's STL implementation with a few exceptions. 
+It is defined in <samp><span class="file">hash.hpp</span></samp>.
+
+<h3 class="section">13.5 BlockSList</h3>
+
+<p><code>BlockSList</code> provided a pool of nodes which can be used for
+singly linked lists.  It is defined in <samp><span class="file">block_slist.hpp</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Error-Handling.html b/manual/aspell-dev.html/Error-Handling.html
new file mode 100644 (file)
index 0000000..4d46c8a
--- /dev/null
@@ -0,0 +1,67 @@
+<html lang="en">
+<head>
+<title>Error Handling - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Templates.html#Templates" title="Templates">
+<link rel="next" href="Source-Code-Layout.html#Source-Code-Layout" title="Source Code Layout">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Error-Handling"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Source-Code-Layout.html#Source-Code-Layout">Source Code Layout</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Templates.html#Templates">Templates</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">5 Error Handling</h2>
+
+<p>Exceptions are not used in Aspell as I find them more trouble than
+they are worth.  Instead an alternate method of error handling is used
+which is based around the PosibErr class.  PosibErr is a special Error
+handling device that will make sure that an error is properly handled. 
+It is defined in <code>posib_err.hpp</code>.  PosibErr is expected to be
+used as the return type of the function. It will automatically be
+converted to the "normal" return type however if the normal returned
+type is accessed and there is an "unhandled" error condition it will
+abort. It will also abort if the object is destroyed with an
+"unhandled" error condition.  This includes ignoring the return type
+of a function returning an error condition.  An error condition is
+handled by simply checking for the presence of an error, calling
+ignore, or taking ownership of the error.
+
+   <p>The PosibErr class is used extensively throughout Aspell.  Please
+refer to the Aspell source for examples of using PosibErr until better
+documentation is written.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Filter-Default-Values.html b/manual/aspell-dev.html/Filter-Default-Values.html
new file mode 100644 (file)
index 0000000..7c7ce13
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Filter%20Default%20Values">
diff --git a/manual/aspell-dev.html/Filter-Description-File.html b/manual/aspell-dev.html/Filter-Description-File.html
new file mode 100644 (file)
index 0000000..d6045bb
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Filter%20Description%20File">
diff --git a/manual/aspell-dev.html/Filter-Interface.html b/manual/aspell-dev.html/Filter-Interface.html
new file mode 100644 (file)
index 0000000..ecbd03e
--- /dev/null
@@ -0,0 +1,371 @@
+<html lang="en">
+<head>
+<title>Filter Interface - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Config-Class.html#Config-Class" title="Config Class">
+<link rel="next" href="Filter-Modes.html#Filter-Modes" title="Filter Modes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Filter-Interface"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Filter-Modes.html#Filter-Modes">Filter Modes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Config-Class.html#Config-Class">Config Class</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">11 Filter Interface</h2>
+
+<h3 class="section">11.1 Overview</h3>
+
+<p><a name="Filter-Overview"></a>
+
+   <p>In Aspell there are 5 types of filters:
+     <ol type=1 start=1>
+<li><em>Decoders</em> which take input in some standard format such as
+iso8859-1 or UTF-8 and convert it into a string of <code>FilterChars</code>. 
+<li><em>Decoding filters</em> which manipulate a string of
+<code>FilterChars</code> by decoding the text is some way such as converting
+an SGML character into its Unicode value. 
+<li><em>True filters</em> which manipulate a string of <code>FilterChars</code> to
+make it more suitable for spell checking.  These filters generally
+blank out text which should not be spell checked
+<li><em>Encoding filters</em> which manipulate a string of
+<code>FilterChars</code> by encoding the text in some way such as converting
+certain Unicode characters to SGML characters. 
+<li><em>Encoders</em> which take a string of <code>FilterChars</code> and convert
+into a standard format such as iso8859-1 or UTF-8
+        </ol>
+
+   <p>Which types of filters are used depends on the situation
+     <ol type=1 start=1>
+<li>When <em>decoding words</em> for spell checking:
+          <ul>
+<li>The <em>decoder</em> to convert from a standard format
+<li>The <em>decoding filter</em> to perform high level decoding if necessary
+<li>The <em>encoder</em> to convert into an internal format used by the
+speller module
+</ul>
+
+     <li>When <em>checking a document</em>
+          <ul>
+<li>The <em>decoder</em> to convert from a standard format
+<li>The <em>decoding filter</em> to perform high level decoding if necessary
+<li>A <em>true filter</em> to filter out parts of the document which should
+not be spell checked
+<li>The <em>encoder</em> to convert into an internal format used by the
+speller module
+</ul>
+
+     <li>When <em>encoding words</em> such as those returned for suggestions:
+          <ul>
+<li>The <em>decoder</em> to convert from the internal format used by the
+speller module
+<li>The <em>encoding filter</em> to perform high level encodings if
+necessary
+<li>The <em>encoder</em> to convert into a standard format
+</ul>
+     </ol>
+
+   <p>A <code>FilterChar</code> is a struct defined in
+<samp><span class="file">common/filter_char.hpp</span></samp> which contains two members, a character,
+and a width.  Its purpose is to keep track of the width of the
+character in the original format.  This is important because when a
+misspelled word is found the exact location of the word needs to be
+returned to the application so that it can highlight it for the user. 
+For example if the filters translated this:
+<pre class="verbatim">
+Mr. foo said &amp;quot;I hate my namme&amp;quot;.
+</pre>
+
+   <p>to this
+<pre class="verbatim">
+Mr. foo said "I hate my namme".
+</pre>
+
+   <p>without keeping track of the original width of the characters the application
+ will likely highlight
+<code>e my </code>
+ as the misspelling because the spell checker will return 25 as the offset
+ instead of 30. 
+ However with keeping track of the width using <code>FilterChar</code> the
+ spell checker
+ will know that the real position is 30 since the quote is really 6 characters
+ wide. 
+ In particular the text will be annotated something like the following:
+<pre class="verbatim">
+1111111111111611111111111111161
+Mr. foo said "I hate my namme".
+</pre>
+
+   <p>The standard <em>encoder</em> and <em>decoder</em> filters are defined in
+<samp><span class="file">common/convert.cpp</span></samp>.  There should generally not be any need to
+deal with them so they will not be discussed here.  The other three
+filters, the <em>encoding filter</em>, the <em>true filter</em>, and the
+<em>decoding filter</em>, are all defined the exact same way; they are
+inherited from the <code>IndividualFilter</code> class.
+
+<h3 class="section">11.2 Adding a New Filter</h3>
+
+<p>A new filter basically is added by placing the corresponding loadable
+object inside a directory reachable by Aspell via <samp><span class="option">filter-path</span></samp>
+list.  Further it is necessary that the corresponding filter
+description file is located in one of the directories listed by the
+<samp><span class="option">option-path</span></samp> list.
+
+   <p>The name of the loadable object has to conform to the following
+convention <samp><span class="file">lib</span><i>filtername</i><span class="file">-filter.so</span></samp> where
+<i>filtername</i> stands for the name of the filter which is
+passed to Aspell by the <samp><span class="option">add-filter</span></samp> option.  The same applies
+to the filter description file which has to conform to the following
+naming scheme: <samp><i>filtername</i><span class="file">-filter.opt</span></samp>.
+
+   <p>To add a new loadable filter object create a new file.
+
+   <p>Basically the file should be a C++ file and end in <samp><span class="file">.cpp</span></samp>.  The
+file should contain a new filter class inherited from
+<code>IndividualFilter</code> and a constructor function called
+<samp><span class="file">new_</span><i>filtertype</i></samp> (see <a href="Constructor-Function.html#Constructor-Function">Constructor Function</a>) returning a
+new filter object.  Further it is necessary to manually generate the
+filter description file.  Finally the resulting object has to be
+turned into a loadable filter object using libtool.
+
+   <p>Alternatively a new filter may extend the functionality of an existing
+filter. In this case the new filter has to be derived form the
+corresponding valid filter class instead of the <code>IndividualFilter</code>
+class.
+
+<h3 class="section">11.3 IndividualFilter class</h3>
+
+<p>All filters are required to inherit from the <code>IndividualFilter</code>
+class found in <samp><span class="file">indiv_filter.hpp</span></samp>.  See that file for more
+details and the other filter modules for examples of how it is used.
+
+<h3 class="section">11.4 Constructor Function</h3>
+
+<p><a name="Constructor-Function"></a>
+
+   <p>After the class is created a function must be created which will
+return a new filter allocated with <code>new</code>.  The function must have
+the following prototype:
+<pre class="example">     C_EXPORT IndividualFilter * new_aspell_<var>filtername</var>_<var>filtertype</var>
+</pre>
+   <p>Filters are defined in groups where each group contains an
+<em>encoding filter</em>, a <em>true filter</em>, and a <em>decoding
+filter</em> (see <a href="Filter-Overview.html#Filter-Overview">Filter Overview</a>).  Only one of them is required to
+be defined, however they all need a separate constructor function.
+
+<h3 class="section">11.5 Filter Description File</h3>
+
+<p><a name="Filter-Description-File"></a>
+
+   <p>This file contains the description of a filter which is loaded by
+Aspell immediately when the <samp><span class="option">add-filter</span></samp> option is invoked.  If
+this file is missing Aspell will complain about it.  It consists of
+lines containing comments which must be started by a <kbd>#</kbd>
+character and lines containing key value pairs describing the filter. 
+Each file at least has to contain the following two lines in the given
+order.
+
+<pre class="example">     ASPELL &gt;=0.60
+     DESCRIPTION this is short filter description
+</pre>
+   <p>The first non blank, non comment line has to contain the keyword
+<code>ASPELL</code> followed by the version of Aspell which the filter is
+usable with.  To denote multiple Aspell versions the version number may
+be prefixed by `<kbd>&lt;</kbd>', `<kbd>&lt;=</kbd>', `<kbd>=</kbd>', `<kbd>&gt;=</kbd>' or `<kbd>&gt;</kbd>. 
+If the range prefix is omitted `<kbd>=</kbd>' is assumed.  The
+<code>DESCRIPTION</code> of the filter should be under 50, begin in lower
+case, and note include any trailing punctuation characters. 
+The keyword <code>DESCRIPTION</code> may be abbreviated by <code>DESC</code>.
+
+   <p>For each filter feature (see <a href="Filter-Overview.html#Filter-Overview">Filter Overview</a>) provided by the
+corresponding loadable object, the option file has to contain the
+following line:
+<pre class="example">     STATIC <i>filtertype</i>
+</pre>
+   <p><i>filtertype</i> stands for one of <code>decoder</code>, <code>filter</code>
+or <code>encoder</code> denoting the entire filter type.  This line allows
+to statically (see <a href="Link-Filters-Static.html#Link-Filters-Static">Link Filters Static</a>) link the filter into
+Aspell if requested by the user or by the system Aspell is built for.
+
+<pre class="example">     OPTION newoption
+     DESCRIPTION this is a short description of newoption
+     TYPE bool
+     DEFAULT false
+     ENDOPTION
+</pre>
+   <p>An option is added by a line containing the keyword <code>OPTION</code>
+followed by the name of the option.  If this name is not prefixed by
+the name of the filter Aspell will implicitly do that.  For the
+<code>DESCRIPTION</code> of a filter option the same holds as for the filter
+description.  The <code>TYPE</code> of the option may be one of <code>bool</code>,
+<code>int</code>, <code>string</code> or <code>list</code>.  If the <code>TYPE</code> is
+omitted <code>bool</code> is assumed.  The default value(s) for an option is
+specified via <code>DEFAULT</code> (short <code>DEF</code>) followed by the
+desired <code>TYPE</code> dependent default value.  The table <a href="Filter-Default-Values.html#Filter-Default-Values">Filter Default Values</a> shows the possible values for each <code>TYPE</code>.
+
+   <p><a name="Filter-Default-Values"></a>
+   <p><table summary=""><tr align="left"><td valign="top"><b>Type</b> </td><td valign="top"><b>Default</b> </td><td valign="top"><b>Available</b>
+<br></td></tr><tr align="left"><td valign="top">bool </td><td valign="top">true    </td><td valign="top">true false
+<br></td></tr><tr align="left"><td valign="top">int  </td><td valign="top">0       </td><td valign="top">any number value
+<br></td></tr><tr align="left"><td valign="top">string </td><td valign="top"></td><td valign="top">any printable string
+<br></td></tr><tr align="left"><td valign="top">list   </td><td valign="top"></td><td valign="top">any comma separated list of strings
+   <br></td></tr></table>
+
+   <p>Table 1. Shows the default values Aspell assumes if option
+<samp><span class="option">description</span></samp> lacks a <code>DEFAULT</code> or <code>DEF</code> line.
+
+   <p>The <code>ENDOPTION</code> line may be omitted as it is assumed implicitly
+if a line containing <code>OPTION</code>, <code>STATIC</code>.
+
+   <blockquote>
+<strong>Note</strong> The keywords in a filter description file are case
+insensitive.  The above examples use the all uppercase for better
+distinguishing them from values and comments.  Further a filter
+description may contain blank lines to enhance their readability. 
+</blockquote>
+
+   <blockquote>
+<strong>Note</strong> An option of <code>list</code> type may contain multiple
+consecutive lines for default values starting with <code>DEFAULT</code> or
+<code>DEF</code>, to specify numerous default values. 
+</blockquote>
+
+<h3 class="section">11.6 Retrieve Options by a Filter</h3>
+
+<p>An option always has to be retrieved by a filter using its full
+qualified name as the following example shows.
+
+<pre class="example">     config-&gt;retrieve_bool("filter-<i>filtername</i>-newoption");
+</pre>
+   <p>The prefix <code>filter-</code> allows user to relate option uniquely to the
+specific filter when <i>filtername</i><code>-newoption</code> ambiguous an
+existing option of Aspell.  The <i>filtername</i> stands for the
+name of the filter the option belongs to and <code>-</code><i>newoption</i> is
+the name of the option as specified in the corresponding <samp><span class="file">.opt</span></samp>
+file (see <a href="Filter-Description-File.html#Filter-Description-File">Filter Description File</a>
+
+<h3 class="section">11.7 Compiling and Linking</h3>
+
+<p>See a good book on Unix programming on how to turn the filter source
+into a loadable object.
+
+<h3 class="section">11.8 Programmer's Interface</h3>
+
+<p><a name="Programmer_0027s-Interface"></a>
+
+   <p><a name="Recommended-Standard-Aspell"></a> A more convenient way
+recommended, if filter is added to Aspell standard distribution to
+build a new filter is provided by Aspell's programmers interface for
+filter.  It is provided by the <samp><span class="file">loadable-filter-API.hpp</span></samp> file. 
+Including this file gives access to a collection of macros hiding
+nasty details about runtime construction of a filter and about filter
+debugging.  Table <a href="Interface-Macros.html#Interface-Macros">Interface Macros</a> shows the macros provided by
+the interface.  For details upon the entire macros see
+<samp><span class="file">loadable-filter-API.hpp</span></samp>.  An example on how to use these macros
+can be found at <samp><span class="file">examples/loadable/ccpp-context.hpp</span></samp> and
+<samp><span class="file">examples/loadable/ccpp-context.cpp</span></samp>.
+
+   <p><table summary=""><tr align="left"><td valign="top" width="25%"><b>Macro</b> </td><td valign="top" width="6%"><b>Type</b> </td><td valign="top" width="34%"><b>Description</b> </td><td valign="top" width="34%"><b>Notes</b>
+<br></td></tr><tr align="left"><td valign="top" width="25%">ACTIVATE_ENCODER </td><td valign="top" width="6%">M </td><td valign="top" width="34%">makes the entire encoding
+filter callable by Aspell </td><td valign="top" width="34%">do not call inside class declaration;
+these macros define new_&lt;filtertype&gt; function;
+<br></td></tr><tr align="left"><td valign="top" width="25%">ACTIVATE_DECODER </td><td valign="top" width="6%">M </td><td valign="top" width="34%">makes the entire decoding
+filter callable by Aspell </td><td valign="top" width="34%"><em>as above</em>
+<br></td></tr><tr align="left"><td valign="top" width="25%">ACTIVATE_FILTER </td><td valign="top" width="6%">M </td><td valign="top" width="34%">makes the entire filter
+callable by Aspell </td><td valign="top" width="34%"><em>as above</em>
+<br></td></tr><tr align="left"><td valign="top" width="25%">FDEBUGOPEN </td><td valign="top" width="6%">D </td><td valign="top" width="34%">Initialises the macros for debugging a
+filter and opens the debug file stream </td><td valign="top" width="34%">These macros are only
+active if the <code>FILTER_PROGRESS_CONTROL</code> macro is defined and
+denotes the name of the file debug messages should be sent to.
+
+<p>If debugging should go to Aspell standard debugging output (right now
+stderr) use empty string constant as filename
+<br></td></tr><tr align="left"><td valign="top" width="25%">FDEBUGNOTOPEN </td><td valign="top" width="6%">D </td><td valign="top" width="34%">Same as &ldquo;FDEBUGOPEN&rdquo; but
+only if debug file stream was not opened yet </td><td valign="top" width="34%"><em>as above</em>
+<br></td></tr><tr align="left"><td valign="top" width="25%">FDEBUGCLOSE </td><td valign="top" width="6%">D </td><td valign="top" width="34%">closes the debugging device opened by &ldquo;FDEBUGOPEN&rdquo; and reverts it to &ldquo;stderr&rdquo;; </td><td valign="top" width="34%"><em>as above</em>
+<br></td></tr><tr align="left"><td valign="top" width="25%">FDEBUG </td><td valign="top" width="6%">D </td><td valign="top" width="34%">prints the filename and the line
+number it occurs </td><td valign="top" width="34%"><em>as above</em>
+<br></td></tr><tr align="left"><td valign="top" width="25%">FDEBUGPRINTF </td><td valign="top" width="6%">D </td><td valign="top" width="34%">special printf for debugging
+</td><td valign="top" width="34%"><em>as above</em>
+   <br></td></tr></table>
+
+   <p>Table 2. Shows the macros provided by <samp><span class="file">loadable-filter-API.hpp</span></samp>
+(<strong>M</strong> mandatory, <strong>D</strong> debugging) <a name="Interface-Macros"></a>
+
+<h3 class="section">11.9 Adding a filter to Aspell standard distribution</h3>
+
+<p><a name="Link-Filters-Static"></a>
+
+   <p>Any filter which one day should be added to Aspell has to be built
+using the developer interface, described in <a href="Programmer_0027s-Interface.html#Programmer_0027s-Interface">Programmer's Interface</a>.  To add the filter the following steps have to be
+performed:
+
+     <ol type=1 start=1>
+<li>Decide whether the filter should be kept loadable if possible, or
+always be statically linked to Aspell.
+
+     <li><a name="Place-Sources"></a> Place the filter sources inside the entire
+directory of Aspell source tree.  Right now use
+<i>$top_srcdir</i><code>/modules/filter</code>.
+
+     <li>Modify the <samp><span class="file">Makefile.am</span></samp> file on the topmost directory of the
+Aspell distribution.  Follow the instructions given by the
+<code>#Filter Modules</code> section.
+
+     <li>Run <samp><span class="file">autoconf</span></samp>, <samp><span class="file">automake</span></samp>, <small class="dots">...</small>
+
+     <li>Reconfigure sources.
+
+     <li><a name="Build-Sources"></a> Clear away any remains of a previous build and
+rebuild sources.
+
+     <li><a name="Reinstall-Aspell"></a> Reinstall Aspell.
+
+     <li><a name="Test-Filter-Installed"></a> Test if filter has been added properly
+otherwise return to steps 2&ndash;7
+<!-- Doesn't work@ref{Place Sources}-@ref{Reinstall Aspell}. -->
+
+     <li>Reconfigure sources with <samp><span class="option">enable-static</span></samp> flag and repeat steps
+2&ndash;7
+<!-- Doesn't work @ref{Build Sources}-@ref{Test Filter Installed} -->
+until your filter builds and runs properly in case of static linkage.
+
+     <li>Add your source files to cvs, and commit all your changes.  Or in case
+you are not allowed to commit to cvs submit a patch (see <a href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch">How to Submit a Patch</a>) containing your changes.
+
+        </ol>
+<!-- Following this comes the section ``Filter Modes'' -->
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Filter-Modes.html b/manual/aspell-dev.html/Filter-Modes.html
new file mode 100644 (file)
index 0000000..d8163d6
--- /dev/null
@@ -0,0 +1,139 @@
+<html lang="en">
+<head>
+<title>Filter Modes - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Filter-Interface.html#Filter-Interface" title="Filter Interface">
+<link rel="next" href="Data-Structures.html#Data-Structures" title="Data Structures">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Filter-Modes"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Data-Structures.html#Data-Structures">Data Structures</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Filter-Interface.html#Filter-Interface">Filter Interface</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">12 Filter Modes</h2>
+
+<p>Filter modes are the preferred way to specify combinations of
+filters which are used regularly and thus abbreviate Aspell's
+command line arguments.
+
+   <p>A new filter mode is specified by a file named like the filter
+new mode and prefixed by <samp><span class="file">.amf</span></samp> (Aspell Mode File). If such a file
+is accessible by the path set via filter-path option Aspell
+will try to load the contained mode specification.
+
+<h3 class="section">12.1 Aspell Mode File</h3>
+
+<p>The first key in the made file has be the <code>mode</code> key. 
+It is checked against the mode name part of the .amf file. 
+If the <code>mode</code> key is missing mode file will be rejected.
+
+   <p>The same holds for the <code>aspell</code> key which specifies the
+version(s) of Aspell which is(are) required by the filter.
+
+   <p>If these two keys are followed by at least one <code>magic</code> key
+Aspell will be able to select the entire mode from extension and
+if required from contents of the file to spell implicitly.
+
+   <p>The last key of the required keys is the <code>des[c[ription]]</code>
+key. It gives a short description of the filter mode which will
+displayed when type <samp><span class="command">aspell help</span></samp>.
+
+   <p>The rest of the file consists of the keys <code>filter</code> and
+<code>option</code> to load filters are set various options.
+
+<h4 class="subsection">12.1.1 Version Line</h4>
+
+<p>Each version line must start with <code>aspell</code> and be followed by a
+version, optionally prefixed by a relational operator. The relation
+operator can be one of `&lt;', `&lt;=', `=', `&gt;=' or '&gt;' for allowing Aspell
+version with version number being lower, lower or equal, equal to,
+greater or equal or greater than required version number,
+respectfully. If the relation operator is omitted `=' is assumed.
+
+<h4 class="subsection">12.1.2 Magic Line</h4>
+
+<p>The magic line contains a description which requirements files
+have to fulfill in order to implicitly activate the entire mode
+at least one such line is required.  Each magic line has the following
+format:
+<pre class="example">     MAGIC /&lt;magic key&gt;/&lt;fileextention&gt;[/&lt;fileextention&gt;]
+</pre>
+   <p>The magic key consist of three `:' separated fields. 
+The first two are byte counts the last is a regular expression. 
+The first byte count indicates the first byte the regular expression
+will be applied to the second byte count indicates the number of
+bytes to test against the regular expression.
+
+   <p>If mode selection should only occurred on basis of the listed file
+extensions the magic key should consist of the &ldquo;&lt;noregex&gt;&rdquo; special
+string.
+
+   <p>At least one &lt;fileextention&gt; is required per MAGIC line. 
+&lt;fileextention&gt; may not be empty and should not contain a leading `.' 
+as this is assumed implicitly.
+
+   <p>Multiple MAGIC lines are allowed. Modes may be extended limited by additional
+&lt;label&gt;.amf files located in &ndash;filter-path
+Thus file extensions may be prefixed by `+' or `-' to indicate that
+the entire extension has to be added ore removed from this &lt;magic key&gt;
+if neither is specified than a `+' is assumed implicitly.
+
+<h4 class="subsection">12.1.3 Description Line</h4>
+
+<p>The required description line will be printed when typing
+<samp><span class="command">aspell help</span></samp>.  Keep it as short as possible.  Possible
+abbreviations are <code>des</code> and <code>desc</code>.
+
+<h4 class="subsection">12.1.4 Filter and Option Lines</h4>
+
+<p>The <code>filter</code> and <code>option</code> keys load filters and set filter
+options.
+
+   <p>The value of the <code>filter</code> key is equal to the value of Aspell's
+<code>[add|rem]-filter</code> option.
+
+   <p>Each <code>option</code> line has the following format:
+
+<pre class="example">       OPTION &lt;option&gt; [&lt;value&gt;]
+</pre>
+   <p>The format of the &lt;option&gt; and &lt;value&gt; is the same format as
+found in the Aspell configuration file.
+
+<!-- Following this comes the section ``Data Structures'' -->
+<!-- *- end of new text -*- -->
+<!-- The section ``Config Options'' was here -->
+</body></html>
+
diff --git a/manual/aspell-dev.html/Filter-Overview.html b/manual/aspell-dev.html/Filter-Overview.html
new file mode 100644 (file)
index 0000000..4d7ffa4
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Filter%20Overview">
diff --git a/manual/aspell-dev.html/GNU-Free-Documentation-License.html b/manual/aspell-dev.html/GNU-Free-Documentation-License.html
new file mode 100644 (file)
index 0000000..a4d67a9
--- /dev/null
@@ -0,0 +1,462 @@
+<html lang="en">
+<head>
+<title>GNU Free Documentation License - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Copying.html#Copying" title="Copying">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="GNU-Free-Documentation-License"></a>
+Up:&nbsp;<a rel="up" accesskey="u" href="Copying.html#Copying">Copying</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">A.1 GNU Free Documentation License</h3>
+
+<p><a name="index-FDL_002c-GNU-Free-Documentation-License-1"></a><div align="center">Version 1.2, November 2002</div>
+
+<pre class="display">     Copyright &copy; 2000,2001,2002 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+     
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+</pre>
+     <ol type=1 start=0>
+<li>PREAMBLE
+
+     <p>The purpose of this License is to make a manual, textbook, or other
+functional and useful document <dfn>free</dfn> in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially. 
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+     <p>This License is a kind of &ldquo;copyleft&rdquo;, which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+     <p>We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+     <li>APPLICABILITY AND DEFINITIONS
+
+     <p>This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The &ldquo;Document&rdquo;, below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as &ldquo;you&rdquo;.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+     <p>A &ldquo;Modified Version&rdquo; of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+     <p>A &ldquo;Secondary Section&rdquo; is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+     <p>The &ldquo;Invariant Sections&rdquo; are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+     <p>The &ldquo;Cover Texts&rdquo; are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+     <p>A &ldquo;Transparent&rdquo; copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent. 
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
+
+     <p>Examples of suitable formats for Transparent copies include plain
+<span class="sc">ascii</span> without markup, Texinfo input format, LaTeX input
+format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
+<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> designed for human modification.  Examples
+of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
+<acronym>JPG</acronym>.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, <acronym>SGML</acronym> or
+<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
+not generally available, and the machine-generated <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> produced by some word processors for
+output purposes only.
+
+     <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, &ldquo;Title Page&rdquo; means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+     <p>A section &ldquo;Entitled XYZ&rdquo; means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.)  To &ldquo;Preserve the Title&rdquo;
+of such a section when you modify the Document means that it remains a
+section &ldquo;Entitled XYZ&rdquo; according to this definition.
+
+     <p>The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+     <li>VERBATIM COPYING
+
+     <p>You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+     <p>You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+     <li>COPYING IN QUANTITY
+
+     <p>If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition. 
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+     <p>If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+     <p>If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material. 
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+     <p>It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+     <li>MODIFICATIONS
+
+     <p>You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+          <ol type=A start=1>
+<li>Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+          <li>List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+          <li>State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+          <li>Preserve all the copyright notices of the Document.
+
+          <li>Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+          <li>Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+          <li>Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+          <li>Include an unaltered copy of this License.
+
+          <li>Preserve the section Entitled &ldquo;History&rdquo;, Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled &ldquo;History&rdquo; in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+          <li>Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the &ldquo;History&rdquo; section. 
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+          <li>For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+          <li>Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+          <li>Delete any section Entitled &ldquo;Endorsements&rdquo;.  Such a section
+may not be included in the Modified Version.
+
+          <li>Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
+to conflict in title with any Invariant Section.
+
+          <li>Preserve any Warranty Disclaimers.
+          </ol>
+
+     <p>If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice. 
+These titles must be distinct from any other section titles.
+
+     <p>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
+nothing but endorsements of your Modified Version by various
+parties&mdash;for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+     <p>You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+     <p>The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+     <li>COMBINING DOCUMENTS
+
+     <p>You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+     <p>The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number. 
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+     <p>In the combination, you must combine any sections Entitled &ldquo;History&rdquo;
+in the various original documents, forming one section Entitled
+&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
+and any sections Entitled &ldquo;Dedications&rdquo;.  You must delete all
+sections Entitled &ldquo;Endorsements.&rdquo;
+
+     <li>COLLECTIONS OF DOCUMENTS
+
+     <p>You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+     <p>You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+     <li>AGGREGATION WITH INDEPENDENT WORKS
+
+     <p>A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an &ldquo;aggregate&rdquo; if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit. 
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+     <p>If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form. 
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+     <li>TRANSLATION
+
+     <p>Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4. 
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+     <p>If a section in the Document is Entitled &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+     <li>TERMINATION
+
+     <p>You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+     <li>FUTURE REVISIONS OF THIS LICENSE
+
+     <p>The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
+
+     <p>Each version of the License is given a distinguishing version number. 
+If the Document specifies that a particular numbered version of this
+License &ldquo;or any later version&rdquo; applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+        </ol>
+
+<h4 class="appendixsubsec">A.1.1 ADDENDUM: How to use this License for your documents</h4>
+
+<p>To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+<pre class="smallexample">       Copyright (C)  <var>year</var>  <var>your name</var>.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.2
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+</pre>
+   <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the &ldquo;with...Texts.&rdquo; line with this:
+
+<pre class="smallexample">         with the Invariant Sections being <var>list their titles</var>, with
+         the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
+         being <var>list</var>.
+</pre>
+   <p>If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   <p>If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+<!-- @node Index,  , Copying, Top -->
+<!-- @unnumbered Index -->
+<!-- @printindex cp -->
+</body></html>
+
+<!--
+\1f
+Local Variables:
+coding: iso-8859-1
+End:
+
+-->
diff --git a/manual/aspell-dev.html/How-It-All-Works.html b/manual/aspell-dev.html/How-It-All-Works.html
new file mode 100644 (file)
index 0000000..43da5f1
--- /dev/null
@@ -0,0 +1,66 @@
+<html lang="en">
+<head>
+<title>How It All Works - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Mk_002dSrc-Script.html#Mk_002dSrc-Script" title="Mk-Src Script">
+<link rel="next" href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format" title="Part 1 - Compiled Dictionary Format">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="How-It-All-Works"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format">Part 1 - Compiled Dictionary Format</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">Mk-Src Script</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">15 How It All Works</h2>
+
+<p>The details of how Aspell really works is a mystery to most users who
+want to participate in developing and improving Aspell, so it is best
+to fully explain Aspell's core algorithms and data structures to you.
+
+   <p>In explaining these, it is hoped to bring prospective developers up to
+speed more quickly and also help you understand the amount of thought
+put into this.  In time, you may be able to improve Aspell even more.
+
+   <p>There are many details to explain here, so these will need explaining
+in small segments.
+
+<ul class="menu">
+<li><a accesskey="1" href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format">Part 1 - Compiled Dictionary Format</a>
+<li><a accesskey="2" href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike">Part 2 - Quickly Finding Similar Soundslike</a>
+<li><a accesskey="3" href="Part-3.html#Part-3">Part 3</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/How-to-Submit-a-Patch.html b/manual/aspell-dev.html/How-to-Submit-a-Patch.html
new file mode 100644 (file)
index 0000000..99ffe76
--- /dev/null
@@ -0,0 +1,60 @@
+<html lang="en">
+<head>
+<title>How to Submit a Patch - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Style-Guidelines.html#Style-Guidelines" title="Style Guidelines">
+<link rel="next" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library" title="C++ Standard Library">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="How-to-Submit-a-Patch"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library">C++ Standard Library</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Style-Guidelines.html#Style-Guidelines">Style Guidelines</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">2 How to Submit a Patch</h2>
+
+<p>Bug reports and patches should be submitted via the Sourceforge Tracker
+at <a href="http://sourceforge.net/tracker/?group_id=245">http://sourceforge.net/tracker/?group_id=245</a> rather than
+being posted to any of the mailing lists.
+
+   <p>The mailing lists are good if you need to check something out or need
+help or feedback from other readers, but they are not the best place to
+submit bugs or patches because they will likely get forgotten or lost
+within the mailing list traffic if not acted upon immediately.
+
+   <p>Please make the effort to use the tracker.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/I_002fO.html b/manual/aspell-dev.html/I_002fO.html
new file mode 100644 (file)
index 0000000..26fa7c7
--- /dev/null
@@ -0,0 +1,71 @@
+<html lang="en">
+<head>
+<title>I/O - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Smart-Pointers.html#Smart-Pointers" title="Smart Pointers">
+<link rel="next" href="Config-Class.html#Config-Class" title="Config Class">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="I%2fO"></a>
+<a name="I_002fO"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Config-Class.html#Config-Class">Config Class</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Smart-Pointers.html#Smart-Pointers">Smart Pointers</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">9 I/O</h2>
+
+<p>Aspell does not use C++ I/O classes and functions in any way since
+they do not provide a way to get at the underlying file number and can
+often be slower than the highly tuned C I/O functions found in the
+standard C library.  However, some lightweight wrapper classes are
+provided so that standard C I/O can be used in a more C++ like way.
+
+<h3 class="section">9.1 IStream/OStream</h3>
+
+<p>These two base classes mimic some of the functionally of the C++
+functionally of the corresponding classes.  They are defined in
+<samp><span class="file">istream.hpp</span></samp> and <samp><span class="file">ostream.hpp</span></samp> respectively.  They are
+however based on standard C I/O and are not proper C++ streams.
+
+<h3 class="section">9.2 FStream</h3>
+
+<p>Defined in <samp><span class="file">fstream.hpp</span></samp>.
+
+<h3 class="section">9.3 Standard Streams</h3>
+
+<p><code>CIN</code>/<code>COUT</code>/<code>CERR</code>.  Defined in <samp><span class="file">iostream.hpp</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Interface-Macros.html b/manual/aspell-dev.html/Interface-Macros.html
new file mode 100644 (file)
index 0000000..944f388
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Interface%20Macros">
diff --git a/manual/aspell-dev.html/Link-Filters-Static.html b/manual/aspell-dev.html/Link-Filters-Static.html
new file mode 100644 (file)
index 0000000..411bad2
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Link%20Filters%20Static">
diff --git a/manual/aspell-dev.html/Mk_002dSrc-Script.html b/manual/aspell-dev.html/Mk_002dSrc-Script.html
new file mode 100644 (file)
index 0000000..8cbf158
--- /dev/null
@@ -0,0 +1,318 @@
+<html lang="en">
+<head>
+<title>Mk-Src Script - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Data-Structures.html#Data-Structures" title="Data Structures">
+<link rel="next" href="How-It-All-Works.html#How-It-All-Works" title="How It All Works">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Mk-Src-Script"></a>
+<a name="Mk_002dSrc-Script"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Data-Structures.html#Data-Structures">Data Structures</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">14 Mk-Src Script</h2>
+
+<p>A good deal of interface code is automatically generated by the
+<samp><span class="file">mk-src.pl</span></samp> Perl script.  I am doing it this way to avoid having
+to write a lot of relative code for the C++ interface.  This should
+also make adding interface for other languages a lot less tedious and
+will allow the interface to automatically take advantage of new Aspell
+functionality as it is made available.  The <samp><span class="file">mk-src.pl</span></samp> script
+uses <samp><span class="file">mk-src.in</span></samp> as its input.
+
+<h3 class="section">14.1 mk-src.in</h3>
+
+<p>NOTE: This section may not always be up to date since it is manually
+converted from the pod source.
+
+   <p>The format of <samp><span class="file">mk-src.in</span></samp> is as follows:
+
+<pre class="verbatim">
+    The following characters are literals: { } / '\ ' \n = >
+
+    &lt;items>
+    &lt;items> := (&lt;item>\n)+
+    &lt;items> := &lt;category>:\ &lt;name> {\n&lt;details>\n} | &lt;&lt;tab>>&lt;details>
+    &lt;details> := &lt;options>\n /\n &lt;items>
+    &lt;options> := (&lt;option>\n)*
+    &lt;option> := &lt;key> [=> &lt;value>]
+
+    &lt;&lt;tab>> means everything should be indented by one tab
+</pre>
+
+   <p>See MkSrc::Info for a description of the categories and options
+
+<h3 class="section">14.2 MkSrc::Info</h3>
+
+<p><code>%info</code>
+
+   <p>The info array contains information on how to process the info in
+    <samp><span class="file">mk-src.pl</span></samp>. It has the following layout
+
+<pre class="verbatim">
+    &lt;catagory> => options => [] 
+                  groups => [] # if undef than anything is accepted
+                  creates_type => "" # the object will create a new type
+                                     # as specified
+                  proc => &lt;impl type> => sub {}
+</pre>
+    where &lt;impl type&gt; is one of:
+<pre class="verbatim">
+    cc: for "aspell.h" header file
+    cxx: for C++ interface implemented on top of cc interface
+    native: for creation of header files used internally by aspell
+    impl: for defination of functions declared in cc interface.
+          the definations use the native hedaer files
+    native_impl: for implementations of stuff declared in the native
+                  header files
+</pre>
+    each proc sub should take the following argv
+<pre class="verbatim">
+    $data: a subtree of $master_data
+    $accum: 
+</pre>
+    &lt;options&gt; is one of:
+<pre class="verbatim">
+    desc: description of the object
+    prefix:
+    posib err: the method may return an error condition
+    c func:
+    const: the method is a const member
+    c only: only include in the external interface
+    c impl headers: extra headers that need to be included in the C impl
+    c impl: use this as the c impl instead of the default
+    cxx impl: use this as the cxx impl instead of the default
+    returns alt type: the constructor returns some type other than
+      the object from which it is a member of
+    no native: do not attemt to create a native implementation
+    treat as object: treat as a object rather than a pointer
+</pre>
+    The <code>%info</code> structure is initialized as follows:
+<pre class="verbatim">
+    our %info =
+    (
+     root => { 
+       options => [],
+       groups => ['methods', 'group']},
+     methods => {
+       # methods is a collection of methods which will be inserted into
+       # a class after some simple substation rules.  A $ will be
+       # replaced with name of the class.
+       options => ['strip', 'prefix', 'c impl headers'],
+       groups => undef},
+     group => {
+       # a group is a colection of objects which should be grouped together
+       # this generally means they will be in the same source file
+       options => ['no native'],
+       groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
+     enum => {
+       # basic C enum
+       options => ['desc', 'prefix'],
+       creates_type => 'enum'},
+     struct => {
+       # basic c struct
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'struct',},
+     union => {
+       # basic C union
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'union'},
+     class => {
+       # C++ class
+       options => ['c impl headers'],
+       groups => undef,
+       creates_type => 'class'},
+     errors => {}, # possible errors
+     method => {
+       # A class method
+       options => ['desc', 'posib err', 'c func', 'const',
+                   'c only', 'c impl', 'cxx impl'],
+       groups => undef},
+     constructor => {
+       # A class constructor
+       options => ['returns alt type', 'c impl', 'desc'],
+       groups => 'types'},
+     destructor => {
+       # A class destructor
+       options => [],
+       groups => undef},
+     );
+</pre>
+    In addition to the categories listed above a &ldquo;methods&rdquo; category by be
+    specified in under the class category. A &ldquo;methods&rdquo; category is created
+    for each methods group under the name &ldquo;&lt;methods name&gt; methods&rdquo;. When
+    groups is undefined a type name may be specified in place of a category.
+
+   <p><code>%types</code>
+
+   <p>types contains a master list of all types. This includes basic types and
+    ones created in <samp><span class="file">mk-src.in</span></samp>. The basic types include:
+<pre class="verbatim">
+    'void', 'bool', 'pointer', 'double',
+    'string', 'encoded string', 'string obj',
+    'char', 'unsigned char',
+    'short', 'unsigned short',
+    'int', 'unsigned int',
+    'long', 'unsigned long'
+</pre>
+  %methods
+
+   <p><code>%methods</code> is used for holding the &ldquo;methods&rdquo; information
+
+<h3 class="section">14.3 MkSrc::Util</h3>
+
+<p>This module contains various useful utility functions:
+     <dl>
+    <dt><code>false</code><dd>        Returns 0.
+
+     <br><dt><code>true</code><dd>        Returns 1.
+
+     <br><dt><code>cmap EXPR LIST</code><dd>        Apply EXPR to each item in LIST and than concatenate the result into
+        a string
+
+     <br><dt><code>one_of STR LIST</code><dd>        Returns true if LIST contains at least one of STR.
+
+     <br><dt><code>to_upper STR</code><dd>        Convert STR to all uppercase and substitute spaces with underscores.
+
+     <br><dt><code>to_lower STR</code><dd>        Convert STR to all lowercase and substitute spaces with underscores.
+
+     <br><dt><code>to_mixed STR</code><dd>        Convert STR to mixed case where each new word startes with a
+        uppercase letter. For example "feed me" would become "FeedMe". 
+</dl>
+
+<h3 class="section">14.4 MkSrc::Read</h3>
+
+<p><code>read</code>
+        Read in <samp><span class="file">mk-src.in</span></samp> and return a data structure which has the
+        following format:
+<pre class="verbatim">
+      &lt;tree>
+      &lt;tree> := &lt;options>
+                data => &lt;tree>
+    where each tree represents an entry in mk-src.in.  
+    The following two options are always provided:
+      name: the name of the entry
+      type: the catagory or type name
+    Additional options are the same as specified in %info
+</pre>
+
+<h3 class="section">14.5 MKSrc::Create</h3>
+
+     <dl>
+    <dt><code>create_cc_file PARMS</code><dd>        Create a source file.
+     <pre class="example">               Required Parms: type, dir, name, data
+               Boolean Parms:  header, cxx
+               Optional Parms: namespace (required if cxx), pre_ext,
+                               accum
+     </pre>
+     <br><dt><code>create_file FILENAME DATA</code><dd>        Writes DATA to FILENAME but only if DATA differs from the content of
+        the file and the string:
+     <pre class="example">               Automatically generated file.
+     </pre>
+     <p>is present in the existing file if it already exists. 
+</dl>
+
+<h3 class="section">14.6 Code Generation Modes</h3>
+
+<p>The code generation modes are currently one of the following:
+<pre class="example">          cc:     Mode used to create types suitable for C interface
+          cc_cxx: Like cc but typenames don't have a leading Aspell prefix
+          cxx:    Mode used to create types suitable for CXX interface
+          native: Mode in which types are suitable for the internal
+                  implementation
+          native_no_err: Like Native but with out PosibErr return types
+</pre>
+   <h3 class="section">14.7 MkSrc::CcHelper</h3>
+
+<p>Helper functions used by interface generation code:
+<pre class="example">         to_c_return_type ITEM
+             .
+     
+         c_error_cond ITEM
+             .
+</pre>
+     <dl>
+    <dt><code>make_func NAME @TYPES PARMS ; %ACCUM</code><dd>        Creates a function prototype
+
+     <p>Parms can be any of:
+     <pre class="example">                    mode: code generation mode
+     </pre>
+     <br><dt><code>call_func NAME @TYPES PARMS ; %ACCUM</code><dd>        Return a string to call a func. Will prefix the function with return
+        if the functions returns a non-void type;
+
+     <p>Parms can be any of:
+     <pre class="example">                    mode: code generation mode
+     </pre>
+     <br><dt><code>to_type_name ITEM PARMS ; %ACCUM</code><dd>        Converts item into a type name.
+
+     <p>Parms can be any of:
+     <pre class="example">               mode: code generation mode
+               use_type: include the actual type
+               use_name: include the name on the type
+               pos: either "return" or "other"
+     </pre>
+     <br><dt><code>make_desc DESC ; LEVEL</code><dd>        Make a C comment out of DESC optionally indenting it LEVEL spaces.
+
+     <br><dt><code>make_c_method CLASS ITEM PARMS ; %ACCUM</code><dd>        Create the phototype for a C method which is really a function.
+
+     <p>Parms is any of:
+     <pre class="example">               mode:      code generation mode
+               no_aspell: if true do not include aspell in the name
+               this_name: name for the parameter representing the
+                          current object
+     </pre>
+     <br><dt><code>call_c_method CLASS ITEM PARMS ; %ACCUM</code><dd>        Like make_c_method but instead returns the appropriate string to
+        call the function. If the function returns a non-void type the
+        string will be prefixed with a return statement.
+
+     <br><dt><code>form_c_method CLASS ITEM PARMS ; %ACCUM</code><dd>        Like make_c_method except that it returns the array:
+     <pre class="example">               ($func, $data, $parms, $accum)
+     </pre>
+     <p>which is suitable for passing into make_func. It will return an
+        empty array if it can not make a method from ITEM.
+
+     <br><dt><code>make_cxx_method ITEM PARMS ; %ACCUM</code><dd>        Create the phototype for a C++ method.
+
+     <p>Parms is one of:
+     <pre class="example">               mode: code generation mode
+     </pre>
+     </dl>
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Part-1-_002d-Compiled-Dictionary-Format.html b/manual/aspell-dev.html/Part-1-_002d-Compiled-Dictionary-Format.html
new file mode 100644 (file)
index 0000000..c229c62
--- /dev/null
@@ -0,0 +1,122 @@
+<html lang="en">
+<head>
+<title>Part 1 - Compiled Dictionary Format - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="How-It-All-Works.html#How-It-All-Works" title="How It All Works">
+<link rel="prev" href="How-It-All-Works.html#How-It-All-Works" title="How It All Works">
+<link rel="next" href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike" title="Part 2 - Quickly Finding Similar Soundslike">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Part-1---Compiled-Dictionary-Format"></a>
+<a name="Part-1-_002d-Compiled-Dictionary-Format"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike">Part 2 - Quickly Finding Similar Soundslike</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>
+<hr>
+</div>
+
+<h3 class="section">15.1 Part 1 - The Compiled Dictionary Format</h3>
+
+<p>In this part you will see how the data is laid out in the compiled
+dictionary for Aspell 0.60.  See source file <samp><span class="file">readonly_ws.cpp</span></samp>.
+
+   <p>Aspell's main compiled wordlist dictionary file is made as follows:
+
+     <ul>
+<li>header
+<li>jump table for editdist 1
+<li>jump table for editdist 2
+<li>data block
+<li>hash table
+</ul>
+
+   <p>There is nothing particularly interesting about the header.  Just a
+bunch of meta information.
+
+   <p>The jump tables are described in the next section <small class="dots">...</small>
+
+   <p>Words in the data block are grouped based on the soundslike.  Each
+group is as follows:
+
+<pre class="example">     &lt;8 bit: offset to next item&gt;&lt;8 bit: soundslike size&gt;&lt;soundslike&gt;
+     &lt;null&gt;&lt;words&gt;
+</pre>
+   <p class="noindent">Each word group is as follows:
+
+<pre class="example">     &lt;8 bit: flags&gt;&lt;8 bit: offset to next word&gt;&lt;8 bit: word size&gt;&lt;word&gt;&lt;null&gt;
+     [&lt;affix info&gt;&lt;null&gt;]
+</pre>
+   <p>The offset for the final word in each group points to the next word in
+the following group.  The offset for the final word and soundslike
+group in the dictionary is 0.
+
+   <p>There is some provisions for additional info to be stored with the word
+but for simplicity, it's left out here.  If soundslike data is not used
+then the soundslike block it not used.
+
+   <p>This format makes it easy to iterate over the data without using the
+hash table.
+
+   <p>Each soundslike group can be a maximum of about 256 bytes.  If this
+limit is reached then the soundslike group is split. Using 2 bytes for
+the soundslike offset would of solved this problem however 256 bytes
+is normally sufficient, thus I would of wasted some space by using an
+extra byte.  More importantly, Using 2 bytes means I would of had to
+worry about alignment issues.
+
+   <p>The soundslike groups are sorted in more or less alphabetic order.
+
+   <p>The hash table is a simple open address hash table.  The key is the
+dictionary word in all lowercase form with all accents removed (what is
+known as the "clean" form of the word).  The value stored in the table
+is a 32-bit offset to the beginning of the word.  A 32-bit integer
+offset is used rather than a pointer so that the compiled dictionary
+can be mmaped to make loading the dictionary very fast and so that the
+memory can be shared between processed, and on 64 bit platforms using
+pointers would have doubled the size of the hash table.
+
+   <p>Additional information for each word can be derived from each offset:
+
+<pre class="example">     word size: offset - 1
+     offset to next word: offset - 2
+     flags: offset - 3
+</pre>
+   <p>I use helper functions for getting this information.  Doing it this way
+rather than having a data structure is slightly evil, but admittedly,
+I have my reasons.
+
+   <p>In the next section, you will see how Aspell uses the jump tables to
+search the list for <em>soundslike</em> with <em>edit-distance</em> of 1 or 2.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Part-2-_002d-Quickly-Finding-Similar-Soundslike.html b/manual/aspell-dev.html/Part-2-_002d-Quickly-Finding-Similar-Soundslike.html
new file mode 100644 (file)
index 0000000..dd14121
--- /dev/null
@@ -0,0 +1,163 @@
+<html lang="en">
+<head>
+<title>Part 2 - Quickly Finding Similar Soundslike - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="How-It-All-Works.html#How-It-All-Works" title="How It All Works">
+<link rel="prev" href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format" title="Part 1 - Compiled Dictionary Format">
+<link rel="next" href="Part-3.html#Part-3" title="Part 3">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Part-2---Quickly-Finding-Similar-Soundslike"></a>
+<a name="Part-2-_002d-Quickly-Finding-Similar-Soundslike"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Part-3.html#Part-3">Part 3</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format">Part 1 - Compiled Dictionary Format</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>
+<hr>
+</div>
+
+<h3 class="section">15.2 Part 2 - Quickly Finding Similar Soundslike</h3>
+
+<p>In order for Aspell to find suggestions for a misspelled word Aspell 1)
+creates a list of candidate words, 2) scores them, and 3) returns the most
+likely candidates.  One of the ways Aspell finds candidate words is to look
+for all words with a soundslike which is of a small edit distance from the
+soundslike of the original word.  The edit distance is the total number of
+deletions, insertions, exchanges, or adjacent swaps needed to make one
+string equivalent to the other. The exact distance chosen is either 1 or 2
+depending on a number of factors.  In this part I will focus on how Aspell
+find all such soundslike efficiently and how the jump tables play a key
+role.
+
+   <p>This section will focus on how Aspell finds all such soundslike
+efficiently and how the jump tables play a key role.
+
+   <p>The naive way to scan the list for all possible soundslike is to
+compute the edit-distance of every soundslike in the dictionary and
+then keep the ones within the threshold.  This is exactly what Aspell
+did prior to 0.60. before a faster method was created.  When a fast
+enough edit distance function is used this method turns out not to be
+unbearably slow, at least for English, but for other languages, with
+large word lists and no soundslike, this can be slow due to the number
+of items that need to be scanned.
+
+   <p>Aspell uses a special edit distance function which gives up if the
+distance is larger than the threshold, thus making it very fast.  The
+basic algorithm is as follows:
+
+<pre class="example">     limit_edit_distance(A,B,limit) = ed(A,B,0)
+       where ed(A,B,d) = d                              if A &amp; B is empty.
+                       = infinity                       if d &gt; limit
+                       = ed(A[2..],B[2..], d)           if A[1] == B[1]
+                       = min ( ed(A[2..],B[2..], d+1),
+                               ed(A,     B[2..], d+1),
+                               ed(A[2..],B,      d+1) ) otherwise
+</pre>
+   <p>However the algorithm used also allows for swaps and is not recursive. 
+Specialized versions are provided for an edit distance of one and two. 
+The running time is asymptotically bounded above by <code>(3^l)*n</code>
+where <code>l</code> is the limit and <code>n</code> is the maximum of
+<code>strlen(A),strlen(B)</code>.  Based on informal tests, the <code>n</code>
+does not really matter and the running time is more like <code>(3^l)</code>.
+
+   <p>For complete details on this algorithm see the files
+<samp><span class="file">leditdist.hpp</span></samp> and <samp><span class="file">leditdist.cpp</span></samp> in the source
+distribution under <samp><span class="file">modules/speller/default</span></samp>.
+
+   <p>So, by exploiting the properties of <code>limit_edit_distance</code> it is
+possible to avoid having to look at many of the soundslikes in the
+dictionary.  <code>Limit_edit_distance</code> is efficient because in many
+cases, it does not have to look at the entire word before it can
+determine that it isn't within the given threshold, and then by having
+it return the last position looked at, <em>p</em>, it is possible to
+avoid having to look at similar soundslike which are not within the
+threshold.  That is, if two soundslike are the same up to the position
+<code>p</code>, then neither of them are within the given threshold.
+
+   <p>Aspell 0.60 exploits this property by using jump tables.  Each entry
+in the jump table contains two fields: the first <code>N</code> letters of a
+soundslike, and an offset.  The entries are sorted in lexicographic
+order based on the raw byte value.  Aspell maintains two jump tables.
+
+   <p>The first table contains the first 2 letters of a soundslike and the
+offset points into the second jump table.
+
+   <p>The second table contains the first 3 letters of a soundslike where
+the offset points to the location of the soundslike in the data block. 
+The soundslike in the datablock are sorted so that a linear scan can
+be used to find all soundslike with the same prefix.  If the
+<code>limit_edit_distance</code> stops before reaching the end of a
+<em>"soundslike"</em> in one of the jump tables then it is possible to
+skip all the soundslike in the data block with the same prefix.
+
+   <p>Thus, the scan for all <em>soundslike</em> within a given edit distance
+goes something like this:
+
+     <ol type=1 start=1>
+
+     <li>Compare the entry in the first jump table using
+<code>limit_edit_distance</code>.  If the <code>limit_edit_distance</code> scanned
+passed the end of the word, then go to the first entry in the second
+jump table with the same prefix, otherwise go to the next entry in the
+first jump table and repeat.
+
+     <li>Compare the entry in the second jump table.  If the
+<code>limit_edit_distance</code>  passed the end of the word, then go to the
+first <em>soundslike</em> in the data block with this prefix, otherwise
+if the first two letters of the next entry are the same as the current
+one go to it and repeat.  If the first two letters are not the same
+then go to the next entry in the first jump table and repeat step 1.
+
+     <li>Compare the <em>soundslike</em> in the data block.  If the edit
+distance is within the target distance, then add the word to the
+candidate list, otherwise don't.  Let <code>N</code> be the position where
+<code>limit_edit_distance</code> stopped, (starting at 0).  If <code>N</code> is
+less than 6, then skip over any soundslike that have the same first
+<code>N + 1</code> letters.  If after skipping over any similar
+<em>soundslike</em> the next <em>soundslike</em> does not have the same
+first three letters, then go to the next entry in the second jump table
+and repeat step 2, otherwise repeat this step with the next
+<em>soundslike</em>.
+
+        </ol>
+
+   <p>The part of skipping over <em>soundslike</em> with the first <code>N + 1</code>
+letters in step 3 were added in Aspell 0.60.3.  The function
+responsible for most of this is found in function
+<code>ReadOnlyDict::SoundslikeElements::next</code> which is found in file
+<samp><span class="file">readonly_ws.cpp</span></samp>.
+
+   <p>The next part will describe how Aspell deals with <em>soundslike</em>
+lookup when affix compression is involved.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Part-3.html b/manual/aspell-dev.html/Part-3.html
new file mode 100644 (file)
index 0000000..7adfc1b
--- /dev/null
@@ -0,0 +1,52 @@
+<html lang="en">
+<head>
+<title>Part 3 - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="How-It-All-Works.html#How-It-All-Works" title="How It All Works">
+<link rel="prev" href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike" title="Part 2 - Quickly Finding Similar Soundslike">
+<link rel="next" href="Copying.html#Copying" title="Copying">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Part-3"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Copying.html#Copying">Copying</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike">Part 2 - Quickly Finding Similar Soundslike</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>
+<hr>
+</div>
+
+<h3 class="section">15.3 Part 3</h3>
+
+<p>Not written yet.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Place-Sources.html b/manual/aspell-dev.html/Place-Sources.html
new file mode 100644 (file)
index 0000000..e1ac0ff
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Place%20Sources">
diff --git a/manual/aspell-dev.html/Programmer_0027s-Interface.html b/manual/aspell-dev.html/Programmer_0027s-Interface.html
new file mode 100644 (file)
index 0000000..a307a53
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Programmer%27s%20Interface">
diff --git a/manual/aspell-dev.html/Recommended-Standard-Aspell.html b/manual/aspell-dev.html/Recommended-Standard-Aspell.html
new file mode 100644 (file)
index 0000000..768e35d
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Recommended%20Standard%20Aspell">
diff --git a/manual/aspell-dev.html/Reinstall-Aspell.html b/manual/aspell-dev.html/Reinstall-Aspell.html
new file mode 100644 (file)
index 0000000..b7682ee
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Reinstall%20Aspell">
diff --git a/manual/aspell-dev.html/Smart-Pointers.html b/manual/aspell-dev.html/Smart-Pointers.html
new file mode 100644 (file)
index 0000000..7d25993
--- /dev/null
@@ -0,0 +1,85 @@
+<html lang="en">
+<head>
+<title>Smart Pointers - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Strings.html#Strings" title="Strings">
+<link rel="next" href="I_002fO.html#I_002fO" title="I/O">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Smart-Pointers"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="I_002fO.html#I_002fO">I/O</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Strings.html#Strings">Strings</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">8 Smart Pointers</h2>
+
+<p>Smart pointers are used extensively in Aspell to
+simplify memory management tasks and to avoid memory leaks.
+
+<h3 class="section">8.1 CopyPtr</h3>
+
+<p>The <code>CopyPtr</code> class makes a deep copy of an object whenever it is
+copied.  The <code>CopyPtr</code> class is defined in <samp><span class="file">copy_ptr.hpp</span></samp>. 
+This header should be included wherever <code>CopyPtr</code> is used.  The
+complete definition of the object <code>CopyPtr</code> is pointing to does
+not need to be defined at this point.  The implementation is defined
+in <samp><span class="file">copy_ptr-t.hpp</span></samp>.  The implementation header file should be
+included at a point in your code where the class <code>CopyPtr</code> is
+pointing to is completely defined.
+
+<h3 class="section">8.2 ClonePtr</h3>
+
+<p><code>ClonePtr</code> is like copy pointer except the <code>clone()</code> method
+is used instead of the copy constructor to make copies of an object. 
+If is defined in <samp><span class="file">clone_ptr.hpp</span></samp> and implemented in
+<samp><span class="file">clone_ptr-t.hpp</span></samp>.
+
+<h3 class="section">8.3 StackPtr</h3>
+
+<p>A <code>StackPtr</code> is designed to be used whenever the only pointer to
+a new object allocated with <samp><span class="command">new</span></samp> is on the stack.  It is
+similar to the standard C++ <code>auto_ptr</code> but the semantics are a
+bit different.  It is defined in <samp><span class="file">stack_ptr.hpp</span></samp> &mdash; unlike
+<code>CopyPtr</code> or <code>ClonePtr</code> it is defined and implemented in
+this header file.
+
+<h3 class="section">8.4 GenericCopyPtr</h3>
+
+<p>A generalized version of <code>CopyPtr</code> and <code>ClonePtr</code> which the
+two are based on.  It is defined in <samp><span class="file">generic_copy_ptr.hpp</span></samp> and
+implemented in <samp><span class="file">generic_copy_ptr-t.hpp</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Source-Code-Layout.html b/manual/aspell-dev.html/Source-Code-Layout.html
new file mode 100644 (file)
index 0000000..c72e07b
--- /dev/null
@@ -0,0 +1,85 @@
+<html lang="en">
+<head>
+<title>Source Code Layout - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Error-Handling.html#Error-Handling" title="Error Handling">
+<link rel="next" href="Strings.html#Strings" title="Strings">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Source-Code-Layout"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Strings.html#Strings">Strings</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Error-Handling.html#Error-Handling">Error Handling</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">6 Source Code Layout</h2>
+
+     <dl>
+<dt><samp><span class="file">common/</span></samp><dd> Common code used by all parts of Aspell.
+
+     <br><dt><samp><span class="file">lib/</span></samp><dd> Library code used only by the actual Aspell library.
+
+     <br><dt><samp><span class="file">data/</span></samp><dd> Data files used by Aspell.
+
+     <br><dt><samp><span class="file">modules/</span></samp><dd> Aspell modules which are eventually meant to be pluggable.
+
+          <dl>
+  <dt><samp><span class="file">speller/</span></samp><dd>
+               <dl>
+    <dt><samp><span class="file">default/</span></samp><dd>      Main speller Module. 
+  </dl>
+
+          <br><dt><samp><span class="file">filter/</span></samp>
+  <br><dt><samp><span class="file">tokenizer/</span></samp><dd></dl>
+
+     <br><dt><samp><span class="file">auto/</span></samp><dd>Scripts and data files to automatically generate code used by Aspell.
+
+     <br><dt><samp><span class="file">interface/</span></samp><dd>Header files and such that external programs should use when in order
+to use the Aspell library.
+          <dl>
+<dt><samp><span class="file">cc/</span></samp><dd>The external C interface that programs should be using when they wish
+to use Aspell. 
+</dl>
+
+     <br><dt><samp><span class="file">prog/</span></samp><dd>Actual programs based on the Aspell library. The main Aspell utility
+is included here.
+
+     <br><dt><samp><span class="file">scripts/</span></samp><dd>Miscellaneous scripts used by Aspell.
+
+     <br><dt><samp><span class="file">manual/</span></samp>
+<br><dt><samp><span class="file">examples/</span></samp><dd>Example programs demonstrating the use of the Aspell library. 
+</dl>
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Strings.html b/manual/aspell-dev.html/Strings.html
new file mode 100644 (file)
index 0000000..3c591cb
--- /dev/null
@@ -0,0 +1,96 @@
+<html lang="en">
+<head>
+<title>Strings - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Source-Code-Layout.html#Source-Code-Layout" title="Source Code Layout">
+<link rel="next" href="Smart-Pointers.html#Smart-Pointers" title="Smart Pointers">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Strings"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Smart-Pointers.html#Smart-Pointers">Smart Pointers</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Source-Code-Layout.html#Source-Code-Layout">Source Code Layout</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">7 Strings</h2>
+
+<h3 class="section">7.1 String</h3>
+
+<p>The <code>String</code> class provided the same functionality of the C++
+string except for fewer constructors.  It also inherits <code>OStream</code>
+so that you can write to it with the <code>&lt;&lt;</code> operator.  It is
+defined in <code>string.hpp</code>.
+
+<h3 class="section">7.2 ParmString</h3>
+
+<p>ParmString is a special string class that is designed to be used as a
+parameter for a function that is expecting a string.  It is defined in
+<code>parm_string.hpp</code>.  It will allow either a <code>const char *</code> or
+<code>String</code> class to be passed in.  It will automatically convert to
+a <code>const char *</code>.  The string can also be accessed via the
+<code>str</code> method.  Usage example:
+<pre class="verbatim">
+void foo(ParmString s1, ParmString s2) {
+   const char * str0 = s1;
+   unsigned int size0 = s2.size()
+   if (s1 == s2 || s2 == "bar") {
+     ...
+   }
+}
+...
+String s1 = "...";
+foo(s1);
+const char * s2 = "...";
+foo(s2);
+</pre>
+
+   <p>This class should be used when a string is being passed in as a
+parameter.  It is faster than using <code>const String &amp;</code> (as that
+will create an unnecessary temporary when a <code>const char *</code> is
+passed in), and is less annoying than using <code>const char *</code> (as it
+doesn't require the <code>c_str()</code> method to be used when a
+<code>String</code> is passed in).
+
+<h3 class="section">7.3 CharVector</h3>
+
+<p>A character vector is basically a <code>Vector&lt;char&gt;</code> but it has a few
+additional methods for dealing with strings which <code>Vector</code> does
+not provide.  It, like <code>String</code>, is also inherits <code>OStream</code>
+so that you can write to it with the <code>&lt;&lt;</code> operator.  It is
+defined in <code>char_vector.hpp</code>.  Use it when ever you need a string
+which is guaranteed to be in a continuous block of memory which you
+can write to.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Style-Guidelines.html b/manual/aspell-dev.html/Style-Guidelines.html
new file mode 100644 (file)
index 0000000..88f910e
--- /dev/null
@@ -0,0 +1,72 @@
+<html lang="en">
+<head>
+<title>Style Guidelines - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="index.html#Top" title="Top">
+<link rel="next" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch" title="How to Submit a Patch">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Style-Guidelines"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch">How to Submit a Patch</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="index.html#Top">Top</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">1 Style Guidelines</h2>
+
+<p>* Style Guidelines::
+* How to Submit a Patch::
+* C++ Standard Library::
+* Templates::
+* Error Handling::
+* Source Code Layout ::
+* Strings::
+* Smart Pointers::
+* I/O::
+* Config Class::
+* Filter Interface::
+* Filter Modes::
+* Data Structures::
+* Mk-Src Script::
+* How It All Works::
+* Copying::
+
+   <p>As far as coding styles go I am really not that picky.  The important
+thing is to stay consistent.  However, please whatever you do, do not
+indent with more than 4 characters as I find indenting with more than
+that extremely difficult to read as most of the code ends up on the
+right side of the screen.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Templates.html b/manual/aspell-dev.html/Templates.html
new file mode 100644 (file)
index 0000000..1f9706a
--- /dev/null
@@ -0,0 +1,54 @@
+<html lang="en">
+<head>
+<title>Templates - Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library" title="C++ Standard Library">
+<link rel="next" href="Error-Handling.html#Error-Handling" title="Error Handling">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Templates"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Error-Handling.html#Error-Handling">Error Handling</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library">C++ Standard Library</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">4 Templates</h2>
+
+<p>Templates are used in Aspell when there is a clear advantage to doing
+so.  Whenever you use templates please use them carefully and try very
+hard not to create code bloat by generating a lot of unnecessary and
+duplicate code.
+
+   </body></html>
+
diff --git a/manual/aspell-dev.html/Test-Filter-Installed.html b/manual/aspell-dev.html/Test-Filter-Installed.html
new file mode 100644 (file)
index 0000000..1cd4b3e
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Filter-Interface.html#Test%20Filter%20Installed">
diff --git a/manual/aspell-dev.html/index.html b/manual/aspell-dev.html/index.html
new file mode 100644 (file)
index 0000000..0fd74df
--- /dev/null
@@ -0,0 +1,160 @@
+<html lang="en">
+<head>
+<title>Aspell Developer's Manual</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell spell checker developer's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="#Top">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the developer's manual for Aspell.
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<h1 class="settitle">Aspell Developer's Manual</h1>
+   <div class="contents">
+<h2>Table of Contents</h2>
+<ul>
+<li><a name="toc_Top" href="index.html#Top">Notes</a>
+<li><a name="toc_Style-Guidelines" href="Style-Guidelines.html#Style-Guidelines">1 Style Guidelines</a>
+<li><a name="toc_How-to-Submit-a-Patch" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch">2 How to Submit a Patch</a>
+<li><a name="toc_C_002b_002b-Standard-Library" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library">3 C++ Standard Library</a>
+<li><a name="toc_Templates" href="Templates.html#Templates">4 Templates</a>
+<li><a name="toc_Error-Handling" href="Error-Handling.html#Error-Handling">5 Error Handling</a>
+<li><a name="toc_Source-Code-Layout" href="Source-Code-Layout.html#Source-Code-Layout">6 Source Code Layout</a>
+<li><a name="toc_Strings" href="Strings.html#Strings">7 Strings</a>
+<ul>
+<li><a href="Strings.html#Strings">7.1 String</a>
+<li><a href="Strings.html#Strings">7.2 ParmString</a>
+<li><a href="Strings.html#Strings">7.3 CharVector</a>
+</li></ul>
+<li><a name="toc_Smart-Pointers" href="Smart-Pointers.html#Smart-Pointers">8 Smart Pointers</a>
+<ul>
+<li><a href="Smart-Pointers.html#Smart-Pointers">8.1 CopyPtr</a>
+<li><a href="Smart-Pointers.html#Smart-Pointers">8.2 ClonePtr</a>
+<li><a href="Smart-Pointers.html#Smart-Pointers">8.3 StackPtr</a>
+<li><a href="Smart-Pointers.html#Smart-Pointers">8.4 GenericCopyPtr</a>
+</li></ul>
+<li><a name="toc_I_002fO" href="I_002fO.html#I_002fO">9 I/O</a>
+<ul>
+<li><a href="I_002fO.html#I_002fO">9.1 IStream/OStream</a>
+<li><a href="I_002fO.html#I_002fO">9.2 FStream</a>
+<li><a href="I_002fO.html#I_002fO">9.3 Standard Streams</a>
+</li></ul>
+<li><a name="toc_Config-Class" href="Config-Class.html#Config-Class">10 Config Class</a>
+<li><a name="toc_Filter-Interface" href="Filter-Interface.html#Filter-Interface">11 Filter Interface</a>
+<ul>
+<li><a href="Filter-Interface.html#Filter-Interface">11.1 Overview</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.2 Adding a New Filter</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.3 IndividualFilter class</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.4 Constructor Function</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.5 Filter Description File</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.6 Retrieve Options by a Filter</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.7 Compiling and Linking</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.8 Programmer's Interface</a>
+<li><a href="Filter-Interface.html#Filter-Interface">11.9 Adding a filter to Aspell standard distribution</a>
+</li></ul>
+<li><a name="toc_Filter-Modes" href="Filter-Modes.html#Filter-Modes">12 Filter Modes</a>
+<ul>
+<li><a href="Filter-Modes.html#Filter-Modes">12.1 Aspell Mode File</a>
+<ul>
+<li><a href="Filter-Modes.html#Filter-Modes">12.1.1 Version Line</a>
+<li><a href="Filter-Modes.html#Filter-Modes">12.1.2 Magic Line</a>
+<li><a href="Filter-Modes.html#Filter-Modes">12.1.3 Description Line</a>
+<li><a href="Filter-Modes.html#Filter-Modes">12.1.4 Filter and Option Lines</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Data-Structures" href="Data-Structures.html#Data-Structures">13 Data Structures</a>
+<ul>
+<li><a href="Data-Structures.html#Data-Structures">13.1 Vector</a>
+<li><a href="Data-Structures.html#Data-Structures">13.2 BasicList</a>
+<li><a href="Data-Structures.html#Data-Structures">13.3 StringMap</a>
+<li><a href="Data-Structures.html#Data-Structures">13.4 Hash Tables</a>
+<li><a href="Data-Structures.html#Data-Structures">13.5 BlockSList</a>
+</li></ul>
+<li><a name="toc_Mk_002dSrc-Script" href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14 Mk-Src Script</a>
+<ul>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.1 mk-src.in</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.2 MkSrc::Info</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.3 MkSrc::Util</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.4 MkSrc::Read</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.5 MKSrc::Create</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.6 Code Generation Modes</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">14.7 MkSrc::CcHelper</a>
+</li></ul>
+<li><a name="toc_How-It-All-Works" href="How-It-All-Works.html#How-It-All-Works">15 How It All Works</a>
+<ul>
+<li><a href="Part-1-_002d-Compiled-Dictionary-Format.html#Part-1-_002d-Compiled-Dictionary-Format">15.1 Part 1 - The Compiled Dictionary Format</a>
+<li><a href="Part-2-_002d-Quickly-Finding-Similar-Soundslike.html#Part-2-_002d-Quickly-Finding-Similar-Soundslike">15.2 Part 2 - Quickly Finding Similar Soundslike</a>
+<li><a href="Part-3.html#Part-3">15.3 Part 3</a>
+</li></ul>
+<li><a name="toc_Copying" href="Copying.html#Copying">Appendix A Copying</a>
+<ul>
+<li><a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">A.1 GNU Free Documentation License</a>
+<ul>
+<li><a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">A.1.1 ADDENDUM: How to use this License for your documents</a>
+</li></ul>
+</li></ul>
+</li></ul>
+</div>
+
+
+
+<div class="node">
+<p>
+<a name="Top"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Style-Guidelines.html#Style-Guidelines">Style Guidelines</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="../index.html#dir">(dir)</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="../index.html#dir">(dir)</a>
+<hr>
+</div>
+
+<h2 class="unnumbered">Notes</h2>
+
+<p>This manual is designed for those who wish to develop Aspell.  It is
+currently very sketchy.  However, it should improve over time.  The
+latest version of this document can be found at
+<a href="http://savannah.gnu.org/download/aspell/manual/devel/devel.html">http://savannah.gnu.org/download/aspell/manual/devel/devel.html</a>.
+
+<ul class="menu">
+<li><a accesskey="1" href="Style-Guidelines.html#Style-Guidelines">Style Guidelines</a>
+<li><a accesskey="2" href="How-to-Submit-a-Patch.html#How-to-Submit-a-Patch">How to Submit a Patch</a>
+<li><a accesskey="3" href="C_002b_002b-Standard-Library.html#C_002b_002b-Standard-Library">C++ Standard Library</a>
+<li><a accesskey="4" href="Templates.html#Templates">Templates</a>
+<li><a accesskey="5" href="Error-Handling.html#Error-Handling">Error Handling</a>
+<li><a accesskey="6" href="Source-Code-Layout.html#Source-Code-Layout">Source Code Layout </a>
+<li><a accesskey="7" href="Strings.html#Strings">Strings</a>
+<li><a accesskey="8" href="Smart-Pointers.html#Smart-Pointers">Smart Pointers</a>
+<li><a accesskey="9" href="I_002fO.html#I_002fO">I/O</a>
+<li><a href="Config-Class.html#Config-Class">Config Class</a>
+<li><a href="Filter-Interface.html#Filter-Interface">Filter Interface</a>
+<li><a href="Filter-Modes.html#Filter-Modes">Filter Modes</a>
+<li><a href="Data-Structures.html#Data-Structures">Data Structures</a>
+<li><a href="Mk_002dSrc-Script.html#Mk_002dSrc-Script">Mk-Src Script</a>
+<li><a href="How-It-All-Works.html#How-It-All-Works">How It All Works</a>
+<li><a href="Copying.html#Copying">Copying</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell-dev.info b/manual/aspell-dev.info
new file mode 100644 (file)
index 0000000..3e4cb0a
--- /dev/null
@@ -0,0 +1,1786 @@
+This is aspell-dev.info, produced by makeinfo version 4.8 from
+aspell-dev.texi.
+
+   This is the developer's manual for Aspell.
+
+   Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+
+INFO-DIR-SECTION GNU Packages
+START-INFO-DIR-ENTRY
+* Aspell-dev: (aspell-dev).        For Aspell developers
+END-INFO-DIR-ENTRY
+
+\1f
+File: aspell-dev.info,  Node: Top,  Next: Style Guidelines,  Prev: (dir),  Up: (dir)
+
+Notes
+*****
+
+This manual is designed for those who wish to develop Aspell.  It is
+currently very sketchy.  However, it should improve over time.  The
+latest version of this document can be found at
+`http://savannah.gnu.org/download/aspell/manual/devel/devel.html'.
+
+* Menu:
+
+* Style Guidelines::
+* How to Submit a Patch::
+* C++ Standard Library::
+* Templates::
+* Error Handling::
+* Source Code Layout ::
+* Strings::
+* Smart Pointers::
+* I/O::
+* Config Class::
+* Filter Interface::
+* Filter Modes::
+* Data Structures::
+* Mk-Src Script::
+* How It All Works::
+* Copying::
+
+\1f
+File: aspell-dev.info,  Node: Style Guidelines,  Next: How to Submit a Patch,  Prev: Top,  Up: Top
+
+1 Style Guidelines
+******************
+
+* Style Guidelines:: * How to Submit a Patch:: * C++ Standard Library::
+* Templates:: * Error Handling:: * Source Code Layout :: * Strings:: *
+Smart Pointers:: * I/O:: * Config Class:: * Filter Interface:: * Filter
+Modes:: * Data Structures:: * Mk-Src Script:: * How It All Works:: *
+Copying::
+
+   As far as coding styles go I am really not that picky.  The important
+thing is to stay consistent.  However, please whatever you do, do not
+indent with more than 4 characters as I find indenting with more than
+that extremely difficult to read as most of the code ends up on the
+right side of the screen.
+
+\1f
+File: aspell-dev.info,  Node: How to Submit a Patch,  Next: C++ Standard Library,  Prev: Style Guidelines,  Up: Top
+
+2 How to Submit a Patch
+***********************
+
+Bug reports and patches should be submitted via the Sourceforge Tracker
+at `http://sourceforge.net/tracker/?group_id=245' rather than being
+posted to any of the mailing lists.
+
+   The mailing lists are good if you need to check something out or need
+help or feedback from other readers, but they are not the best place to
+submit bugs or patches because they will likely get forgotten or lost
+within the mailing list traffic if not acted upon immediately.
+
+   Please make the effort to use the tracker.
+
+\1f
+File: aspell-dev.info,  Node: C++ Standard Library,  Next: Templates,  Prev: How to Submit a Patch,  Up: Top
+
+3 C++ Standard Library
+**********************
+
+The C++ Standard library is not used directly except under very
+specific circumstances.  The string class and the STL are used
+indirectly through wrapper classes and all I/O is done using the
+standard C library with light right helper classes to make using C I/O
+a bit more C++ like.
+
+   However the `new', `new[]', `delete' and `delete[]' operators are
+used to allocate memory when appropriate.
+
+\1f
+File: aspell-dev.info,  Node: Templates,  Next: Error Handling,  Prev: C++ Standard Library,  Up: Top
+
+4 Templates
+***********
+
+Templates are used in Aspell when there is a clear advantage to doing
+so.  Whenever you use templates please use them carefully and try very
+hard not to create code bloat by generating a lot of unnecessary and
+duplicate code.
+
+\1f
+File: aspell-dev.info,  Node: Error Handling,  Next: Source Code Layout,  Prev: Templates,  Up: Top
+
+5 Error Handling
+****************
+
+Exceptions are not used in Aspell as I find them more trouble than they
+are worth.  Instead an alternate method of error handling is used which
+is based around the PosibErr class.  PosibErr is a special Error
+handling device that will make sure that an error is properly handled.
+It is defined in `posib_err.hpp'.  PosibErr is expected to be used as
+the return type of the function. It will automatically be converted to
+the "normal" return type however if the normal returned type is
+accessed and there is an "unhandled" error condition it will abort. It
+will also abort if the object is destroyed with an "unhandled" error
+condition.  This includes ignoring the return type of a function
+returning an error condition.  An error condition is handled by simply
+checking for the presence of an error, calling ignore, or taking
+ownership of the error.
+
+   The PosibErr class is used extensively throughout Aspell.  Please
+refer to the Aspell source for examples of using PosibErr until better
+documentation is written.
+
+\1f
+File: aspell-dev.info,  Node: Source Code Layout,  Next: Strings,  Prev: Error Handling,  Up: Top
+
+6 Source Code Layout
+********************
+
+`common/'
+     Common code used by all parts of Aspell.
+
+`lib/'
+     Library code used only by the actual Aspell library.
+
+`data/'
+     Data files used by Aspell.
+
+`modules/'
+     Aspell modules which are eventually meant to be pluggable.
+
+    `speller/'
+
+         `default/'
+               Main speller Module.
+
+    `filter/'
+
+    `tokenizer/'
+
+`auto/'
+     Scripts and data files to automatically generate code used by
+     Aspell.
+
+`interface/'
+     Header files and such that external programs should use when in
+     order to use the Aspell library.
+    `cc/'
+          The external C interface that programs should be using when
+          they wish to use Aspell.
+
+`prog/'
+     Actual programs based on the Aspell library. The main Aspell
+     utility is included here.
+
+`scripts/'
+     Miscellaneous scripts used by Aspell.
+
+`manual/'
+
+`examples/'
+     Example programs demonstrating the use of the Aspell library.
+
+\1f
+File: aspell-dev.info,  Node: Strings,  Next: Smart Pointers,  Prev: Source Code Layout,  Up: Top
+
+7 Strings
+*********
+
+7.1 String
+==========
+
+The `String' class provided the same functionality of the C++ string
+except for fewer constructors.  It also inherits `OStream' so that you
+can write to it with the `<<' operator.  It is defined in `string.hpp'.
+
+7.2 ParmString
+==============
+
+ParmString is a special string class that is designed to be used as a
+parameter for a function that is expecting a string.  It is defined in
+`parm_string.hpp'.  It will allow either a `const char *' or `String'
+class to be passed in.  It will automatically convert to a `const char
+*'.  The string can also be accessed via the `str' method.  Usage
+example:
+
+void foo(ParmString s1, ParmString s2) {
+   const char * str0 = s1;
+   unsigned int size0 = s2.size()
+   if (s1 == s2 || s2 == "bar") {
+     ...
+   }
+}
+...
+String s1 = "...";
+foo(s1);
+const char * s2 = "...";
+foo(s2);
+
+   This class should be used when a string is being passed in as a
+parameter.  It is faster than using `const String &' (as that will
+create an unnecessary temporary when a `const char *' is passed in),
+and is less annoying than using `const char *' (as it doesn't require
+the `c_str()' method to be used when a `String' is passed in).
+
+7.3 CharVector
+==============
+
+A character vector is basically a `Vector<char>' but it has a few
+additional methods for dealing with strings which `Vector' does not
+provide.  It, like `String', is also inherits `OStream' so that you can
+write to it with the `<<' operator.  It is defined in
+`char_vector.hpp'.  Use it when ever you need a string which is
+guaranteed to be in a continuous block of memory which you can write to.
+
+\1f
+File: aspell-dev.info,  Node: Smart Pointers,  Next: I/O,  Prev: Strings,  Up: Top
+
+8 Smart Pointers
+****************
+
+Smart pointers are used extensively in Aspell to simplify memory
+management tasks and to avoid memory leaks.
+
+8.1 CopyPtr
+===========
+
+The `CopyPtr' class makes a deep copy of an object whenever it is
+copied.  The `CopyPtr' class is defined in `copy_ptr.hpp'.  This header
+should be included wherever `CopyPtr' is used.  The complete definition
+of the object `CopyPtr' is pointing to does not need to be defined at
+this point.  The implementation is defined in `copy_ptr-t.hpp'.  The
+implementation header file should be included at a point in your code
+where the class `CopyPtr' is pointing to is completely defined.
+
+8.2 ClonePtr
+============
+
+`ClonePtr' is like copy pointer except the `clone()' method is used
+instead of the copy constructor to make copies of an object.  If is
+defined in `clone_ptr.hpp' and implemented in `clone_ptr-t.hpp'.
+
+8.3 StackPtr
+============
+
+A `StackPtr' is designed to be used whenever the only pointer to a new
+object allocated with `new' is on the stack.  It is similar to the
+standard C++ `auto_ptr' but the semantics are a bit different.  It is
+defined in `stack_ptr.hpp' -- unlike `CopyPtr' or `ClonePtr' it is
+defined and implemented in this header file.
+
+8.4 GenericCopyPtr
+==================
+
+A generalized version of `CopyPtr' and `ClonePtr' which the two are
+based on.  It is defined in `generic_copy_ptr.hpp' and implemented in
+`generic_copy_ptr-t.hpp'.
+
+\1f
+File: aspell-dev.info,  Node: I/O,  Next: Config Class,  Prev: Smart Pointers,  Up: Top
+
+9 I/O
+*****
+
+Aspell does not use C++ I/O classes and functions in any way since they
+do not provide a way to get at the underlying file number and can often
+be slower than the highly tuned C I/O functions found in the standard C
+library.  However, some lightweight wrapper classes are provided so
+that standard C I/O can be used in a more C++ like way.
+
+9.1 IStream/OStream
+===================
+
+These two base classes mimic some of the functionally of the C++
+functionally of the corresponding classes.  They are defined in
+`istream.hpp' and `ostream.hpp' respectively.  They are however based
+on standard C I/O and are not proper C++ streams.
+
+9.2 FStream
+===========
+
+Defined in `fstream.hpp'.
+
+9.3 Standard Streams
+====================
+
+`CIN'/`COUT'/`CERR'.  Defined in `iostream.hpp'.
+
+\1f
+File: aspell-dev.info,  Node: Config Class,  Next: Filter Interface,  Prev: I/O,  Up: Top
+
+10 Config Class
+***************
+
+The `Config' class is used to hold configuration information.  It has a
+set of keys which it will accept.  Inserting or even trying to look at
+a key that it does not know will produce an error.  It is defined in
+`common/config.hpp'.
+
+\1f
+File: aspell-dev.info,  Node: Filter Interface,  Next: Filter Modes,  Prev: Config Class,  Up: Top
+
+11 Filter Interface
+*******************
+
+11.1 Overview
+=============
+
+In Aspell there are 5 types of filters:
+  1. _Decoders_ which take input in some standard format such as
+     iso8859-1 or UTF-8 and convert it into a string of `FilterChars'.
+
+  2. _Decoding filters_ which manipulate a string of `FilterChars' by
+     decoding the text is some way such as converting an SGML character
+     into its Unicode value.
+
+  3. _True filters_ which manipulate a string of `FilterChars' to make
+     it more suitable for spell checking.  These filters generally
+     blank out text which should not be spell checked
+
+  4. _Encoding filters_ which manipulate a string of `FilterChars' by
+     encoding the text in some way such as converting certain Unicode
+     characters to SGML characters.
+
+  5. _Encoders_ which take a string of `FilterChars' and convert into a
+     standard format such as iso8859-1 or UTF-8
+
+   Which types of filters are used depends on the situation
+  1. When _decoding words_ for spell checking:
+        * The _decoder_ to convert from a standard format
+
+        * The _decoding filter_ to perform high level decoding if
+          necessary
+
+        * The _encoder_ to convert into an internal format used by the
+          speller module
+
+  2. When _checking a document_
+        * The _decoder_ to convert from a standard format
+
+        * The _decoding filter_ to perform high level decoding if
+          necessary
+
+        * A _true filter_ to filter out parts of the document which
+          should not be spell checked
+
+        * The _encoder_ to convert into an internal format used by the
+          speller module
+
+  3. When _encoding words_ such as those returned for suggestions:
+        * The _decoder_ to convert from the internal format used by the
+          speller module
+
+        * The _encoding filter_ to perform high level encodings if
+          necessary
+
+        * The _encoder_ to convert into a standard format
+
+   A `FilterChar' is a struct defined in `common/filter_char.hpp' which
+contains two members, a character, and a width.  Its purpose is to keep
+track of the width of the character in the original format.  This is
+important because when a misspelled word is found the exact location of
+the word needs to be returned to the application so that it can
+highlight it for the user.  For example if the filters translated this:
+
+Mr. foo said &quot;I hate my namme&quot;.
+
+   to this
+
+Mr. foo said "I hate my namme".
+
+   without keeping track of the original width of the characters the
+application  will likely highlight `e my '  as the misspelling because
+the spell checker will return 25 as the offset  instead of 30.
+However with keeping track of the width using `FilterChar' the  spell
+checker  will know that the real position is 30 since the quote is
+really 6 characters  wide.   In particular the text will be annotated
+something like the following:
+
+1111111111111611111111111111161
+Mr. foo said "I hate my namme".
+
+   The standard _encoder_ and _decoder_ filters are defined in
+`common/convert.cpp'.  There should generally not be any need to deal
+with them so they will not be discussed here.  The other three filters,
+the _encoding filter_, the _true filter_, and the _decoding filter_,
+are all defined the exact same way; they are inherited from the
+`IndividualFilter' class.
+
+11.2 Adding a New Filter
+========================
+
+A new filter basically is added by placing the corresponding loadable
+object inside a directory reachable by Aspell via `filter-path' list.
+Further it is necessary that the corresponding filter description file
+is located in one of the directories listed by the `option-path' list.
+
+   The name of the loadable object has to conform to the following
+convention `libfiltername-filter.so' where `filtername' stands for the
+name of the filter which is passed to Aspell by the `add-filter'
+option.  The same applies to the filter description file which has to
+conform to the following naming scheme: `filtername-filter.opt'.
+
+   To add a new loadable filter object create a new file.
+
+   Basically the file should be a C++ file and end in `.cpp'.  The file
+should contain a new filter class inherited from `IndividualFilter' and
+a constructor function called `new_filtertype' (see *Note Constructor
+Function::) returning a new filter object.  Further it is necessary to
+manually generate the filter description file.  Finally the resulting
+object has to be turned into a loadable filter object using libtool.
+
+   Alternatively a new filter may extend the functionality of an
+existing filter. In this case the new filter has to be derived form the
+corresponding valid filter class instead of the `IndividualFilter'
+class.
+
+11.3 IndividualFilter class
+===========================
+
+All filters are required to inherit from the `IndividualFilter' class
+found in `indiv_filter.hpp'.  See that file for more details and the
+other filter modules for examples of how it is used.
+
+11.4 Constructor Function
+=========================
+
+After the class is created a function must be created which will return
+a new filter allocated with `new'.  The function must have the
+following prototype:
+     C_EXPORT IndividualFilter * new_aspell_FILTERNAME_FILTERTYPE
+
+   Filters are defined in groups where each group contains an _encoding
+filter_, a _true filter_, and a _decoding filter_ (see *Note Filter
+Overview::).  Only one of them is required to be defined, however they
+all need a separate constructor function.
+
+11.5 Filter Description File
+============================
+
+This file contains the description of a filter which is loaded by
+Aspell immediately when the `add-filter' option is invoked.  If this
+file is missing Aspell will complain about it.  It consists of lines
+containing comments which must be started by a `#' character and lines
+containing key value pairs describing the filter.  Each file at least
+has to contain the following two lines in the given order.
+
+     ASPELL >=0.60
+     DESCRIPTION this is short filter description
+
+   The first non blank, non comment line has to contain the keyword
+`ASPELL' followed by the version of Aspell which the filter is usable
+with.  To denote multiple Aspell versions the version number may be
+prefixed by ``<'', ``<='', ``='', ``>='' or ``>'.  If the range prefix
+is omitted ``='' is assumed.  The `DESCRIPTION' of the filter should be
+under 50, begin in lower case, and note include any trailing
+punctuation characters.  The keyword `DESCRIPTION' may be abbreviated
+by `DESC'.
+
+   For each filter feature (see *Note Filter Overview::) provided by the
+corresponding loadable object, the option file has to contain the
+following line:
+     STATIC `filtertype'
+   `filtertype' stands for one of `decoder', `filter' or `encoder'
+denoting the entire filter type.  This line allows to statically (see
+*Note Link Filters Static::) link the filter into Aspell if requested
+by the user or by the system Aspell is built for.
+
+     OPTION newoption
+     DESCRIPTION this is a short description of newoption
+     TYPE bool
+     DEFAULT false
+     ENDOPTION
+
+   An option is added by a line containing the keyword `OPTION'
+followed by the name of the option.  If this name is not prefixed by
+the name of the filter Aspell will implicitly do that.  For the
+`DESCRIPTION' of a filter option the same holds as for the filter
+description.  The `TYPE' of the option may be one of `bool', `int',
+`string' or `list'.  If the `TYPE' is omitted `bool' is assumed.  The
+default value(s) for an option is specified via `DEFAULT' (short `DEF')
+followed by the desired `TYPE' dependent default value.  The table
+*Note Filter Default Values:: shows the possible values for each `TYPE'.
+
+Type     Default   Available
+bool     true      true false
+int      0         any number value
+string             any printable string
+list               any comma separated list of strings
+
+   Table 1. Shows the default values Aspell assumes if option
+`description' lacks a `DEFAULT' or `DEF' line.
+
+   The `ENDOPTION' line may be omitted as it is assumed implicitly if a
+line containing `OPTION', `STATIC'.
+
+     *Note* The keywords in a filter description file are case
+     insensitive.  The above examples use the all uppercase for better
+     distinguishing them from values and comments.  Further a filter
+     description may contain blank lines to enhance their readability.
+
+     *Note* An option of `list' type may contain multiple consecutive
+     lines for default values starting with `DEFAULT' or `DEF', to
+     specify numerous default values.
+
+11.6 Retrieve Options by a Filter
+=================================
+
+An option always has to be retrieved by a filter using its full
+qualified name as the following example shows.
+
+     config->retrieve_bool("filter-filtername-newoption");
+
+   The prefix `filter-' allows user to relate option uniquely to the
+specific filter when `filtername-newoption' ambiguous an existing
+option of Aspell.  The `filtername' stands for the name of the filter
+the option belongs to and `-newoption' is the name of the option as
+specified in the corresponding `.opt' file (see *Note Filter
+Description File::
+
+11.7 Compiling and Linking
+==========================
+
+See a good book on Unix programming on how to turn the filter source
+into a loadable object.
+
+11.8 Programmer's Interface
+===========================
+
+A more convenient way recommended, if filter is added to Aspell
+standard distribution to build a new filter is provided by Aspell's
+programmers interface for filter.  It is provided by the
+`loadable-filter-API.hpp' file.  Including this file gives access to a
+collection of macros hiding nasty details about runtime construction of
+a filter and about filter debugging.  Table *Note Interface Macros::
+shows the macros provided by the interface.  For details upon the
+entire macros see `loadable-filter-API.hpp'.  An example on how to use
+these macros can be found at `examples/loadable/ccpp-context.hpp' and
+`examples/loadable/ccpp-context.cpp'.
+
+Macro              Type Description              Notes
+ACTIVATE_ENCODER   M    makes the entire         do not call inside
+                        encoding filter          class declaration;
+                        callable by Aspell       these macros define
+                                                 new_<filtertype>
+                                                 function;
+ACTIVATE_DECODER   M    makes the entire         _as above_
+                        decoding filter          
+                        callable by Aspell       
+ACTIVATE_FILTER    M    makes the entire filter  _as above_
+                        callable by Aspell       
+FDEBUGOPEN         D    Initialises the macros   These macros are only
+                        for debugging a filter   active if the
+                        and opens the debug      `FILTER_PROGRESS_CONTROL'
+                        file stream              macro is defined and
+                                                 denotes the name of the
+                                                 file debug messages
+                                                 should be sent to.
+                                                 
+                                                    If debugging should
+                                                 go to Aspell standard
+                                                 debugging output (right
+                                                 now stderr) use empty
+                                                 string constant as
+                                                 filename
+FDEBUGNOTOPEN      D    Same as "FDEBUGOPEN" but _as above_
+                        only if debug file       
+                        stream was not opened    
+                        yet                      
+FDEBUGCLOSE        D    closes the debugging     _as above_
+                        device opened by         
+                        "FDEBUGOPEN" and         
+                        reverts it to "stderr";  
+FDEBUG             D    prints the filename and  _as above_
+                        the line number it       
+                        occurs                   
+FDEBUGPRINTF       D    special printf for       _as above_
+                        debugging                
+
+   Table 2. Shows the macros provided by `loadable-filter-API.hpp' (*M*
+mandatory, *D* debugging)
+
+11.9 Adding a filter to Aspell standard distribution
+====================================================
+
+Any filter which one day should be added to Aspell has to be built
+using the developer interface, described in *Note Programmer's
+Interface::.  To add the filter the following steps have to be
+performed:
+
+  1. Decide whether the filter should be kept loadable if possible, or
+     always be statically linked to Aspell.
+
+  2.  Place the filter sources inside the entire directory of Aspell
+     source tree.  Right now use `$top_srcdir/modules/filter'.
+
+  3. Modify the `Makefile.am' file on the topmost directory of the
+     Aspell distribution.  Follow the instructions given by the
+     `#Filter Modules' section.
+
+  4. Run `autoconf', `automake', ...
+
+  5. Reconfigure sources.
+
+  6.  Clear away any remains of a previous build and rebuild sources.
+
+  7.  Reinstall Aspell.
+
+  8.  Test if filter has been added properly otherwise return to steps
+     2-7
+
+  9. Reconfigure sources with `enable-static' flag and repeat steps 2-7
+     until your filter builds and runs properly in case of static
+     linkage.
+
+ 10. Add your source files to cvs, and commit all your changes.  Or in
+     case you are not allowed to commit to cvs submit a patch (see
+     *Note How to Submit a Patch::) containing your changes.
+
+
+\1f
+File: aspell-dev.info,  Node: Filter Modes,  Next: Data Structures,  Prev: Filter Interface,  Up: Top
+
+12 Filter Modes
+***************
+
+Filter modes are the preferred way to specify combinations of filters
+which are used regularly and thus abbreviate Aspell's command line
+arguments.
+
+   A new filter mode is specified by a file named like the filter new
+mode and prefixed by `.amf' (Aspell Mode File). If such a file is
+accessible by the path set via filter-path option Aspell will try to
+load the contained mode specification.
+
+12.1 Aspell Mode File
+=====================
+
+The first key in the made file has be the `mode' key.  It is checked
+against the mode name part of the .amf file.  If the `mode' key is
+missing mode file will be rejected.
+
+   The same holds for the `aspell' key which specifies the version(s)
+of Aspell which is(are) required by the filter.
+
+   If these two keys are followed by at least one `magic' key Aspell
+will be able to select the entire mode from extension and if required
+from contents of the file to spell implicitly.
+
+   The last key of the required keys is the `des[c[ription]]' key. It
+gives a short description of the filter mode which will displayed when
+type `aspell help'.
+
+   The rest of the file consists of the keys `filter' and `option' to
+load filters are set various options.
+
+12.1.1 Version Line
+-------------------
+
+Each version line must start with `aspell' and be followed by a
+version, optionally prefixed by a relational operator. The relation
+operator can be one of `<', `<=', `=', `>=' or '>' for allowing Aspell
+version with version number being lower, lower or equal, equal to,
+greater or equal or greater than required version number, respectfully.
+If the relation operator is omitted `=' is assumed.
+
+12.1.2 Magic Line
+-----------------
+
+The magic line contains a description which requirements files have to
+fulfill in order to implicitly activate the entire mode at least one
+such line is required.  Each magic line has the following format:
+     MAGIC /<magic key>/<fileextention>[/<fileextention>]
+
+   The magic key consist of three `:' separated fields.  The first two
+are byte counts the last is a regular expression.  The first byte count
+indicates the first byte the regular expression will be applied to the
+second byte count indicates the number of bytes to test against the
+regular expression.
+
+   If mode selection should only occurred on basis of the listed file
+extensions the magic key should consist of the "<noregex>" special
+string.
+
+   At least one <fileextention> is required per MAGIC line.
+<fileextention> may not be empty and should not contain a leading `.'
+as this is assumed implicitly.
+
+   Multiple MAGIC lines are allowed. Modes may be extended limited by
+additional <label>.amf files located in -filter-path Thus file
+extensions may be prefixed by `+' or `-' to indicate that the entire
+extension has to be added ore removed from this <magic key> if neither
+is specified than a `+' is assumed implicitly.
+
+12.1.3 Description Line
+-----------------------
+
+The required description line will be printed when typing `aspell
+help'.  Keep it as short as possible.  Possible abbreviations are `des'
+and `desc'.
+
+12.1.4 Filter and Option Lines
+------------------------------
+
+The `filter' and `option' keys load filters and set filter options.
+
+   The value of the `filter' key is equal to the value of Aspell's
+`[add|rem]-filter' option.
+
+   Each `option' line has the following format:
+
+       OPTION <option> [<value>]
+
+   The format of the <option> and <value> is the same format as found
+in the Aspell configuration file.
+
+\1f
+File: aspell-dev.info,  Node: Data Structures,  Next: Mk-Src Script,  Prev: Filter Modes,  Up: Top
+
+13 Data Structures
+******************
+
+Whenever possible you should try to use one of the data structures
+available.  If the data structures do not provide enough functionality
+for your needs you should consider enhancing them rather than writing
+something from scratch.
+
+13.1 Vector
+===========
+
+The `vector' class is defined in `vector.hpp' and works the same way as
+the standard STL `vector' does except that it doesn't have as many
+constructors.
+
+13.2 BasicList
+==============
+
+`BasicList' is a simple list structure which can either be implemented
+as a singly or doubly linked list.  It is defined in `basic_list.hpp'.
+
+13.3 StringMap
+==============
+
+`StringMap' is a associative array for strings.  You should try to use
+this when ever possible to avoid code bloat.  It is defined in
+`string_map.hpp'.
+
+13.4 Hash Tables
+================
+
+Several hash tables are provided when `StringMap' is not appropriate.
+These hash tables provide a `hash_set', `hash_multiset', `hash_map' and
+`hash_multimap' which are very similar to SGI's STL implementation with
+a few exceptions.  It is defined in `hash.hpp'.
+
+13.5 BlockSList
+===============
+
+`BlockSList' provided a pool of nodes which can be used for singly
+linked lists.  It is defined in `block_slist.hpp'.
+
+\1f
+File: aspell-dev.info,  Node: Mk-Src Script,  Next: How It All Works,  Prev: Data Structures,  Up: Top
+
+14 Mk-Src Script
+****************
+
+A good deal of interface code is automatically generated by the
+`mk-src.pl' Perl script.  I am doing it this way to avoid having to
+write a lot of relative code for the C++ interface.  This should also
+make adding interface for other languages a lot less tedious and will
+allow the interface to automatically take advantage of new Aspell
+functionality as it is made available.  The `mk-src.pl' script uses
+`mk-src.in' as its input.
+
+14.1 mk-src.in
+==============
+
+NOTE: This section may not always be up to date since it is manually
+converted from the pod source.
+
+   The format of `mk-src.in' is as follows:
+
+
+    The following characters are literals: { } / '\ ' \n = >
+
+    <items>
+    <items> := (<item>\n)+
+    <items> := <category>:\ <name> {\n<details>\n} | <<tab>><details>
+    <details> := <options>\n /\n <items>
+    <options> := (<option>\n)*
+    <option> := <key> [=> <value>]
+
+    <<tab>> means everything should be indented by one tab
+
+   See MkSrc::Info for a description of the categories and options
+
+14.2 MkSrc::Info
+================
+
+`%info'
+
+   The info array contains information on how to process the info in
+`mk-src.pl'. It has the following layout
+
+
+    <catagory> => options => []
+                  groups => [] # if undef than anything is accepted
+                  creates_type => "" # the object will create a new type
+                                     # as specified
+                  proc => <impl type> => sub {}
+     where <impl type> is one of:
+
+    cc: for "aspell.h" header file
+    cxx: for C++ interface implemented on top of cc interface
+    native: for creation of header files used internally by aspell
+    impl: for defination of functions declared in cc interface.
+          the definations use the native hedaer files
+    native_impl: for implementations of stuff declared in the native
+                  header files
+     each proc sub should take the following argv
+
+    $data: a subtree of $master_data
+    $accum:
+     <options> is one of:
+
+    desc: description of the object
+    prefix:
+    posib err: the method may return an error condition
+    c func:
+    const: the method is a const member
+    c only: only include in the external interface
+    c impl headers: extra headers that need to be included in the C impl
+    c impl: use this as the c impl instead of the default
+    cxx impl: use this as the cxx impl instead of the default
+    returns alt type: the constructor returns some type other than
+      the object from which it is a member of
+    no native: do not attemt to create a native implementation
+    treat as object: treat as a object rather than a pointer
+     The `%info' structure is initialized as follows:
+
+    our %info =
+    (
+     root => {
+       options => [],
+       groups => ['methods', 'group']},
+     methods => {
+       # methods is a collection of methods which will be inserted into
+       # a class after some simple substation rules.  A $ will be
+       # replaced with name of the class.
+       options => ['strip', 'prefix', 'c impl headers'],
+       groups => undef},
+     group => {
+       # a group is a colection of objects which should be grouped together
+       # this generally means they will be in the same source file
+       options => ['no native'],
+       groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
+     enum => {
+       # basic C enum
+       options => ['desc', 'prefix'],
+       creates_type => 'enum'},
+     struct => {
+       # basic c struct
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'struct',},
+     union => {
+       # basic C union
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'union'},
+     class => {
+       # C++ class
+       options => ['c impl headers'],
+       groups => undef,
+       creates_type => 'class'},
+     errors => {}, # possible errors
+     method => {
+       # A class method
+       options => ['desc', 'posib err', 'c func', 'const',
+                   'c only', 'c impl', 'cxx impl'],
+       groups => undef},
+     constructor => {
+       # A class constructor
+       options => ['returns alt type', 'c impl', 'desc'],
+       groups => 'types'},
+     destructor => {
+       # A class destructor
+       options => [],
+       groups => undef},
+     );
+     In addition to the categories listed above a "methods" category by
+be     specified in under the class category. A "methods" category is
+created     for each methods group under the name "<methods name>
+methods". When     groups is undefined a type name may be specified in
+place of a category.
+
+   `%types'
+
+   types contains a master list of all types. This includes basic types
+and     ones created in `mk-src.in'. The basic types include:
+
+    'void', 'bool', 'pointer', 'double',
+    'string', 'encoded string', 'string obj',
+    'char', 'unsigned char',
+    'short', 'unsigned short',
+    'int', 'unsigned int',
+    'long', 'unsigned long'
+   %methods
+
+   `%methods' is used for holding the "methods" information
+
+14.3 MkSrc::Util
+================
+
+This module contains various useful utility functions:
+`false'
+     Returns 0.
+
+`true'
+     Returns 1.
+
+`cmap EXPR LIST'
+     Apply EXPR to each item in LIST and than concatenate the result
+     into         a string
+
+`one_of STR LIST'
+     Returns true if LIST contains at least one of STR.
+
+`to_upper STR'
+     Convert STR to all uppercase and substitute spaces with
+     underscores.
+
+`to_lower STR'
+     Convert STR to all lowercase and substitute spaces with
+     underscores.
+
+`to_mixed STR'
+     Convert STR to mixed case where each new word startes with a
+      uppercase letter. For example "feed me" would become "FeedMe".
+
+14.4 MkSrc::Read
+================
+
+`read'         Read in `mk-src.in' and return a data structure which
+has the         following format:
+
+      <tree>
+      <tree> := <options>
+                data => <tree>
+    where each tree represents an entry in mk-src.in.
+    The following two options are always provided:
+      name: the name of the entry
+      type: the catagory or type name
+    Additional options are the same as specified in %info
+
+14.5 MKSrc::Create
+==================
+
+`create_cc_file PARMS'
+     Create a source file.
+               Required Parms: type, dir, name, data
+               Boolean Parms:  header, cxx
+               Optional Parms: namespace (required if cxx), pre_ext,
+                               accum
+
+`create_file FILENAME DATA'
+     Writes DATA to FILENAME but only if DATA differs from the content
+     of         the file and the string:
+               Automatically generated file.
+
+     is present in the existing file if it already exists.
+
+14.6 Code Generation Modes
+==========================
+
+The code generation modes are currently one of the following:
+          cc:     Mode used to create types suitable for C interface
+          cc_cxx: Like cc but typenames don't have a leading Aspell prefix
+          cxx:    Mode used to create types suitable for CXX interface
+          native: Mode in which types are suitable for the internal
+                  implementation
+          native_no_err: Like Native but with out PosibErr return types
+
+14.7 MkSrc::CcHelper
+====================
+
+Helper functions used by interface generation code:
+         to_c_return_type ITEM
+             .
+
+         c_error_cond ITEM
+             .
+
+`make_func NAME @TYPES PARMS ; %ACCUM'
+     Creates a function prototype
+
+     Parms can be any of:
+                    mode: code generation mode
+
+`call_func NAME @TYPES PARMS ; %ACCUM'
+     Return a string to call a func. Will prefix the function with
+     return         if the functions returns a non-void type;
+
+     Parms can be any of:
+                    mode: code generation mode
+
+`to_type_name ITEM PARMS ; %ACCUM'
+     Converts item into a type name.
+
+     Parms can be any of:
+               mode: code generation mode
+               use_type: include the actual type
+               use_name: include the name on the type
+               pos: either "return" or "other"
+
+`make_desc DESC ; LEVEL'
+     Make a C comment out of DESC optionally indenting it LEVEL spaces.
+
+`make_c_method CLASS ITEM PARMS ; %ACCUM'
+     Create the phototype for a C method which is really a function.
+
+     Parms is any of:
+               mode:      code generation mode
+               no_aspell: if true do not include aspell in the name
+               this_name: name for the parameter representing the
+                          current object
+
+`call_c_method CLASS ITEM PARMS ; %ACCUM'
+     Like make_c_method but instead returns the appropriate string to
+          call the function. If the function returns a non-void type
+     the         string will be prefixed with a return statement.
+
+`form_c_method CLASS ITEM PARMS ; %ACCUM'
+     Like make_c_method except that it returns the array:
+               ($func, $data, $parms, $accum)
+
+     which is suitable for passing into make_func. It will return an
+         empty array if it can not make a method from ITEM.
+
+`make_cxx_method ITEM PARMS ; %ACCUM'
+     Create the phototype for a C++ method.
+
+     Parms is one of:
+               mode: code generation mode
+
+\1f
+File: aspell-dev.info,  Node: How It All Works,  Next: Part 1 - Compiled Dictionary Format,  Prev: Mk-Src Script,  Up: Top
+
+15 How It All Works
+*******************
+
+The details of how Aspell really works is a mystery to most users who
+want to participate in developing and improving Aspell, so it is best
+to fully explain Aspell's core algorithms and data structures to you.
+
+   In explaining these, it is hoped to bring prospective developers up
+to speed more quickly and also help you understand the amount of thought
+put into this.  In time, you may be able to improve Aspell even more.
+
+   There are many details to explain here, so these will need explaining
+in small segments.
+
+* Menu:
+
+* Part 1 - Compiled Dictionary Format::
+* Part 2 - Quickly Finding Similar Soundslike::
+* Part 3::
+
+\1f
+File: aspell-dev.info,  Node: Part 1 - Compiled Dictionary Format,  Next: Part 2 - Quickly Finding Similar Soundslike,  Prev: How It All Works,  Up: How It All Works
+
+15.1 Part 1 - The Compiled Dictionary Format
+============================================
+
+In this part you will see how the data is laid out in the compiled
+dictionary for Aspell 0.60.  See source file `readonly_ws.cpp'.
+
+   Aspell's main compiled wordlist dictionary file is made as follows:
+
+   * header
+
+   * jump table for editdist 1
+
+   * jump table for editdist 2
+
+   * data block
+
+   * hash table
+
+   There is nothing particularly interesting about the header.  Just a
+bunch of meta information.
+
+   The jump tables are described in the next section ...
+
+   Words in the data block are grouped based on the soundslike.  Each
+group is as follows:
+
+     <8 bit: offset to next item><8 bit: soundslike size><soundslike>
+     <null><words>
+
+Each word group is as follows:
+
+     <8 bit: flags><8 bit: offset to next word><8 bit: word size><word><null>
+     [<affix info><null>]
+
+   The offset for the final word in each group points to the next word
+in the following group.  The offset for the final word and soundslike
+group in the dictionary is 0.
+
+   There is some provisions for additional info to be stored with the
+word but for simplicity, it's left out here.  If soundslike data is not
+used then the soundslike block it not used.
+
+   This format makes it easy to iterate over the data without using the
+hash table.
+
+   Each soundslike group can be a maximum of about 256 bytes.  If this
+limit is reached then the soundslike group is split. Using 2 bytes for
+the soundslike offset would of solved this problem however 256 bytes is
+normally sufficient, thus I would of wasted some space by using an
+extra byte.  More importantly, Using 2 bytes means I would of had to
+worry about alignment issues.
+
+   The soundslike groups are sorted in more or less alphabetic order.
+
+   The hash table is a simple open address hash table.  The key is the
+dictionary word in all lowercase form with all accents removed (what is
+known as the "clean" form of the word).  The value stored in the table
+is a 32-bit offset to the beginning of the word.  A 32-bit integer
+offset is used rather than a pointer so that the compiled dictionary
+can be mmaped to make loading the dictionary very fast and so that the
+memory can be shared between processed, and on 64 bit platforms using
+pointers would have doubled the size of the hash table.
+
+   Additional information for each word can be derived from each offset:
+
+     word size: offset - 1
+     offset to next word: offset - 2
+     flags: offset - 3
+
+   I use helper functions for getting this information.  Doing it this
+way rather than having a data structure is slightly evil, but
+admittedly, I have my reasons.
+
+   In the next section, you will see how Aspell uses the jump tables to
+search the list for _soundslike_ with _edit-distance_ of 1 or 2.
+
+\1f
+File: aspell-dev.info,  Node: Part 2 - Quickly Finding Similar Soundslike,  Next: Part 3,  Prev: Part 1 - Compiled Dictionary Format,  Up: How It All Works
+
+15.2 Part 2 - Quickly Finding Similar Soundslike
+================================================
+
+In order for Aspell to find suggestions for a misspelled word Aspell 1)
+creates a list of candidate words, 2) scores them, and 3) returns the
+most likely candidates.  One of the ways Aspell finds candidate words
+is to look for all words with a soundslike which is of a small edit
+distance from the soundslike of the original word.  The edit distance
+is the total number of deletions, insertions, exchanges, or adjacent
+swaps needed to make one string equivalent to the other. The exact
+distance chosen is either 1 or 2 depending on a number of factors.  In
+this part I will focus on how Aspell find all such soundslike
+efficiently and how the jump tables play a key role.
+
+   This section will focus on how Aspell finds all such soundslike
+efficiently and how the jump tables play a key role.
+
+   The naive way to scan the list for all possible soundslike is to
+compute the edit-distance of every soundslike in the dictionary and
+then keep the ones within the threshold.  This is exactly what Aspell
+did prior to 0.60. before a faster method was created.  When a fast
+enough edit distance function is used this method turns out not to be
+unbearably slow, at least for English, but for other languages, with
+large word lists and no soundslike, this can be slow due to the number
+of items that need to be scanned.
+
+   Aspell uses a special edit distance function which gives up if the
+distance is larger than the threshold, thus making it very fast.  The
+basic algorithm is as follows:
+
+     limit_edit_distance(A,B,limit) = ed(A,B,0)
+       where ed(A,B,d) = d                              if A & B is empty.
+                       = infinity                       if d > limit
+                       = ed(A[2..],B[2..], d)           if A[1] == B[1]
+                       = min ( ed(A[2..],B[2..], d+1),
+                               ed(A,     B[2..], d+1),
+                               ed(A[2..],B,      d+1) ) otherwise
+
+   However the algorithm used also allows for swaps and is not
+recursive.  Specialized versions are provided for an edit distance of
+one and two.  The running time is asymptotically bounded above by
+`(3^l)*n' where `l' is the limit and `n' is the maximum of
+`strlen(A),strlen(B)'.  Based on informal tests, the `n' does not
+really matter and the running time is more like `(3^l)'.
+
+   For complete details on this algorithm see the files `leditdist.hpp'
+and `leditdist.cpp' in the source distribution under
+`modules/speller/default'.
+
+   So, by exploiting the properties of `limit_edit_distance' it is
+possible to avoid having to look at many of the soundslikes in the
+dictionary.  `Limit_edit_distance' is efficient because in many cases,
+it does not have to look at the entire word before it can determine
+that it isn't within the given threshold, and then by having it return
+the last position looked at, _p_, it is possible to avoid having to
+look at similar soundslike which are not within the threshold.  That
+is, if two soundslike are the same up to the position `p', then neither
+of them are within the given threshold.
+
+   Aspell 0.60 exploits this property by using jump tables.  Each entry
+in the jump table contains two fields: the first `N' letters of a
+soundslike, and an offset.  The entries are sorted in lexicographic
+order based on the raw byte value.  Aspell maintains two jump tables.
+
+   The first table contains the first 2 letters of a soundslike and the
+offset points into the second jump table.
+
+   The second table contains the first 3 letters of a soundslike where
+the offset points to the location of the soundslike in the data block.
+The soundslike in the datablock are sorted so that a linear scan can be
+used to find all soundslike with the same prefix.  If the
+`limit_edit_distance' stops before reaching the end of a _"soundslike"_
+in one of the jump tables then it is possible to skip all the
+soundslike in the data block with the same prefix.
+
+   Thus, the scan for all _soundslike_ within a given edit distance
+goes something like this:
+
+  1. Compare the entry in the first jump table using
+     `limit_edit_distance'.  If the `limit_edit_distance' scanned
+     passed the end of the word, then go to the first entry in the
+     second jump table with the same prefix, otherwise go to the next
+     entry in the first jump table and repeat.
+
+  2. Compare the entry in the second jump table.  If the
+     `limit_edit_distance'  passed the end of the word, then go to the
+     first _soundslike_ in the data block with this prefix, otherwise
+     if the first two letters of the next entry are the same as the
+     current one go to it and repeat.  If the first two letters are not
+     the same then go to the next entry in the first jump table and
+     repeat step 1.
+
+  3. Compare the _soundslike_ in the data block.  If the edit distance
+     is within the target distance, then add the word to the candidate
+     list, otherwise don't.  Let `N' be the position where
+     `limit_edit_distance' stopped, (starting at 0).  If `N' is less
+     than 6, then skip over any soundslike that have the same first `N
+     + 1' letters.  If after skipping over any similar _soundslike_ the
+     next _soundslike_ does not have the same first three letters, then
+     go to the next entry in the second jump table and repeat step 2,
+     otherwise repeat this step with the next _soundslike_.
+
+
+   The part of skipping over _soundslike_ with the first `N + 1'
+letters in step 3 were added in Aspell 0.60.3.  The function
+responsible for most of this is found in function
+`ReadOnlyDict::SoundslikeElements::next' which is found in file
+`readonly_ws.cpp'.
+
+   The next part will describe how Aspell deals with _soundslike_
+lookup when affix compression is involved.
+
+\1f
+File: aspell-dev.info,  Node: Part 3,  Next: Copying,  Prev: Part 2 - Quickly Finding Similar Soundslike,  Up: How It All Works
+
+15.3 Part 3
+===========
+
+Not written yet.
+
+\1f
+File: aspell-dev.info,  Node: Copying,  Prev: Part 3,  Up: Top
+
+Appendix A Copying
+******************
+
+Copyright (C) 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+* Menu:
+
+* GNU Free Documentation License::
+
+\1f
+File: aspell-dev.info,  Node: GNU Free Documentation License,  Up: Copying
+
+A.1 GNU Free Documentation License
+==================================
+
+                      Version 1.2, November 2002
+
+     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided for under this License.  Any other
+     attempt to copy, modify, sublicense or distribute the Document is
+     void, and will automatically terminate your rights under this
+     License.  However, parties who have received copies, or rights,
+     from you under this License will not have their licenses
+     terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.
+
+A.1.1 ADDENDUM: How to use this License for your documents
+----------------------------------------------------------
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.2
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+\1f
+Local Variables:
+coding: iso-8859-1
+End:
+
+\1f
+Tag Table:
+Node: Top\7f712
+Node: Style Guidelines\7f1370
+Node: How to Submit a Patch\7f2114
+Node: C++ Standard Library\7f2785
+Node: Templates\7f3341
+Node: Error Handling\7f3698
+Node: Source Code Layout\7f4854
+Node: Strings\7f5921
+Node: Smart Pointers\7f7653
+Node: I/O\7f9174
+Node: Config Class\7f10055
+Node: Filter Interface\7f10415
+Ref: Filter Overview\7f10587
+Ref: Constructor Function\7f15524
+Ref: Filter Description File\7f16060
+Ref: Filter Default Values\7f18209
+Ref: Programmer's Interface\7f19871
+Ref: Recommended Standard Aspell\7f19871
+Ref: Interface Macros\7f22914
+Ref: Link Filters Static\7f23022
+Ref: Place Sources\7f23348
+Ref: Build Sources\7f23710
+Ref: Reinstall Aspell\7f23781
+Ref: Test Filter Installed\7f23806
+Node: Filter Modes\7f24236
+Node: Data Structures\7f27848
+Node: Mk-Src Script\7f29209
+Node: How It All Works\7f38538
+Node: Part 1 - Compiled Dictionary Format\7f39333
+Node: Part 2 - Quickly Finding Similar Soundslike\7f42293
+Node: Part 3\7f48269
+Node: Copying\7f48443
+Node: GNU Free Documentation License\7f49019
+\1f
+End Tag Table
diff --git a/manual/aspell-dev.texi b/manual/aspell-dev.texi
new file mode 100644 (file)
index 0000000..00f0fd4
--- /dev/null
@@ -0,0 +1,1103 @@
+\input texinfo   @c -*-texinfo-*-
+
+@setfilename aspell-dev.info
+@settitle Aspell Developer's Manual
+@setchapternewpage off
+@syncodeindex pg cp
+@documentencoding ISO-8859-1
+@documentdescription
+Aspell spell checker developer's manual.
+@end documentdescription
+
+@copying
+This is the developer's manual for Aspell.
+
+Copyright @copyright{} 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+@end quotation
+@end copying
+
+@dircategory GNU Packages
+@direntry
+* Aspell-dev: (aspell-dev).        For Aspell developers
+@end direntry
+
+@titlepage
+@title Aspell Developer's Manual
+@author Kevin Atkinson (@email{kevina@@gnu.org})
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top, Style Guidelines, (dir), (dir)
+@top Notes
+This manual is designed for those who wish to develop Aspell.  It is
+currently very sketchy.  However, it should improve over time.  The
+latest version of this document can be found at
+@uref{http://savannah.gnu.org/download/aspell/manual/devel/devel.html}.
+
+@menu
+* Style Guidelines::            
+* How to Submit a Patch::       
+* C++ Standard Library::        
+* Templates::                   
+* Error Handling::              
+* Source Code Layout ::         
+* Strings::                     
+* Smart Pointers::              
+* I/O::                         
+* Config Class::                
+* Filter Interface::            
+* Filter Modes::            
+* Data Structures::             
+* Mk-Src Script::               
+* How It All Works::
+* Copying::
+@end menu
+
+@end ifnottex
+
+@node Style Guidelines, How to Submit a Patch, Top, Top
+@chapter Style Guidelines
+
+* Style Guidelines::            
+* How to Submit a Patch::            
+* C++ Standard Library::        
+* Templates::                   
+* Error Handling::              
+* Source Code Layout ::         
+* Strings::
+* Smart Pointers::              
+* I/O::                         
+* Config Class::                
+* Filter Interface::            
+* Filter Modes::            
+* Data Structures::             
+* Mk-Src Script::               
+* How It All Works::
+* Copying::
+
+As far as coding styles go I am really not that picky.  The important
+thing is to stay consistent.  However, please whatever you do, do not
+indent with more than 4 characters as I find indenting with more than
+that extremely difficult to read as most of the code ends up on the
+right side of the screen.
+
+@node How to Submit a Patch, C++ Standard Library, Style Guidelines, Top
+@chapter How to Submit a Patch
+
+Bug reports and patches should be submitted via the Sourceforge Tracker
+at @uref{http://sourceforge.net/@/tracker/?group_id=245} rather than
+being posted to any of the mailing lists.
+
+The mailing lists are good if you need to check something out or need
+help or feedback from other readers, but they are not the best place to
+submit bugs or patches because they will likely get forgotten or lost
+within the mailing list traffic if not acted upon immediately.
+
+Please make the effort to use the tracker.
+
+@node C++ Standard Library, Templates, How to Submit a Patch, Top
+@chapter C++ Standard Library
+
+The C++ Standard library is not used directly except under very
+specific circumstances.  The string class and the STL are used
+indirectly through wrapper classes and all I/O is done using the
+standard C library with light right helper classes to make using C I/O
+a bit more C++ like.
+
+However the @code{new}, @code{new[]}, @code{delete} and
+@code{delete[]} operators are used to allocate memory when
+appropriate.
+
+@node Templates, Error Handling, C++ Standard Library, Top
+@chapter Templates
+
+Templates are used in Aspell when there is a clear advantage to doing
+so.  Whenever you use templates please use them carefully and try very
+hard not to create code bloat by generating a lot of unnecessary and
+duplicate code.
+
+@node Error Handling, Source Code Layout , Templates, Top
+@chapter Error Handling
+
+Exceptions are not used in Aspell as I find them more trouble than
+they are worth.  Instead an alternate method of error handling is used
+which is based around the PosibErr class.  PosibErr is a special Error
+handling device that will make sure that an error is properly handled.
+It is defined in @code{posib_err.hpp}.  PosibErr is expected to be
+used as the return type of the function. It will automatically be
+converted to the "normal" return type however if the normal returned
+type is accessed and there is an "unhandled" error condition it will
+abort. It will also abort if the object is destroyed with an
+"unhandled" error condition.  This includes ignoring the return type
+of a function returning an error condition.  An error condition is
+handled by simply checking for the presence of an error, calling
+ignore, or taking ownership of the error.
+
+The PosibErr class is used extensively throughout Aspell.  Please
+refer to the Aspell source for examples of using PosibErr until better
+documentation is written.
+
+@node Source Code Layout , Strings, Error Handling, Top
+@chapter Source Code Layout 
+
+@table @file
+@item common/
+ Common code used by all parts of Aspell.
+
+@item lib/
+ Library code used only by the actual Aspell library.
+
+@item data/
+ Data files used by Aspell.
+
+@item modules/
+ Aspell modules which are eventually meant to be pluggable.
+
+@table @file
+  @item speller/ 
+  @table @file
+    @item default/
+      Main speller Module.
+  @end table
+
+  @item filter/ 
+
+  @item tokenizer/
+@end table
+
+@item auto/
+Scripts and data files to automatically generate code used by Aspell.
+
+@item interface/
+Header files and such that external programs should use when in order
+to use the Aspell library.
+@table @file
+
+@item cc/
+The external C interface that programs should be using when they wish
+to use Aspell.
+@end table
+
+@item prog/
+Actual programs based on the Aspell library. The main Aspell utility
+is included here.
+
+@item scripts/
+Miscellaneous scripts used by Aspell.
+
+@item manual/
+
+@item examples/
+Example programs demonstrating the use of the Aspell library.
+@end table
+
+
+@node  Strings, Smart Pointers, Source Code Layout , Top
+@chapter Strings
+
+@section String
+
+The @code{String} class provided the same functionality of the C++
+string except for fewer constructors.  It also inherits @code{OStream}
+so that you can write to it with the @code{<<} operator.  It is
+defined in @code{string.hpp}.
+
+@section ParmString
+
+ParmString is a special string class that is designed to be used as a
+parameter for a function that is expecting a string.  It is defined in
+@code{parm_string.hpp}.  It will allow either a @code{const char *} or
+@code{String} class to be passed in.  It will automatically convert to
+a @code{const char *}.  The string can also be accessed via the
+@code{str} method.  Usage example:
+@verbatim
+void foo(ParmString s1, ParmString s2) {
+   const char * str0 = s1;
+   unsigned int size0 = s2.size()
+   if (s1 == s2 || s2 == "bar") {
+     ...
+   }
+}
+...
+String s1 = "...";
+foo(s1);
+const char * s2 = "...";
+foo(s2);
+@end verbatim
+
+This class should be used when a string is being passed in as a
+parameter.  It is faster than using @code{const String &} (as that
+will create an unnecessary temporary when a @code{const char *} is
+passed in), and is less annoying than using @code{const char *} (as it
+doesn't require the @code{c_str()} method to be used when a
+@code{String} is passed in).
+
+@section CharVector
+
+A character vector is basically a @code{Vector<char>} but it has a few
+additional methods for dealing with strings which @code{Vector} does
+not provide.  It, like @code{String}, is also inherits @code{OStream}
+so that you can write to it with the @code{<<} operator.  It is
+defined in @code{char_vector.hpp}.  Use it when ever you need a string
+which is guaranteed to be in a continuous block of memory which you
+can write to.
+
+@node Smart Pointers, I/O, Strings, Top
+@chapter Smart Pointers
+
+Smart pointers are used extensively in Aspell to
+simplify memory management tasks and to avoid memory leaks. 
+
+@section CopyPtr
+
+The @code{CopyPtr} class makes a deep copy of an object whenever it is
+copied.  The @code{CopyPtr} class is defined in @file{copy_ptr.hpp}.
+This header should be included wherever @code{CopyPtr} is used.  The
+complete definition of the object @code{CopyPtr} is pointing to does
+not need to be defined at this point.  The implementation is defined
+in @file{copy_ptr-t.hpp}.  The implementation header file should be
+included at a point in your code where the class @code{CopyPtr} is
+pointing to is completely defined.
+
+@section ClonePtr
+
+@code{ClonePtr} is like copy pointer except the @code{clone()} method
+is used instead of the copy constructor to make copies of an object.
+If is defined in @file{clone_ptr.hpp} and implemented in
+@file{clone_ptr-t.hpp}.
+
+@section StackPtr
+
+A @code{StackPtr} is designed to be used whenever the only pointer to
+a new object allocated with @command{new} is on the stack.  It is
+similar to the standard C++ @code{auto_ptr} but the semantics are a
+bit different.  It is defined in @file{stack_ptr.hpp} --- unlike
+@code{CopyPtr} or @code{ClonePtr} it is defined and implemented in
+this header file.
+
+@section GenericCopyPtr
+
+A generalized version of @code{CopyPtr} and @code{ClonePtr} which the
+two are based on.  It is defined in @file{generic_copy_ptr.hpp} and
+implemented in @file{generic_copy_ptr-t.hpp}.
+
+@node I/O, Config Class, Smart Pointers, Top
+@chapter I/O
+
+Aspell does not use C++ I/O classes and functions in any way since
+they do not provide a way to get at the underlying file number and can
+often be slower than the highly tuned C I/O functions found in the
+standard C library.  However, some lightweight wrapper classes are
+provided so that standard C I/O can be used in a more C++ like way.
+
+@section IStream/OStream
+
+These two base classes mimic some of the functionally of the C++
+functionally of the corresponding classes.  They are defined in
+@file{istream.hpp} and @file{ostream.hpp} respectively.  They are
+however based on standard C I/O and are not proper C++ streams.
+
+@section FStream
+
+Defined in @file{fstream.hpp}.
+
+
+@section Standard Streams
+
+@code{CIN}/@code{COUT}/@code{CERR}.  Defined in @file{iostream.hpp}.
+
+@node Config Class, Filter Interface, I/O, Top
+@chapter Config Class
+
+The @code{Config} class is used to hold configuration information.  It
+has a set of keys which it will accept.  Inserting or even trying to
+look at a key that it does not know will produce an error.  It is
+defined in @file{common/config.hpp}.
+
+
+@node Filter Interface, Filter Modes, Config Class, Top
+@chapter Filter Interface
+
+@section Overview
+@anchor{Filter Overview}
+
+In Aspell there are 5 types of filters:
+@enumerate
+@item
+@emph{Decoders} which take input in some standard format such as
+iso8859-1 or UTF-8 and convert it into a string of @code{FilterChars}.
+@item
+@emph{Decoding filters} which manipulate a string of
+@code{FilterChars} by decoding the text is some way such as converting
+an SGML character into its Unicode value.
+@item
+@emph{True filters} which manipulate a string of @code{FilterChars} to
+make it more suitable for spell checking.  These filters generally
+blank out text which should not be spell checked
+@item
+@emph{Encoding filters} which manipulate a string of
+@code{FilterChars} by encoding the text in some way such as converting
+certain Unicode characters to SGML characters.
+@item
+@emph{Encoders} which take a string of @code{FilterChars} and convert
+into a standard format such as iso8859-1 or UTF-8
+@end enumerate
+
+Which types of filters are used depends on the situation
+@enumerate
+@item
+When @emph{decoding words} for spell checking:
+@itemize @bullet
+@item
+The @emph{decoder} to convert from a standard format
+@item
+The @emph{decoding filter} to perform high level decoding if necessary
+@item
+The @emph{encoder} to convert into an internal format used by the
+speller module
+@end itemize
+
+@item
+When @emph{checking a document}
+@itemize @bullet
+@item
+The @emph{decoder} to convert from a standard format
+@item
+The @emph{decoding filter} to perform high level decoding if necessary
+@item
+A @emph{true filter} to filter out parts of the document which should
+not be spell checked
+@item
+The @emph{encoder} to convert into an internal format used by the
+speller module
+@end itemize
+
+@item
+When @emph{encoding words} such as those returned for suggestions:
+@itemize @bullet
+@item
+The @emph{decoder} to convert from the internal format used by the
+speller module
+@item
+The @emph{encoding filter} to perform high level encodings if
+necessary
+@item
+The @emph{encoder} to convert into a standard format
+@end itemize
+@end enumerate
+
+
+A @code{FilterChar} is a struct defined in
+@file{common/filter_char.hpp} which contains two members, a character,
+and a width.  Its purpose is to keep track of the width of the
+character in the original format.  This is important because when a
+misspelled word is found the exact location of the word needs to be
+returned to the application so that it can highlight it for the user.
+For example if the filters translated this:
+@verbatim
+Mr. foo said &quot;I hate my namme&quot;.
+@end verbatim
+
+to this
+@verbatim
+Mr. foo said "I hate my namme".
+@end verbatim
+
+without keeping track of the original width of the characters the application
+ will likely highlight 
+@code{e my }
+ as the misspelling because the spell checker will return 25 as the offset
+ instead of 30.
+ However with keeping track of the width using @code{FilterChar} the
+ spell checker 
+ will know that the real position is 30 since the quote is really 6 characters
+ wide.
+ In particular the text will be annotated something like the following:
+@verbatim
+1111111111111611111111111111161
+Mr. foo said "I hate my namme".
+@end verbatim
+
+The standard @emph{encoder} and @emph{decoder} filters are defined in
+@file{common/convert.cpp}.  There should generally not be any need to
+deal with them so they will not be discussed here.  The other three
+filters, the @emph{encoding filter}, the @emph{true filter}, and the
+@emph{decoding filter}, are all defined the exact same way; they are
+inherited from the @code{IndividualFilter} class.
+
+@section Adding a New Filter
+
+A new filter basically is added by placing the corresponding loadable
+object inside a directory reachable by Aspell via @option{filter-path}
+list.  Further it is necessary that the corresponding filter
+description file is located in one of the directories listed by the
+@option{option-path} list.
+
+The name of the loadable object has to conform to the following
+convention @file{lib@i{filtername}-filter.so} where
+@code{@i{filtername}} stands for the name of the filter which is
+passed to Aspell by the @option{add-filter} option.  The same applies
+to the filter description file which has to conform to the following
+naming scheme: @file{@i{filtername}-filter.opt}.
+
+To add a new loadable filter object create a new file.
+
+Basically the file should be a C++ file and end in @file{.cpp}.  The
+file should contain a new filter class inherited from
+@code{IndividualFilter} and a constructor function called
+@file{new_@i{filtertype}} (see @ref{Constructor Function}) returning a
+new filter object.  Further it is necessary to manually generate the
+filter description file.  Finally the resulting object has to be
+turned into a loadable filter object using libtool.
+
+Alternatively a new filter may extend the functionality of an existing
+filter. In this case the new filter has to be derived form the 
+corresponding valid filter class instead of the @code{IndividualFilter}
+class.
+
+@section IndividualFilter class
+
+All filters are required to inherit from the @code{IndividualFilter}
+class found in @file{indiv_filter.hpp}.  See that file for more
+details and the other filter modules for examples of how it is used.
+
+@section Constructor Function
+@anchor{Constructor Function}
+
+After the class is created a function must be created which will
+return a new filter allocated with @code{new}.  The function must have
+the following prototype:
+@example
+C_EXPORT IndividualFilter * new_aspell_@var{filtername}_@var{filtertype}
+@end example
+
+Filters are defined in groups where each group contains an
+@emph{encoding filter}, a @emph{true filter}, and a @emph{decoding
+filter} (see @ref{Filter Overview}).  Only one of them is required to
+be defined, however they all need a separate constructor function.
+
+@section Filter Description File
+@anchor{Filter Description File}
+
+This file contains the description of a filter which is loaded by
+Aspell immediately when the @option{add-filter} option is invoked.  If
+this file is missing Aspell will complain about it.  It consists of
+lines containing comments which must be started by a @kbd{#}
+character and lines containing key value pairs describing the filter.
+Each file at least has to contain the following two lines in the given
+order.
+@example
+ASPELL >=0.60
+DESCRIPTION this is short filter description
+@end example
+
+The first non blank, non comment line has to contain the keyword
+@code{ASPELL} followed by the version of Aspell which the filter is
+usable with.  To denote multiple Aspell versions the version number may
+be prefixed by `@kbd{<}', `@kbd{<=}', `@kbd{=}', `@kbd{>=}' or `@kbd{>}.
+If the range prefix is omitted `@kbd{=}' is assumed.  The
+@code{DESCRIPTION} of the filter should be under 50, begin in lower
+case, and note include any trailing punctuation characters.
+The keyword @code{DESCRIPTION} may be abbreviated by @code{DESC}.
+
+For each filter feature (see @ref{Filter Overview}) provided by the
+corresponding loadable object, the option file has to contain the
+following line:
+@example
+STATIC @code{@i{filtertype}}
+@end example
+@code{@i{filtertype}} stands for one of @code{decoder}, @code{filter}
+or @code{encoder} denoting the entire filter type.  This line allows
+to statically (see @ref{Link Filters Static}) link the filter into
+Aspell if requested by the user or by the system Aspell is built for.
+
+@example
+OPTION newoption
+DESCRIPTION this is a short description of newoption
+TYPE bool
+DEFAULT false
+ENDOPTION
+@end example
+
+An option is added by a line containing the keyword @code{OPTION}
+followed by the name of the option.  If this name is not prefixed by
+the name of the filter Aspell will implicitly do that.  For the
+@code{DESCRIPTION} of a filter option the same holds as for the filter
+description.  The @code{TYPE} of the option may be one of @code{bool},
+@code{int}, @code{string} or @code{list}.  If the @code{TYPE} is
+omitted @code{bool} is assumed.  The default value(s) for an option is
+specified via @code{DEFAULT} (short @code{DEF}) followed by the
+desired @code{TYPE} dependent default value.  The table @ref{Filter
+Default Values} shows the possible values for each @code{TYPE}.
+
+@anchor{Filter Default Values}
+@multitable {string} {Default} {any comma separated list of strings}
+@item @b{Type} @tab @b{Default} @tab @b{Available}
+@item bool @tab true    @tab true false
+@item int  @tab 0       @tab any number value
+@item string @tab       @tab any printable string
+@item list   @tab       @tab any comma separated list of strings 
+@end multitable
+
+Table 1. Shows the default values Aspell assumes if option
+@option{description} lacks a @code{DEFAULT} or @code{DEF} line.
+
+The @code{ENDOPTION} line may be omitted as it is assumed implicitly
+if a line containing @code{OPTION}, @code{STATIC}.
+
+@quotation
+@strong{Note@:} The keywords in a filter description file are case
+insensitive.  The above examples use the all uppercase for better
+distinguishing them from values and comments.  Further a filter
+description may contain blank lines to enhance their readability.
+@end quotation
+
+@quotation
+@strong{Note@:} An option of @code{list} type may contain multiple
+consecutive lines for default values starting with @code{DEFAULT} or
+@code{DEF}, to specify numerous default values.
+@end quotation
+
+
+@section Retrieve Options by a Filter
+
+An option always has to be retrieved by a filter using its full
+qualified name as the following example shows.
+
+@example
+config->retrieve_bool("filter-@i{filtername}-newoption"); 
+@end example
+
+The prefix @code{filter-} allows user to relate option uniquely to the
+specific filter when @code{@i{filtername}-newoption} ambiguous an
+existing option of Aspell.  The @code{@i{filtername}} stands for the
+name of the filter the option belongs to and @code{-@i{newoption}} is
+the name of the option as specified in the corresponding @file{.opt}
+file (see @ref{Filter Description File}
+
+
+@section Compiling and Linking
+
+See a good book on Unix programming on how to turn the filter source
+into a loadable object.
+
+
+@section Programmer's Interface
+@anchor{Programmer's Interface}
+
+
+@anchor{Recommended Standard Aspell} A more convenient way
+recommended, if filter is added to Aspell standard distribution to
+build a new filter is provided by Aspell's programmers interface for
+filter.  It is provided by the @file{loadable-filter-API.hpp} file.
+Including this file gives access to a collection of macros hiding
+nasty details about runtime construction of a filter and about filter
+debugging.  Table @ref{Interface Macros} shows the macros provided by
+the interface.  For details upon the entire macros see
+@file{loadable-filter-API.hpp}.  An example on how to use these macros
+can be found at @file{examples/loadable/ccpp-context.hpp} and
+@file{examples/loadable/ccpp-context.cpp}.
+
+@multitable @columnfractions .25 .06 .34 .34
+@item @b{Macro} @tab @b{Type} @tab @b{Description} @tab @b{Notes}
+@item ACTIVATE_ENCODER @tab M @tab makes the entire encoding
+filter callable by Aspell @tab do not call inside class declaration;
+these macros define new_<filtertype> function; 
+@item ACTIVATE_DECODER @tab M @tab makes the entire decoding
+filter callable by Aspell @tab @emph{as above}
+@item ACTIVATE_FILTER @tab M @tab makes the entire filter
+callable by Aspell @tab @emph{as above} 
+@item FDEBUGOPEN @tab D @tab Initialises the macros for debugging a
+filter and opens the debug file stream @tab These macros are only
+active if the @code{FILTER_PROGRESS_CONTROL} macro is defined and
+denotes the name of the file debug messages should be sent to.
+
+If debugging should go to Aspell standard debugging output (right now
+stderr) use empty string constant as filename
+@item FDEBUGNOTOPEN @tab D @tab Same as ``FDEBUGOPEN'' but
+only if debug file stream was not opened yet @tab @emph{as above}
+@item FDEBUGCLOSE @tab D @tab closes the debugging device opened by ``FDEBUGOPEN'' and reverts it to ``stderr''; @tab @emph{as above}
+@item FDEBUG @tab D @tab prints the filename and the line
+number it occurs @tab @emph{as above}
+@item FDEBUGPRINTF @tab D @tab special printf for debugging
+@tab @emph{as above} 
+@end multitable
+
+Table 2. Shows the macros provided by @file{loadable-filter-API.hpp}
+(@strong{M} mandatory, @strong{D} debugging) @anchor{Interface Macros}
+
+
+@section Adding a filter to Aspell standard distribution
+@anchor{Link Filters Static}
+
+Any filter which one day should be added to Aspell has to be built
+using the developer interface, described in @ref{Programmer's
+Interface}.  To add the filter the following steps have to be
+performed:
+
+@enumerate
+@item
+Decide whether the filter should be kept loadable if possible, or
+always be statically linked to Aspell.
+
+@item
+@anchor{Place Sources} Place the filter sources inside the entire
+directory of Aspell source tree.  Right now use
+@code{@i{$top_srcdir}/modules/filter}.
+@item
+Modify the @file{Makefile.am} file on the topmost directory of the
+Aspell distribution.  Follow the instructions given by the
+@code{#Filter Modules} section.
+@item
+Run @file{autoconf}, @file{automake}, @dots{}
+
+@item
+Reconfigure sources.
+@item
+@anchor{Build Sources} Clear away any remains of a previous build and
+rebuild sources.
+@item
+@anchor{Reinstall Aspell} Reinstall Aspell.
+@item
+@anchor{Test Filter Installed} Test if filter has been added properly
+otherwise return to steps 2--7
+@c Doesn't work@ref{Place Sources}-@ref{Reinstall Aspell}.
+@item
+Reconfigure sources with @option{enable-static} flag and repeat steps
+2--7
+@c Doesn't work @ref{Build Sources}-@ref{Test Filter Installed}
+until your filter builds and runs properly in case of static linkage.
+@item
+Add your source files to cvs, and commit all your changes.  Or in case
+you are not allowed to commit to cvs submit a patch (see @ref{How to
+Submit a Patch}) containing your changes.
+
+@end enumerate
+@c Following this comes the section ``Filter Modes''
+@node Filter Modes, Data Structures,Filter Interface, Top
+@chapter Filter Modes
+
+Filter modes are the preferred way to specify combinations of
+filters which are used regularly and thus abbreviate Aspell's
+command line arguments.
+
+A new filter mode is specified by a file named like the filter
+new mode and prefixed by @file{.amf} (Aspell Mode File). If such a file
+is accessible by the path set via filter-path option Aspell
+will try to load the contained mode specification.
+
+@section Aspell Mode File
+The first key in the made file has be the @code{mode} key.
+It is checked against the mode name part of the .amf file.
+If the @code{mode} key is missing mode file will be rejected.
+
+The same holds for the @code{aspell} key which specifies the
+version(s) of Aspell which is(are) required by the filter.
+
+If these two keys are followed by at least one @code{magic} key
+Aspell will be able to select the entire mode from extension and
+if required from contents of the file to spell implicitly.
+
+The last key of the required keys is the @code{des[c[ription]]}
+key. It gives a short description of the filter mode which will
+displayed when type @command{aspell help}.
+
+The rest of the file consists of the keys @code{filter} and
+@code{option} to load filters are set various options.
+
+@subsection Version Line
+
+Each version line must start with @code{aspell} and be followed by a
+version, optionally prefixed by a relational operator. The relation
+operator can be one of `<', `<=', `=', `>=' or '>' for allowing Aspell
+version with version number being lower, lower or equal, equal to,
+greater or equal or greater than required version number,
+respectfully. If the relation operator is omitted `=' is assumed.
+
+@subsection Magic Line
+
+The magic line contains a description which requirements files
+have to fulfill in order to implicitly activate the entire mode
+at least one such line is required.  Each magic line has the following
+format:
+@example
+MAGIC /<magic key>/<fileextention>[/<fileextention>]
+@end example
+
+The magic key consist of three `:' separated fields.
+The first two are byte counts the last is a regular expression.
+The first byte count indicates the first byte the regular expression
+will be applied to the second byte count indicates the number of
+bytes to test against the regular expression.
+
+If mode selection should only occurred on basis of the listed file
+extensions the magic key should consist of the ``<noregex>'' special
+string.
+
+At least one <fileextention> is required per MAGIC line.
+<fileextention> may not be empty and should not contain a leading `.'
+as this is assumed implicitly.
+
+Multiple MAGIC lines are allowed. Modes may be extended limited by additional
+<label>.amf files located in --filter-path
+Thus file extensions may be prefixed by `+' or `-' to indicate that
+the entire extension has to be added ore removed from this <magic key>
+if neither is specified than a `+' is assumed implicitly.
+
+@subsection Description Line
+
+The required description line will be printed when typing
+@command{aspell help}.  Keep it as short as possible.  Possible
+abbreviations are @code{des} and @code{desc}.
+
+@subsection Filter and Option Lines
+
+The @code{filter} and @code{option} keys load filters and set filter
+options.
+
+The value of the @code{filter} key is equal to the value of Aspell's
+@code{[add|rem]-filter} option. 
+
+Each @code{option} line has the following format:
+
+@example
+  OPTION <option> [<value>]
+@end example
+
+The format of the <option> and <value> is the same format as 
+found in the Aspell configuration file.
+
+@c Following this comes the section ``Data Structures''
+
+
+@c -*- end of new text -*-
+@c The section ``Config Options'' was here
+
+@node Data Structures, Mk-Src Script, Filter Modes, Top
+@chapter Data Structures
+
+Whenever possible you should try to use one of the data structures
+available.  If the data structures do not provide enough functionality
+for your needs you should consider enhancing them rather than writing
+something from scratch.
+
+@section Vector
+
+The @code{vector} class is defined in @file{vector.hpp} and works the
+same way as the standard STL @code{vector} does except that it doesn't
+have as many constructors.
+
+@section BasicList
+
+@code{BasicList} is a simple list structure which can either be
+implemented as a singly or doubly linked list.  It is defined in
+@file{basic_list.hpp}.
+
+@section StringMap
+
+@code{StringMap} is a associative array for strings.  You should try
+to use this when ever possible to avoid code bloat.  It is defined in
+@file{string_map.hpp}.
+
+
+@section Hash Tables
+
+Several hash tables are provided when @code{StringMap} is not
+appropriate.  These hash tables provide a @code{hash_set},
+@code{hash_multiset}, @code{hash_map} and @code{hash_multimap} which
+are very similar to SGI's STL implementation with a few exceptions.
+It is defined in @file{hash.hpp}.
+
+
+@section BlockSList
+
+@code{BlockSList} provided a pool of nodes which can be used for
+singly linked lists.  It is defined in @file{block_slist.hpp}.
+
+@node Mk-Src Script, How It All Works, Data Structures, Top
+@chapter Mk-Src Script
+
+A good deal of interface code is automatically generated by the
+@file{mk-src.pl} Perl script.  I am doing it this way to avoid having
+to write a lot of relative code for the C++ interface.  This should
+also make adding interface for other languages a lot less tedious and
+will allow the interface to automatically take advantage of new Aspell
+functionality as it is made available.  The @file{mk-src.pl} script
+uses @file{mk-src.in} as its input.
+
+@include mksrc.texi
+
+@node How It All Works, Part 1 - Compiled Dictionary Format, Mk-Src Script, Top
+@chapter How It All Works
+
+The details of how Aspell really works is a mystery to most users who
+want to participate in developing and improving Aspell, so it is best
+to fully explain Aspell's core algorithms and data structures to you.
+
+In explaining these, it is hoped to bring prospective developers up to
+speed more quickly and also help you understand the amount of thought
+put into this.  In time, you may be able to improve Aspell even more.
+
+There are many details to explain here, so these will need explaining
+in small segments.
+
+@menu
+* Part 1 - Compiled Dictionary Format::
+* Part 2 - Quickly Finding Similar Soundslike::
+* Part 3::
+@end menu
+
+@node Part 1 - Compiled Dictionary Format, Part 2 - Quickly Finding Similar Soundslike, How It All Works, How It All Works
+@section Part 1 - The Compiled Dictionary Format
+
+In this part you will see how the data is laid out in the compiled
+dictionary for Aspell 0.60.  See source file @file{readonly_ws.cpp}.
+
+Aspell's main compiled wordlist dictionary file is made as follows:
+
+@itemize
+@item header
+@item jump table for editdist 1
+@item jump table for editdist 2
+@item data block
+@item hash table
+@end itemize
+
+There is nothing particularly interesting about the header.  Just a
+bunch of meta information.
+
+The jump tables are described in the next section @dots{}
+
+Words in the data block are grouped based on the soundslike.  Each
+group is as follows:
+
+@example
+<8 bit: offset to next item><8 bit: soundslike size><soundslike>
+<null><words>
+@end example
+
+@noindent
+ Each word group is as follows: 
+
+@example
+<8 bit: flags><8 bit: offset to next word><8 bit: word size><word><null>
+[<affix info><null>]
+@end example
+
+The offset for the final word in each group points to the next word in
+the following group.  The offset for the final word and soundslike
+group in the dictionary is 0.
+
+There is some provisions for additional info to be stored with the word
+but for simplicity, it's left out here.  If soundslike data is not used
+then the soundslike block it not used.
+
+This format makes it easy to iterate over the data without using the
+hash table.
+
+Each soundslike group can be a maximum of about 256 bytes.  If this
+limit is reached then the soundslike group is split. Using 2 bytes for
+the soundslike offset would of solved this problem however 256 bytes
+is normally sufficient, thus I would of wasted some space by using an
+extra byte.  More importantly, Using 2 bytes means I would of had to
+worry about alignment issues.
+
+The soundslike groups are sorted in more or less alphabetic order.
+
+The hash table is a simple open address hash table.  The key is the
+dictionary word in all lowercase form with all accents removed (what is
+known as the "clean" form of the word).  The value stored in the table
+is a 32-bit offset to the beginning of the word.  A 32-bit integer
+offset is used rather than a pointer so that the compiled dictionary
+can be mmaped to make loading the dictionary very fast and so that the
+memory can be shared between processed, and on 64 bit platforms using
+pointers would have doubled the size of the hash table.
+
+Additional information for each word can be derived from each offset:
+
+@example
+word size: offset - 1
+offset to next word: offset - 2
+flags: offset - 3
+@end example
+
+I use helper functions for getting this information.  Doing it this way
+rather than having a data structure is slightly evil, but admittedly,
+I have my reasons.
+
+In the next section, you will see how Aspell uses the jump tables to
+search the list for @emph{soundslike} with @emph{edit-distance} of 1 or 2.
+
+@node Part 2 - Quickly Finding Similar Soundslike, Part 3, Part 1 - Compiled Dictionary Format, How It All Works
+@section Part 2 - Quickly Finding Similar Soundslike
+
+In order for Aspell to find suggestions for a misspelled word Aspell 1)
+creates a list of candidate words, 2) scores them, and 3) returns the most
+likely candidates.  One of the ways Aspell finds candidate words is to look
+for all words with a soundslike which is of a small edit distance from the
+soundslike of the original word.  The edit distance is the total number of
+deletions, insertions, exchanges, or adjacent swaps needed to make one
+string equivalent to the other. The exact distance chosen is either 1 or 2
+depending on a number of factors.  In this part I will focus on how Aspell
+find all such soundslike efficiently and how the jump tables play a key
+role.
+
+This section will focus on how Aspell finds all such soundslike
+efficiently and how the jump tables play a key role.
+
+The naive way to scan the list for all possible soundslike is to
+compute the edit-distance of every soundslike in the dictionary and
+then keep the ones within the threshold.  This is exactly what Aspell
+did prior to 0.60. before a faster method was created.  When a fast
+enough edit distance function is used this method turns out not to be
+unbearably slow, at least for English, but for other languages, with
+large word lists and no soundslike, this can be slow due to the number
+of items that need to be scanned.
+
+Aspell uses a special edit distance function which gives up if the
+distance is larger than the threshold, thus making it very fast.  The
+basic algorithm is as follows:
+
+@example
+limit_edit_distance(A,B,limit) = ed(A,B,0)
+  where ed(A,B,d) = d                              if A & B is empty.
+                  = infinity                       if d > limit
+                  = ed(A[2..],B[2..], d)           if A[1] == B[1]
+                  = min ( ed(A[2..],B[2..], d+1),
+                          ed(A,     B[2..], d+1),
+                          ed(A[2..],B,      d+1) ) otherwise
+@end example
+
+However the algorithm used also allows for swaps and is not recursive.
+Specialized versions are provided for an edit distance of one and two.
+The running time is asymptotically bounded above by @code{(3^l)*n}
+where @code{l} is the limit and @code{n} is the maximum of
+@code{strlen(A),strlen(B)}.  Based on informal tests, the @code{n}
+does not really matter and the running time is more like @code{(3^l)}.
+
+For complete details on this algorithm see the files
+@file{leditdist.hpp} and @file{leditdist.cpp} in the source
+distribution under @file{modules/speller/default}.
+
+So, by exploiting the properties of @code{limit_edit_distance} it is
+possible to avoid having to look at many of the soundslikes in the
+dictionary.  @code{Limit_edit_distance} is efficient because in many
+cases, it does not have to look at the entire word before it can
+determine that it isn't within the given threshold, and then by having
+it return the last position looked at, @emph{p}, it is possible to
+avoid having to look at similar soundslike which are not within the
+threshold.  That is, if two soundslike are the same up to the position
+@code{p}, then neither of them are within the given threshold.
+
+Aspell 0.60 exploits this property by using jump tables.  Each entry
+in the jump table contains two fields: the first @code{N} letters of a
+soundslike, and an offset.  The entries are sorted in lexicographic
+order based on the raw byte value.  Aspell maintains two jump tables.
+
+The first table contains the first 2 letters of a soundslike and the
+offset points into the second jump table.
+
+The second table contains the first 3 letters of a soundslike where
+the offset points to the location of the soundslike in the data block.
+The soundslike in the datablock are sorted so that a linear scan can
+be used to find all soundslike with the same prefix.  If the
+@code{limit_edit_distance} stops before reaching the end of a
+@emph{"soundslike"} in one of the jump tables then it is possible to
+skip all the soundslike in the data block with the same prefix.
+
+Thus, the scan for all @emph{soundslike} within a given edit distance
+goes something like this:
+
+@enumerate
+
+@item
+Compare the entry in the first jump table using
+@code{limit_edit_distance}.  If the @code{limit_edit_distance} scanned
+passed the end of the word, then go to the first entry in the second
+jump table with the same prefix, otherwise go to the next entry in the
+first jump table and repeat.
+
+@item
+Compare the entry in the second jump table.  If the
+@code{limit_edit_distance}  passed the end of the word, then go to the
+first @emph{soundslike} in the data block with this prefix, otherwise
+if the first two letters of the next entry are the same as the current
+one go to it and repeat.  If the first two letters are not the same
+then go to the next entry in the first jump table and repeat step 1.
+
+@item
+Compare the @emph{soundslike} in the data block.  If the edit
+distance is within the target distance, then add the word to the
+candidate list, otherwise don't.  Let @code{N} be the position where
+@code{limit_edit_distance} stopped, (starting at 0).  If @code{N} is
+less than 6, then skip over any soundslike that have the same first
+@code{N + 1} letters.  If after skipping over any similar
+@emph{soundslike} the next @emph{soundslike} does not have the same
+first three letters, then go to the next entry in the second jump table
+and repeat step 2, otherwise repeat this step with the next
+@emph{soundslike}.
+
+@end enumerate
+
+The part of skipping over @emph{soundslike} with the first @code{N + 1}
+letters in step 3 were added in Aspell 0.60.3.  The function
+responsible for most of this is found in function
+@code{ReadOnlyDict::SoundslikeElements::next} which is found in file
+@file{readonly_ws.cpp}.
+
+The next part will describe how Aspell deals with @emph{soundslike}
+lookup when affix compression is involved.
+
+@node Part 3, Copying, Part 2 - Quickly Finding Similar Soundslike, How It All Works
+@section Part 3
+
+Not written yet.
+
+@node Copying,  , Part 3, Top
+@appendix Copying
+
+Copyright @copyright{} 2002, 2003, 2004, 2006 Kevin Atkinson.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+@menu
+* GNU Free Documentation License::
+@end menu
+
+@include fdl.texi
+
+
+@c @node Index,  , Copying, Top
+@c @unnumbered Index
+
+@c @printindex cp
+
+@bye
+
diff --git a/manual/aspell-import.1 b/manual/aspell-import.1
new file mode 100644 (file)
index 0000000..506d50e
--- /dev/null
@@ -0,0 +1,29 @@
+.TH ASPELL-IMPORT 1 "2004-03-03" "GNU" "Aspell Abbreviated User's Manual"
+.SH NAME
+aspell-import \- import old personal dictionaries into GNU Aspell
+.SH SYNOPSIS
+.B aspell-import
+.br
+.SH DESCRIPTION
+.B aspell-import
+is a command that will search for old personal dictionaries and will
+import them into GNU Aspell. It will look for both Ispell and Aspell
+dictionaries. To use it just run it from the command prompt.
+.SH OPTIONS
+This program does not accept any command-line options.
+.SH SEE ALSO
+.PP
+.BR aspell (1),
+.BR run\-with\-aspell (1),
+.BR word\-list\-compress (1)
+.PP
+The full documentation for
+.BR Aspell
+is maintained as a Texinfo manual
+The 
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH AUTHOR
+This manual page was written by Brian Nelson <pyro@debian.org>.
diff --git a/manual/aspell.1 b/manual/aspell.1
new file mode 100644 (file)
index 0000000..b89a22a
--- /dev/null
@@ -0,0 +1,352 @@
+.TH ASPELL 1 "2006-12-10" "GNU" "Aspell Abbreviated User's Manual"
+.SH NAME
+aspell \- interactive spell checker
+.SH SYNOPSIS
+.B aspell
+.I "[options] <command>"
+.br
+.SH "DESCRIPTION"
+.B aspell
+is a utility program that connects to the Aspell library so that it can
+function as an
+.B "ispell -a"
+replacement, as an independent spell checker, as a test utility to test
+out Aspell library features, and as a utility for managing dictionaries
+used by the library.
+.PP
+The Aspell library contains an interface allowing other programs direct
+access to it's functions and therefore reducing the complex task of
+spell checking to simple library calls.  The default library does not
+contain dictionary word lists.  To add language dictionaries, please
+check your distro first for modified dictionaries, otherwise look here
+for base language dictionaries <http://aspell.net>.
+.PP
+The following information describes the commands and options used by the
+Aspell Utility.  
+.PP
+This manual page is maintained separately from the 
+official documentation so it may be out of date or incomplete.  The
+official documentation is maintained as a Texinfo manual.  See the
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH COMMANDS
+.I "<command>"
+is one of:
+.TP
+\fBusage\fR, \fB\-?\fR
+Send a brief Aspell Utility usage message to standard output.  This is
+a short summary listing more common spell\-check commands and options.
+.TP
+.B help
+Send a detailed Aspell Utility help message to standard output.  This is
+a complete list showing all commands, options, filters and dictionaries.
+.TP
+\fBversion\fR, \fB\-v\fR
+Print version number of Aspell Library and Utility to standard output.
+.TP
+\fBcheck\fR \fI<file>\fR, \fB\-c\fR \fI<file>\fR
+Spell\-check a single file.
+.TP
+\fBpipe\fR, \fB\-a\fR
+Run Aspell in
+.I "ispell -a"
+compatibility mode.
+.TP
+.B list
+Produce a list of misspelled words from standard input.
+.TP
+[\fBdump\fR] \fBconfig\fR
+Dump all current configuration options to standard output.
+.TP
+.BI "config " <key>
+Send the current value of
+.I <key>
+to standard output.
+.TP
+.B soundslike
+Output the soundslike equivalent of each word entered.
+.TP
+.B munch
+Generate possible root words and affixes from an input list of words.
+.TP
+\fBexpand\fR [\fB1\-4\fR]
+Expands the affix flags of each affix compressed word entered.
+.TP
+\fBclean\fR [\fBstrict\fR]
+Cleans an input word list so that every line is a valid word.
+.TP
+\fBmunch\-list\fR [\fBsimple\fR] [\fBsingle\fR|\fBmulti\fR] [\fBkeep\fR]
+Reduce the size of a word list via affix compression.
+.TP
+\fBconv\fR \fI<from> <to>\fR [\fI<norm-form>\fR]
+Converts
+.I <from>
+one encoding
+.I <to>
+another.
+.TP
+\fBnorm\fR (\fI<norm\-map>\fR|\fI<from> <norm\-map> <to>\fR) [\fI<norm-form>\fR]
+Perform Unicode normalization.
+.TP
+[\fBdump\fR] \fBdicts\fR|\fBfilters\fR|\fBmodes\fR
+Lists available dictionaries, filters, or modes.
+.TP
+\fBdump\fR|\fBcreate\fR|\fBmerge master\fR|\fBpersonal\fR|\fBrepl\fR \fI<wordlist>\fR
+dump, create, or merge a master, personal, or replacement word list.
+.SH DICTIONARY OPTIONS
+The following options may be used to control which dictionaries to use
+and how they behave.
+.TP
+\fB\-\-master=\fR\fI<name>\fR, \fB\-d\fR \fI<name>\fR
+Base name of the dictionary to use.  If this option is specified then
+Aspell will either use this dictionary or die.
+.TP
+\fB\-\-dict\-dir=\fR\fI<directory>\fR
+Location of the main dictionary word list.
+.TP
+\fB\-\-lang=\fR\fI<string>\fR, \fB\-l\fR \fI<string>\fR
+Language to use.  It follows the same format of the LANG environmental
+variable on most systems. It consists of the two letter ISO 639 language
+code and an optional two letter ISO 3166 country code after a dash or
+underscore. The default value is based on the value of the LC_MESSAGES
+locale.
+.TP
+\fB\-\-size=\fR\fI<string>\fR
+The preferred size of the dictionary word list.  This consists of a two
+char digit code describing the size of the list, with typical values of:
+10=tiny, 20=really small, 30=small, 40=med-small, 50=med, 60=med-large,
+70=large, 80=huge, 90=insane.
+.TP
+\fB\-\-variety=\fR\fI<string>\fR
+Any extra information to distinguish this variety of dictionary from
+other dictionaries which may have the same \fIlang\fR and \fIsize\fR.
+.TP
+\fB\-\-jargon=\fR\fI<string>\fR
+Please use the \fIvariety\fR option since it replaces \fIjargon\fR as a
+better choice.  \fIjargon\fR will be removed in the future.
+.TP
+\fB\-\-word\-list\-path=\fR\fI<list of directories>\fR
+Search path for word list information files.
+.TP
+\fB\-\-personal=\fR\fI<file>\fR, \fB\-p\fR \fI<file>\fR
+Personal word list file name.
+.TP
+\fB\-\-repl=\fR\fI<file>\fR
+Replacements list file name.
+.TP
+\fB\-\-extra\-dicts=\fR\fI<list>\fR
+Extra dictionaries to use.
+.TP
+\fB\-\-ignore\-accents\fR
+This option is not yet implemented.
+.SH CHECKER OPTIONS
+These options control the behavior of Aspell when checking documents.
+.TP
+\fB\-\-ignore=\fR\fI<integer>\fR, \fB\-W\fR \fI<integer>\fR
+Ignore words <=
+.I <integer>
+characters in length.
+.TP
+\fB\-\-ignore\-case\fR, \fB\-\-dont\-ignore\-case\fR
+Ignore case when checking words.
+.TP
+\fB\-\-ignore\-repl\fR, \fB\-\-dont\-ignore\-repl\fR
+Ignore commands to store replacement pairs.
+.TP
+\fB\-\-save\-repl\fR, \fB\-\-dont\-save\-repl\fR
+Save the replacement word list on save all.
+.TP
+\fB\-\-sug\-mode=\fR\fI<mode>\fR
+Suggestion
+.I <mode>
+\= \fBultra\fR|\fBfast\fR|\fBnormal\fR|\fBbad-spellers\fR
+.SH FILTER OPTIONS
+These options modify the behavior of the various filters.
+.TP
+\fB\-\-add\-filter=\fR\fI<list>\fR, \fB\-\-rem\-filter=\fR\fI<list>\fR
+Add or remove a filter.
+.TP
+\fB\-\-add\-filter\-path=\fR\fI<paths>\fR, \fB\-\-rem\-filter\-path=\fR\fI<paths>\fR
+Add or remove paths searched for filters.
+.TP
+\fB\-\-mode=\fR\fI<string>\fR, \fB\-e\fR, \fB\-H\fR, \fB\-t\fR, \fB\-n\fR
+Sets the filter mode.  \fIMode\fR is one of none, url, email, html, tex
+or nroff.  The alternative shortcut options are '-e' for email, '-H'
+for Html/Sgml, '-t' for Tex or '-n' for Nroff.
+.TP
+\fB\-\-encoding=\fR\fI<string>\fR
+encoding the document is expected to be in.  The default depends on the
+current locale.
+.TP
+\fB\-\-add-email\-quote=\fR\fI<list>\fR, \fB\-\-rem-email\-quote=\fR\fI<list>\fR
+Add or Remove a list of email quote characters.
+.TP
+\fB\-\-email\-margin=\fR\fI<integer>\fR
+Number of chars that can appear before the quote char.
+.TP
+\fB\-\-add\-html\-check=\fR\fI<list>\fR, \fB\-\-rem\-html\-check=\fR\fI<list>\fR
+Add or remove a list of HTML attributes to always check.  For example,
+look inside alt= tags.
+.TP
+\fB\-\-add\-html\-skip=\fR\fI<list>\fR, \fB\-\-rem\-html\-skip=\fR\fI<list>\fR
+Add or remove a list of HTML attributes to always skip while spell
+checking.
+.TP
+\fB\-\-add\-sgml\-check=\fR\fI<list>\fR, \fB\-\-rem\-sgml\-check=\fR\fI<list>\fR
+Add or remove a list of SGML attributes to always check for spelling.
+.TP
+\fB\-\-add\-sgml\-skip=\fR\fI<list>\fR, \fB\-\-rem\-sgml\-skip=\fR\fI<list>\fR
+Add or remove a list of SGML attributes to always skip while spell
+checking.
+.TP
+\fB\-\-sgml\-extension=\fR\fI<list>\fR
+SGML file extensions.
+.TP
+\fB\-\-tex\-check\-comments\fR, \fB\-\-dont\-tex\-check\-comments\fR
+Check TeX comments.
+.TP
+\fB\-\-add\-tex\-command=\fR\fI<list>\fR, \fB\-\-rem\-tex\-command=\fR\fI<list>\fR
+Add or Remove a list of TeX commands.
+.SH RUN\-TOGETHER WORD OPTIONS
+These may be used to control the behavior of run\-together words.
+.TP
+\fB\-\-run\-together\fR, \fB\-\-dont\-run\-together\fR, \fB\-C\fR, \fB\-B\fR
+Consider run\-together words valid.
+.TP
+\fB\-\-run\-together\-limit=\fR\fI<integer>\fR
+Maximum number of words that can be strung together.
+.TP
+\fB\-\-run\-together\-min=\fR\fI<integer>\fR
+Minimal length of interior words.
+.SH MISC OPTIONS
+Miscellaneous options that don't fall under any other category.
+.TP
+\fB\-\-conf=\fR\fI<file name>\fR
+Main configuration file.  This file overrides Aspell's global defaults.
+.TP
+\fB\-\-conf\-dir=\fR\fI<directory>\fR
+Location of main configuration file.
+.TP
+\fB\-\-data\-dir=\fR\fI<directory>\fR
+Location of language data files.
+.TP
+\fB\-\-keyboard=\fR\fI<keyboard>\fR
+Use this keyboard layout for suggesting possible words.  These spelling
+errors happen if a user accidently presses a key next to the intended
+correct key.
+.TP
+\fB\-\-local\-data\-dir=\fR\fI<directory>\fR
+Alternative location of language data files.  This directory is searched
+before data\-dir.
+.TP
+\fB\-\-home\-dir=\fR\fI<directory>\fR
+Directory Location for personal wordlist files.
+.TP
+\fB\-\-per\-conf=\fR\fI<file name>\fR
+Personal configuration file.  This file overrides options found in the
+global config file.
+.SH ASPELL UTILITY OPTIONS
+These options are part of the
+.I aspell
+Utility and work independently of the library.
+.TP
+\fB--backup\fR, \fB\-\-dont\-backup\fR, \fB\-b\fR, \fB\-x\fR
+The aspell utility creates a backup file by making a copy and appending
+.I .bak
+to file name.  This only applies when the command is
+.I check <file>
+and the backup file is only created if any spelling modifications take
+place.
+.TP
+\fB\-\-byte\-offsets\fR, \fB\-\-dont\-byte\-offsets\fR
+Use byte offsets instead of character offsets.
+.TP
+\fB\-\-guess\fR, \fB\-\-dont\-guess\fR, \fB\-m\fR, \fB\-P\fR
+Create missing root/affix combinations not in the dictionary in
+\fBpipe\fR mode.
+.TP
+\fB\-\-keymapping=aspell\fR, \fB\-\-keymapping=ispell\fR
+The keymapping to use, either
+.I aspell
+for the default mapping or
+.I ispell
+to use the same mapping that the Ispell utility uses.
+.TP
+\fB\-\-reverse\fR, \fB\-\-dont\-reverse\fR
+Reverse the order of the suggestions list in pipe mode.
+.TP
+\fB\-\-suggest\fR, \fB\-\-dont\-suggest\fR
+Suggest possible replacements in pipe mode. If false, Aspell will simply
+report the misspelling and make no attempt at suggestions or possible
+corrections.
+.TP
+\fB\-\-time\fR, \fB\-\-dont\-time\fR
+Time the load time and suggest a time in pipe mode.
+.PP
+In addition Aspell will try to make sense out of Ispell's command line
+options so that it can function as a drop in replacement for Ispell.  If
+Aspell is run without any command line options it will display a brief
+help screen and quit.
+.SH CONFIGURATION
+Aspell can accept options via global or personal configuration files so
+that you do not need to specify them each time at the command line.  The
+default global configuration file is
+.I "/etc/aspell.conf"
+or another file specified by option \fI\-\-conf\fR and is checked first.
+The default per user configuration file
+.I "~/.aspell.conf"
+located in the
+.B "$HOME"
+directory (or another file specified by option \fI\-\-per\-conf\fR) is
+checked next and overrides options set in the global config file.
+Options specified at either the command line or via an environmental
+variable override those specified by either configuration file.
+.PP
+Each line of the configuration file has the format:
+.PP
+.RS
+\fBoption\fR \fI[value]\fR
+.RE
+.PP
+where 
+.B option
+is any one of the standard library options above without the leading
+dashes.  For example the following line will set the default language to
+Swiss German:
+.PP
+.RS
+.B lang de_CH
+.RE
+.PP
+There may be any number of spaces between the option and the value,
+however it can only be spaces, i.e. there is no '=' between the option
+name and the value.  Comments may also be included by preceding them
+with a '#' as anything from a '#' to a newline is ignored.  Blank lines
+are also allowed.  The \fI/etc/aspell.conf\fR file is a good example of
+how to set these options and the Aspell Manual has more detailed info.
+.SH SEE ALSO
+.PP
+.BR aspell\-import (1),
+.BR prezip\-bin (1),
+.BR run\-with\-aspell (1),
+.BR word\-list\-compress (1)
+.PP
+Aspell is fully documented in its Texinfo manual.  See the
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH SUPPORT
+Support for Aspell can be found on the Aspell mailing lists.
+Instructions for joining the various mailing lists (and an archive of
+them) can be found off the Aspell home page at <http://aspell.net>.
+Bug reports should be submitted via the Sourceforge Tracker rather
+than being posted to the mailing lists.
+.SH AUTHOR
+This manual page was written by Brian Nelson <pyro@debian.org> based
+on the Aspell User's Manual, Copyright \(co 2002 Kevin Atkinson.
+Updated Nov 2006 by Jose Da Silva <digital@joescat.com>, and Dec 2006
+by Kevin Atkinson <kevina@gnu.org>.
+
diff --git a/manual/aspell.html/AWLI-files.html b/manual/aspell.html/AWLI-files.html
new file mode 100644 (file)
index 0000000..03c567c
--- /dev/null
@@ -0,0 +1,67 @@
+<html lang="en">
+<head>
+<title>AWLI files - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Dictionary-Naming.html#Dictionary-Naming" title="Dictionary Naming">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="AWLI-files"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.10 AWLI files</h3>
+
+<p>In order for Aspell to find dictionaries that are located in odd
+places or not named according to <a href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>, an AWLI file
+needs to be created for the dictionary and located in some place where
+Aspell can find it.
+
+   <p>Each AWLI file has a name in the following format:
+
+<pre class="example">     <var>language</var>[<var>region</var>][-<var>variety</var>][-<var>size</var>]-<var>module</var>.awli
+</pre>
+   <p class="noindent">where the names have the same meaning as in <a href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>,
+and <var>module</var> is the speller module to use, which should be set
+to <var>default</var> for now since there is only one speller module.
+
+   <p>Each <samp><span class="file">awli</span></samp> file for an Aspell word list should then contain
+exactly one line which contains the full path of the main word list.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Adding-Support-For-Other-Languages.html b/manual/aspell.html/Adding-Support-For-Other-Languages.html
new file mode 100644 (file)
index 0000000..e52ff67
--- /dev/null
@@ -0,0 +1,73 @@
+<html lang="en">
+<head>
+<title>Adding Support For Other Languages - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell" title="Writing programs to use Aspell">
+<link rel="next" href="Implementation-Notes.html#Implementation-Notes" title="Implementation Notes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Adding-Support-For-Other-Languages"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Implementation-Notes.html#Implementation-Notes">Implementation Notes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">7 Adding Support For Other Languages</h2>
+
+<p>Before you consider adding support for Aspell, first make sure that
+someone else has not already done it.  A good number of dictionaries
+off the Aspell home page at <a href="http://aspell.net">http://aspell.net</a>.  If your
+language is not listed above feel free to send mail to aspell-dict at
+gnu org for help in getting started.
+
+   <p>Adding a language to Aspell is fairly straightforward.  You basically
+need to create the language data file, and compile a new word list.
+
+<ul class="menu">
+<li><a accesskey="1" href="The-Language-Data-File.html#The-Language-Data-File">The Language Data File</a>
+<li><a accesskey="2" href="Compiling-the-Word-List.html#Compiling-the-Word-List">Compiling the Word List</a>
+<li><a accesskey="3" href="Phonetic-Code.html#Phonetic-Code">Phonetic Code</a>
+<li><a accesskey="4" href="The-Simple-Soundslike.html#The-Simple-Soundslike">The Simple Soundslike</a>
+<li><a accesskey="5" href="Replacement-Tables.html#Replacement-Tables">Replacement Tables</a>
+<li><a accesskey="6" href="Affix-Compression.html#Affix-Compression">Affix Compression</a>
+<li><a accesskey="7" href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>
+<li><a accesskey="8" href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">Creating A New Character Set</a>
+<li><a accesskey="9" href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package">Creating An Official Dictionary Package</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Affix-Compression.html b/manual/aspell.html/Affix-Compression.html
new file mode 100644 (file)
index 0000000..364fd7b
--- /dev/null
@@ -0,0 +1,189 @@
+<html lang="en">
+<head>
+<title>Affix Compression - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Replacement-Tables.html#Replacement-Tables" title="Replacement Tables">
+<link rel="next" href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words" title="Controlling the Behavior of Run-together Words">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Affix-Compression"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Replacement-Tables.html#Replacement-Tables">Replacement Tables</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.6 Affix Compression</h3>
+
+<p>Aspell, as of version 0.60, now has support for affix compression. 
+The codebase comes from MySpell found in OpenOffice.
+
+   <p>To add support for affix compression add the following lines to the
+language data file.
+
+<pre class="example">     affix          <var>lang</var>
+     affix-compress true
+</pre>
+   <p>The line `<samp><span class="samp">affix </span><var>lang</var></samp>' adds support for recognizing affix
+information, and the line `<samp><span class="samp">affix-compress true</span></samp>' enables affix
+compression.
+
+   <p>The affix file is expected to be named <samp><var>lang</var><span class="file">_affix.dat</span></samp>.  It is
+the exact same format as those used by MySpell.  More information can
+be found in the myspell/ directory of the distribution or at
+<a href="http://lingucomponent.openoffice.org/dictionary.html">http://lingucomponent.openoffice.org/dictionary.html</a>.
+
+   <p>Affix compression can also be used with soundslike lookup.  Aspell
+does this by only storing the soundslike for the root word.  When a
+word is misspelled it will search for a soundslike close to all
+possible roots of the misspelled word.
+
+   <p>When no soundslike information, or the simple soundslike, is used it
+may be beneficial to specify the option <samp><span class="option">partially-expand</span></samp>
+which will partially expand a word with affix information so that the
+affix flags do not affect the first 3 letters of the word.  This will
+allow Aspell to get more accurate results when scanning the list for near
+misses since the full word can be used and not just the root. 
+Specifying this option, however, will also effectively expand any
+prefixes.  Thus this option should not be used for prefix heavy
+languages such as Hebrew.
+
+   <p>An existing word list, without affix info, can be affix compressed
+using using <samp><span class="command">aspell munch-list</span></samp>.
+
+<h4 class="subsection">7.6.1 Format of the Affix File</h4>
+
+<!-- (as written in affix.readme) -->
+<p>An affix is either a  prefix or a suffix attached to root words to make
+other words.  For example supply -&gt; supplied by dropping the "y" and
+adding an "ied" (the suffix).
+
+   <p>Here is an example of how to define one specific suffix borrowed
+from the English affix file.
+
+<pre class="example">     SFX D Y 4
+     SFX D   0     d          e
+     SFX D   y     ied        [^aeiou]y
+     SFX D   0     ed         [^ey]
+     SFX D   0     ed         [aeiou]y
+</pre>
+   <p>This file is space delimited and case sensitive.  So this information
+can be interpreted as follows:
+
+   <p>The first line has 4 fields:
+
+   <p><table summary=""><tr align="left"><td valign="top" width="5%">1 </td><td valign="top" width="15%"><tt>SFX</tt> </td><td valign="top" width="80%">indicates this is a suffix
+<br></td></tr><tr align="left"><td valign="top" width="5%">2 </td><td valign="top" width="15%"><tt>D</tt> </td><td valign="top" width="80%">is the name of the character which represents this suffix
+<br></td></tr><tr align="left"><td valign="top" width="5%">3 </td><td valign="top" width="15%"><tt>Y</tt> </td><td valign="top" width="80%">indicates it can be combined with prefixes (cross product)
+<br></td></tr><tr align="left"><td valign="top" width="5%">4 </td><td valign="top" width="15%"><tt>4</tt> </td><td valign="top" width="80%">indicates that sequence of 4 affix entries are needed to
+properly store the affix information
+   <br></td></tr></table>
+
+   <p>The remaining lines describe the unique information for the 4 affix
+entries that make up this affix.  Each line can be interpreted
+as follows: (note fields 1 and 2 are used as a check against line 1 info)
+
+   <p><table summary=""><tr align="left"><td valign="top" width="5%">1 </td><td valign="top" width="15%"><tt>SFX</tt> </td><td valign="top" width="80%">indicates this is a suffix
+<br></td></tr><tr align="left"><td valign="top" width="5%">2 </td><td valign="top" width="15%"><tt>D</tt> </td><td valign="top" width="80%">is the name of the character which represents this affix
+<br></td></tr><tr align="left"><td valign="top" width="5%">3 </td><td valign="top" width="15%"><tt>y</tt> </td><td valign="top" width="80%">the string of chars to strip off before adding affix (a 0
+here indicates the NULL string)
+<br></td></tr><tr align="left"><td valign="top" width="5%">4 </td><td valign="top" width="15%"><tt>ied</tt> </td><td valign="top" width="80%">the string of affix characters to add (a 0 here
+indicates the NULL string)
+<br></td></tr><tr align="left"><td valign="top" width="5%">5 </td><td valign="top" width="15%"><tt>[^aeiou]y</tt> </td><td valign="top" width="80%">the conditions which must be met before the affix
+can be applied
+   <br></td></tr></table>
+
+   <p>Field 5 is interesting.  Since this is a suffix, field 5 tells us that
+there are 2 conditions that must be met.  The first condition is that
+the next to the last character in the word must <em>not</em> be any of the
+following "a", "e", "i", "o" or "u".  The second condition is that
+the last character of the word must end in "y".
+
+<h4 class="subsection">7.6.2 When Compared With Ispell</h4>
+
+<p>Now for comparison purposes, here is the same information from the
+Ispell <samp><span class="file">english.aff</span></samp> compression file which was used as the basis
+for the OOo one.
+
+<pre class="example">     flag *D:
+         E           &gt;       D               # As in create &gt; created
+         [^AEIOU]Y   &gt;       -Y,IED          # As in imply &gt; implied
+         [^EY]       &gt;       ED              # As in cross &gt; crossed
+         [AEIOU]Y    &gt;       ED              # As in convey &gt; conveyed
+</pre>
+   <p>The Ispell information has exactly the same information but in a
+slightly different (case-insensitive) format:
+
+   <p>Here are the ways to see the mapping from Ispell .aff format to our
+OOo format.
+
+     <ol type=1 start=1>
+<li>The Ispell english.aff has flag D under the "suffix" section so
+you know it is a suffix.
+
+     <li>The D is the character assigned to this suffix
+
+     <li>`<samp><span class="samp">*</span></samp>' indicates that it can be combined with prefixes
+
+     <li>Each line following the : describes the affix entries needed
+to define this suffix
+
+          <ul>
+<li>The first field is the conditions that must be met. 
+<li>The second field is after the &gt; if a "-" occurs is the string to strip
+off (can be blank). 
+<li>The third field is the string to add (the affix)
+</ul>
+     </ol>
+
+   <p>In addition all chars in Ispell aff files are in uppercase.
+
+<h4 class="subsection">7.6.3 Specifying Affix Flags</h4>
+
+<p>Affix flags are specified in the word list by specifying them after
+the `<samp><span class="samp">/</span></samp>' character:
+
+<pre class="example">     <var>word</var>/<var>flags</var>
+</pre>
+   <p>For example:
+
+<pre class="example">     create/DG
+</pre>
+   <p class="noindent">will associate the `<samp><span class="samp">D</span></samp>' and `<samp><span class="samp">G</span></samp>' flag with the word create.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Aspell-Suggestion-Strategy.html b/manual/aspell.html/Aspell-Suggestion-Strategy.html
new file mode 100644 (file)
index 0000000..5348567
--- /dev/null
@@ -0,0 +1,95 @@
+<html lang="en">
+<head>
+<title>Aspell Suggestion Strategy - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Implementation-Notes.html#Implementation-Notes" title="Implementation Notes">
+<link rel="next" href="Notes-on-8_002dbit-Characters.html#Notes-on-8_002dbit-Characters" title="Notes on 8-bit Characters">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Aspell-Suggestion-Strategy"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-8_002dbit-Characters.html#Notes-on-8_002dbit-Characters">Notes on 8-bit Characters</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Implementation-Notes.html#Implementation-Notes">Implementation Notes</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">A.1 Aspell Suggestion Strategy</h3>
+
+<p>The magic behind my spell checker comes from merging Lawrence Philips
+excellent metaphone algorithm and Ispell's near miss strategy which is
+inserting a space or hyphen, interchanging two adjacent letters,
+changing one letter, deleting a letter, or adding a letter.
+
+   <p>The process goes something like this.
+
+     <ol type=1 start=1>
+<li>Convert the misspelled word to its soundslike equivalent (its
+metaphone for English words).
+
+     <li>Find all words that have a soundslike within one or two edit distances
+from the original word's soundslike.  The edit distance is the total
+number of deletions, insertions, exchanges, or adjacent swaps needed
+to make one string equivalent to the other.  When set to only look for
+soundslikes within one edit distance it tries all possible soundslike
+combinations and checks if each one is in the dictionary.  When set to
+find all soundslike within two edit distances it scans through the
+entire dictionary and quickly scores each soundslike.  The scoring is
+quick because it will give up if the two soundslikes are more than two
+edit distances apart.
+
+     <li>Find misspelled words that have a correctly spelled replacement by the
+same criteria of step number 2 and 3.  That is the misspelled word in
+the word pair (such as &ldquo;teh -&gt; the&rdquo;) would appear in the suggestions
+list as if it was a correct spelling.
+
+     <li>Score the result list and return the words with the lowest score.  The
+score is roughly the weighed average of the weighed edit distance of
+the word to the misspelled word and the soundslike equivalent of the
+two words.  The weighted edit distance is like the edit distance
+except that the various edits have weights attached to them.
+
+     <li>Replace the misspelled words that have correctly spelled replacements
+with their replacements and remove any duplicates that might arise
+because of this.
+        </ol>
+
+   <p>Please note that the soundslike equivalent is a rough approximation of
+how the words sounds.  It is not the phoneme of the word by any means. 
+For more details about exactly how each step is performed please see
+the file <samp><span class="file">suggest.cc</span></samp>.  For more information on the metaphone
+algorithm please see the data file <samp><span class="file">english_phonet.dat</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Authors.html b/manual/aspell.html/Authors.html
new file mode 100644 (file)
index 0000000..e5800ef
--- /dev/null
@@ -0,0 +1,107 @@
+<html lang="en">
+<head>
+<title>Authors - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="ChangeLog.html#ChangeLog" title="ChangeLog">
+<link rel="next" href="Copying.html#Copying" title="Copying">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Authors"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Copying.html#Copying">Copying</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="ChangeLog.html#ChangeLog">ChangeLog</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix G Authors</h2>
+
+<p>The following people or companies have contributed a non-trival amount of
+code to Aspell and thus own the Copyright to part of Aspell.
+
+     <dl>
+<dt>Jose Da Silva<dd>Bug fixes and enhancements to <samp><span class="command">word-list-compress</span></samp>.
+
+     <br><dt>Sergey Poznyakoff<dd>Wrote the Nroff filter.
+
+     <br><dt>Tom Snyder<dd>Enhanced the SGML filter to also support skipping sgml tags such as
+"script" blocks.
+
+     <br><dt>Kevin B. Hendricks (and Contributers)<dd>Wrote MySpell which is a simple spell checker library that supports
+affix compression.  Aspell affix compression code is based on his code.
+
+     <br><dt>Christoph Hinterm&uuml;ller<dd>Added support for loadable filters.
+
+     <br><dt>Melvin Hadasht<dd>Wrote a locale independent version of strtol and strtod. 
+Wrote the original loadable filter support however his code has been
+completely rewritten by Christoph Hinterm&uuml;ller and Kevin Atkinson.
+
+     <br><dt>Bj&ouml;rn Jacke<dd>Wrote the generic soundslike algorithm which gets all of its data from a
+file, thus eliminating almost all need for language specific code from
+Aspell.
+
+     <br><dt>Silicon Graphics Computer Systems, Inc.<dt>Hewlett-Packard Company<dd>Parts of the SGI STL code were used in various places throughout the
+Aspell source.
+
+   </dl>
+
+   <p>In addition the authors of some of translated messages did not release
+their work into the Public Domain, and thus own the copyright to the
+translated text.  See the files <samp><span class="file">*.po</span></samp> in the <samp><span class="file">po</span></samp> directory
+for more details.
+
+   <p>The folowing people also contributed to the development of Aspell but do
+not own the Copyright to part of Aspell.
+
+     <dl>
+<dt>Sergey Poznyakoff<dd>Added gettext support.
+
+     <br><dt>Chris Martin<dd>Converted the manual to texinfo.
+
+     <br><dt>Lawrence Philips<dd>Wrote the original metaphone algorithm; however, he released his work
+into the Public Domain.
+
+     <br><dt>Michael Kuhn<dd>Converted the metaphone algorithm into C code and made some enhancements
+to the original algorithm.  He also released his work into the Public
+Domain.
+
+     <br><dt>Geoff Kuenning (and contributers)<dd>The authors of Ispell.  Many of the ideas used in Aspell, especially with
+the affix code, were taken from Ispell.  However none of the original
+Ispell code is used in Aspell.
+
+   </dl>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Basic-Usage.html b/manual/aspell.html/Basic-Usage.html
new file mode 100644 (file)
index 0000000..86cdb83
--- /dev/null
@@ -0,0 +1,61 @@
+<html lang="en">
+<head>
+<title>Basic Usage - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Support.html#Support" title="Support">
+<link rel="next" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Basic-Usage"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Support.html#Support">Support</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">3 Basic Usage</h2>
+
+<p>For a quick reference on the Aspell utility use the command
+<samp><span class="command">aspell --help</span></samp>.
+
+<ul class="menu">
+<li><a accesskey="1" href="Spellchecking-Individual-Files.html#Spellchecking-Individual-Files">Spellchecking Individual Files</a>
+<li><a accesskey="2" href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">Using Aspell as a Replacement for Ispell</a>
+<li><a accesskey="3" href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">Using Aspell with other Applications</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Binary-Compatibility.html b/manual/aspell.html/Binary-Compatibility.html
new file mode 100644 (file)
index 0000000..34d69a2
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Upgrading-from-Aspell-0_002e50.html#Binary%20Compatibility">
diff --git a/manual/aspell.html/ChangeLog.html b/manual/aspell.html/ChangeLog.html
new file mode 100644 (file)
index 0000000..51039ec
--- /dev/null
@@ -0,0 +1,1107 @@
+<html lang="en">
+<head>
+<title>ChangeLog - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Installing.html#Installing" title="Installing">
+<link rel="next" href="Authors.html#Authors" title="Authors">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="ChangeLog"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Authors.html#Authors">Authors</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Installing.html#Installing">Installing</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix F ChangeLog</h2>
+
+<h3 class="heading">Changes from 0.60.6 to 0.60.6.1 (July 4, 2011)</h3>
+
+     <ul>
+<li>Update to Automake 1.10.3. 
+<li>Fix a bug which caused a race condition (leading to a likely crash)
+when two threads try to update the dictionary cache at the same time. 
+<li>Make it very clear that compiling Aspell with NDEBUG is a bad idea
+(see <a href="http://aspell.net/ndebug.html">http://aspell.net/ndebug.html</a>) by outputting a
+warning when building with NDEBUG defined. 
+<li>Numerous other minor updates and bug fixes. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.5 to 0.60.6 (April 16, 2007)</h3>
+
+     <ul>
+<li>Compile fixes for Gcc 4.3. 
+<li>Updated to Libtool 2.2.2 and Automake 1.10.1
+<li>Minor tweak to suggestion code which improved suggestion results in
+certain cases. 
+<li>Always line buffer stdout and stderr in the Aspell utility when there is
+the potential for it to be used interactively through a pipe. 
+<li>Removed debug output in <samp><span class="command">aspell munch-list</span></samp>. 
+<li>Other minor updates and bug fixes. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.4 to 0.60.5 (December 18, 2006)</h3>
+
+     <ul>
+<li>Compile fix for Gcc 4.1
+<li>Updated to Gettext 0.16.1, Libtool 1.5.22, Automake 1.10, Autoconf 2.61
+<li>Documentation improvements, including an updated <samp><span class="command">man</span></samp> page. 
+<li>Complain if more than one file is specified when checking files using
+the <samp><span class="command">aspell check</span></samp> command, rather than ignoring the other files. 
+<li>Large number of bug fixes. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.3 to 0.60.4 (October 19, 2005)</h3>
+
+     <ul>
+<li>Fixed a bug that caused Aspell to crash when checking certain Russian
+words, this bug likely affected other languages as well. 
+<li>Updated to Gettext 0.14.5 which is required for AMD64, also updated to
+to Libtool 1.5.20. 
+<li>Fixed an alignment bug which caused mmap to always fail when reading
+in dictionaries. 
+<li>Added note about how <samp><span class="command">make clean</span></samp> will remove the HTML manuals. 
+<li>Added manual page for prezip-bin and enhanced word-list-compress manual
+page thanks to the work of Jose Da Silva. 
+<li>Other minor updates and bug fixes. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.2 to 0.60.3 (June 28, 2005)</h3>
+
+     <ul>
+<li>Fixed bugs involving several of the C API functions. 
+<li>Fixed bug where `<samp><span class="samp">ultra</span></samp>' or `<samp><span class="samp">fast</span></samp>' mode would not return any
+suggestions when soundslike lookup was not used. 
+<li>Made a minor, yet significant, optimization to the suggestion code. 
+This sped things up by an order of magnitude in some cases. 
+<li>Avoid using the slow ngram scan except when the <samp><span class="option">sug-mode</span></samp> is
+`<samp><span class="samp">slow</span></samp>' or `<samp><span class="samp">bad-speller</span></samp>'. 
+<li>Fixed a bug in curses mode which caused word-wrap to not work
+correctly in some cases. 
+<li>Fixed a bug in pipe mode with a missing newline. 
+<li>Fixed the <samp><span class="command">spell</span></samp> compatibility script. 
+<li>Several other minor bugs fixed. 
+<li>Made note about the change in behavior of the <samp><span class="option">-l</span></samp> command line
+switch. 
+<li>Other manual update/fixes. 
+<li>Updated to Libtool 1.5.18, Automake 1.9.6, and Makeinfo 4.8. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.1 to 0.60.2 (December 18, 2004)</h3>
+
+     <ul>
+<li>Added the <samp><span class="command">munch-list</span></samp> command to the Aspell utility.  The
+<samp><span class="command">munch</span></samp> program in the <samp><span class="file">myspell/</span></samp> directory will
+disappear in Aspell 0.61.  The <samp><span class="command">munchlist</span></samp> script will also
+likely disappear or be replaced when Aspell 0.61 is released since it
+doesn't work correctly anyway. 
+<li>Several important bug fixes some of which rendered some non-English
+languages unusable. 
+<li>Other minor changes. 
+</ul>
+
+<h3 class="heading">Changes from 0.60.1 to 0.60.1.1 (November 20, 2004)</h3>
+
+     <ul>
+<li>Fix bug involving checking of capitalized word when affix compression
+is used. 
+<li>Compile fixes. 
+<li>Added an option to disable using the &ldquo;wide&rdquo; curses version in case it
+causes compile problems. 
+<li>Minor manual updates
+<li>Avoided including some unnecessary files in the distribution. 
+</ul>
+
+<h3 class="heading">Changes from 0.60 to 0.60.1 (November 7, 2004)</h3>
+
+     <ul>
+<li>Lots of compile fixes for various platforms. 
+<li>Miscellaneous bug fixes. 
+<li>Added Nroff filter thanks to Sergey Poznyakoff. 
+<li>The default filter mode when in pipe mode is now nroff for compatibility with
+Ispell. 
+<li>Added Texinfo filter. 
+<li>Added a section detailing the differences between Ispell and Aspell. 
+<li>Updated the section on thread safety. 
+<li>Other miscellaneous manual changes such as updating the To Do and Authors
+section. 
+</ul>
+
+<h3 class="heading">Changes from 0.50.5 to 0.60 (August 27, 2004)</h3>
+
+     <ul>
+<li>Added support for Affix Compression.  Affix compression stores the root
+word and then a list of prefixes and suffixes that the word can take,
+and thus saves a lot of space.  The codebase comes from MySpell found in
+OpenOffice.  It uses the same affix file that OpenOffice (and Mozilla)
+use.  Affix compression will even work with soundslike lookup to a
+limited extent. 
+<li>Added support for accepting all input and printing all output in UTF-8
+or some other encoding different from the one Aspell uses.  This
+includes support for Unicode normalization.  Aspell can now support any
+language with no more than 210 distinct characters, including different
+capitalizations and accents, <em>even if</em> there is not an existing
+8-bit encoding that supports the language. 
+<li>Added support for loadable filters and customizable filter modes thanks
+to Christoph Hinterm&uuml;ller. 
+<li>Enhanced SGML filter to also support skipping sgml tags such as "script"
+blocks thanks to Tom Snyder. 
+<li>Added gettext support thanks to Sergey Poznyakoff
+<li>Reworked the compiled dictionary format.  Compiled dictionaries now take
+up less space (less than 80% for the English language) and
+creating them is significantly faster (over 4 times for the
+English language). 
+<li>Reworked suggestion code.  It is significantly faster when dealing with
+short words (up to 10 times).  Also added support for MySpell
+Replacement Tables and n-gram lookup.  In addition, added basic support
+for compound words. 
+<li>Manual has has been converted to texinfo format thanks to the work of
+Chris Martin. 
+<li>Reworked the build system so that a single Makefile is used for most
+of the code. 
+<li>All data, by default, is now included in
+<samp><var>libdir</var><span class="file">/aspell-0.60</span></samp>.  Also added a built time option to
+increment the major version number of the shared library.  This should
+allow both Aspell version 0.50 and 0.60 to coexist.  The major version
+number is <em>not</em> incremented by default as Aspell 0.60 is binary
+compatible with Aspell 0.50.  See <a href="Binary-Compatibility.html#Binary-Compatibility">Binary Compatibility</a>. 
+<li>The code to handle dictionaries has been rewritten.  Because of this
+support for the dictionary option <samp><span class="option">strip-accents</span></samp> has been
+removed.  In addition the <samp><span class="option">ignore-accents</span></samp> option is currently
+unimplemented. 
+<li>Lots of other minor changes due to massive overhaul of the source code.
+
+</ul>
+
+<h3 class="heading">Changes from 0.50.4.1 to 0.50.5 (Feb 10, 2004)</h3>
+
+     <ul>
+<li>Reworked url filter which fixed several bugs and now accepts
+"bla.bla/kdkdl" as a url. 
+<li>Fixed bug in which the url filter was coming before all other filters
+when it was supposed to come after. This solved a number of problems
+where the url filter was interfering with other filters. 
+<li>Small bug fix in SGML filter. 
+<li>Added code page charsets, ie cp125?.dat. 
+<li>Added natural (split) keyboard data file as "split.kbd"
+<li>Compile fixes for the upcoming Gcc 3.4
+<li>Removed Solaris link hack as it was causing more problems than it
+fixes. 
+<li>Compile fixes for Sun WorkShop 6 compiler, but there may still be some
+problems, especially with linking. 
+<li>Included patch to help compile with Microsoft Visual C++ 6. 
+<li>Minor manual fixes. 
+<li>Updated the TODO section to reflect the current progress with the next
+major version of Aspell (0.51). 
+<li>Updated to Autoconf 2.59, Automake 1.82, and Libtool 1.5.2. 
+</ul>
+
+<h3 class="heading">Changes from 0.50.4 to 0.50.4.1 (Oct 11, 2003)</h3>
+
+     <ul>
+<li>Fixed major bug in pipe mode which caused the last character to be
+chopped off words before they were stored. 
+<li>Minor formating fixes in the manual. 
+</ul>
+
+<h3 class="heading">Changes from 0.50.3 to 0.50.4 (Sep 26, 2003)</h3>
+
+     <ul>
+<li>Minor changes in URL filter to avoid treating the double quote
+character as part of the URL, and to avoid treating words ending in
+more than one period as a URL.
+
+     <li>Document fixes in Aspell API
+
+     <li>Small compile fixes, including one for GCC 3.3
+
+     <li>Updated Win32 section since a port now exists thanks to Thorsten
+Maerz.
+
+     <li>Complain instead of doing nothing or aborting for unimplemented
+functions in Aspell utility.
+
+     <li>Portability bug fixes.
+
+     <li>Upgraded to Autoconf 2.57, Automake 1.7.7, Libtool 1.5 (no longer use
+CVS version  of libtool). 
+</ul>
+
+<h3 class="heading">Changes from 0.50.2 to 0.50.3 (Nov 23, 2002)</h3>
+
+     <ul>
+<li>Hopefully fixed the Ispell alignment error problem when Aspell is used
+with ispell.el.
+
+     <li>Fixed a problem with personal dictionaries on NFS mounted home
+directories.
+
+     <li>Compiled libaspell-common directory into libaspell for now to avoid
+forcing applications to relink whenever a new Aspell version is out
+which was due to the use of the libtool '-release' flag.
+
+     <li>Fixed Makefiles so that Aspell can be built outside the source tree
+(i.e.  with VPATH).
+
+     <li>Updated the section on compiling with Win32.
+
+     <li>Updated to Autoconf 2.56. 
+</ul>
+
+<h3 class="heading">Changes from 0.50.1 to 0.50.2 (Sep 28, 2002)</h3>
+
+     <ul>
+<li>Fixed a number of bugs in Ispell compatibility mode
+
+     <li>Fixed a number of bugs with the handling of replacement pairs
+
+     <li>Other miscellaneous bug fixes
+
+     <li>Additional Win32 portability fixes
+
+     <li>Added the Ukrainian KOI8-U charset. 
+</ul>
+
+<h3 class="heading">Changes from 0.50 to 0.50.1 (Aug 28, 2002)</h3>
+
+     <ul>
+<li>A rather large number of portability fixes for non GNU/Linux platforms.
+
+     <li>Fixed pkglibdir and pkgdatadir in configure.
+
+     <li>Reintroduced some configure options from Aspell .33.7 included
+dict-dir, data-dir, curses, curses-include, win32-relocatable.
+
+     <li>Fixed Aspell so it will now compile with -O3 when using gcc.
+
+     <li>Updated note on Win32 support.
+
+     <li>Other minor manual improvements.
+
+     <li>Portability fixes in dictionary files
+
+     <li>Official dictionary package for the Slovak language. 
+</ul>
+
+<h3 class="heading">Changes from .33.7.1 to 0.50 (Aug 23, 2002)</h3>
+
+     <ul>
+<li>A complete overhaul of the source code which included merging Pspell
+into Aspell.
+
+     <li>Changed the way dictionaries and languages are handled.
+
+     <li>Added Dvorak keymap.
+
+     <li>Added the ability to list the available dictionaries
+
+     <li>Improved the spell checking interface a bit.
+
+     <li>Added support for using the Ispell keymapping when checking files.
+
+     <li>Complete rewrite of the filter interface. 
+ It should now be fairly easy to add new filters to Aspell.
+
+     <li>Added some preliminary developer documentation.
+
+     <li>Lots of other changes due to the massive overhaul of the source code. 
+</ul>
+
+<h3 class="heading">Changes from .33.7 to .33.7.1 (Aug 20, 2001)</h3>
+
+     <ul>
+<li>Minor manual fixes.
+
+     <li>Compile fix for Gcc 3.0 and Solaris. 
+</ul>
+
+<h3 class="heading">Changes from .33.6.3 to .33.7 (Aug 2, 2001)</h3>
+
+     <ul>
+<li>Updates to Autoconf 2.50 and switched to the HEAD branch of libtools.
+
+     <li>Fixed a bug which caused Aspell to crash when typo-analysis was not
+used such as when sug-mode is <strong>fast</strong> or <strong>bad spellers</strong>.
+
+     <li>Added support for typo-analysis even when a soundslike was not used.
+
+     <li>Fixed a bug which causes extended charters to display incorrectly on
+some platforms
+
+     <li>Compile fixes so that it will compile with Gcc 3.0.
+
+     <li>Compile fixed which should allow Aspell to compile with Egcs 1.1.  I
+have not been able to actually test it though.  Please let me know at
+kevina@users.sourceforge.net if you have tried with Egcs 1.1.
+
+     <li>Compile and configuration script fixes so that USE_FILE_INO will
+properly be defined and Aspell will compile correctly when it is
+defined.
+
+     <li>More ANSI C++ compliance fixes. 
+</ul>
+
+<h3 class="heading">Changes from .33.6.2 to .33.6.3 (June 3, 2001)</h3>
+
+     <ul>
+<li>Fixed a build problem in the manual/ directory by including
+manual-text and manual-html in the distribution. 
+</ul>
+
+<h3 class="heading">Changes from .33.6.1 to .33.6.2 (June 3, 2001)</h3>
+
+     <ul>
+<li>Compile fix so that Aspell will work correctly when not installed in
+/usr/local.
+
+     <li>Avoided regenerating the manual unless configured with enable-maintainer-mode.
+
+     <li>Added the missing documentation files in the scowl directory. 
+</ul>
+
+<h3 class="heading">Changes from .33.6 to .33.6.1 (May 29, 2001)</h3>
+
+     <ul>
+<li>Fixed a formating problem with the manual involving &lt;.
+
+     <li>Added a note about creating pwli files.
+
+     <li>Removed the space after between the -L and the directory name in the
+pspell-module/Makefile  which caused problems on some platforms.
+
+     <li>Added the configure option AM_MAINTAINER_MODE to avoid enabling rules
+which often causes generated build files to be rebuilt with the wrong
+version of Libtool by default.  I don't know why I didn't think to do
+this a long time ago. 
+</ul>
+
+<h3 class="heading">Changes from .33.5 to .33.6 (May 18, 2001)</h3>
+
+     <ul>
+<li>Fixed a minor bug where some words would have random compound tags
+attached to them.
+
+     <li>Fixed a compile problem on many platforms where fileno is defined as a
+macro.
+
+     <li>Updated the description for a few of Aspell's options.
+
+     <li>Removed the note of Aspell not being able to run when compiled with
+the upcoming Gcc 3.0 compiler as things seam to work now.
+
+     <li>Added a note about Aspell not being able to compile with Egcs 1.1.
+
+     <li>Added hack to deal with Libtool's interdependencies problem.  See bug
+#416981 for Pspell for more info. 
+</ul>
+
+<h3 class="heading">Changes from .33 to .33.5 (April 5, 2001)</h3>
+
+     <ul>
+<li><strong>dump master</strong> correctly detects which dictionary and language
+to use based on the <samp><span class="env">LANG</span></samp> environment variable.
+
+     <li>Fixed a problem on Win32 which involves path names that began with
+&lt;Drive Letter&gt;:.
+
+     <li>Bug fixes and enhancements so that Aspell can once again run under
+MinGW.  You can even use the new full screen interface if Aspell is
+compiled with PDCurses.
+
+     <li>Some major modifications to make Aspell more C++ compliant in order to
+get Aspell to compile under the upcoming Gcc 3.0 compiler.  This
+included only using STL features found in the standard version of C++. 
+(Which means Aspell will no longer require using the SGI version of
+the STL) This should also make compiling C++ under non-gcc compilers a
+lot simpler.  Please note that Aspell still has some problems with the
+upcoming Gcc 3.0 compiler.
+
+     <li>Minor changes to remove some -Wall warnings.
+
+     <li>Added a hack so that Aspell would properly compile as a shared library
+under Solaris.
+
+     <li>Added a few important missing words to the English word list. 
+</ul>
+
+<h3 class="heading">Changes from .32.6 to .33 (January 28, 2001)</h3>
+
+     <ul>
+<li>Added a new new curses based interface to replace the dumb terminal
+interface everyone has been bitching about.
+
+     <li>Added the ability to give higher priority to words such as "the"
+instead of "teh" which are likely to be due to typos.
+
+     <li>Reorganized the manual so that it is hopefully easier to follow.
+
+     <li>Ability to automatically select the best dictionary to use based on
+the setting of the <samp><span class="env">LANG</span></samp> environment variable.
+
+     <li>Expanded the medium dictionary size to include more words which
+included the original words found in Ispell and eliminated the large
+size for now.
+
+     <li>Added three special variant add-on dictionaries.
+
+     <li>Switched to the multi-language branch of the CVS version of libtool.
+
+</ul>
+
+<h3 class="heading">Changes from .32.5 to .32.6 (Nov 8, 2000)</h3>
+
+     <ul>
+<li>Fixed a bug where Aspell would crash when reading-in accented
+characters on some platforms.  This fixed bug # 112435.
+
+     <li>Fixed some other bugs so that it will run under Win32 under CygWin. 
+Unfortunately it still won't run properly under Mingw.
+
+     <li>Fixed the mmap test in configure so that it won't fail on some
+platforms that use munmap(char *, int) instead of munmap(void *, int).
+
+     <li>Upgraded to the latest CVS version of libtool which fixed the problem
+with using GNU Make under Solaris.
+
+     <li>Added an option to copy files instead of using symbolic links for the
+special <strong>multi</strong> dictionary files. 
+</ul>
+
+<h3 class="heading">Changes from .32.1 to .32.5 (August 18, 2000)</h3>
+
+     <ul>
+<li>Changed my email from kevinatk at home com to kevina at users
+sourceforge net please make a note of the new email address.
+
+     <li>Added an option to control if the personal replacement dictionary is
+saved when the save_all_wls method is called.
+
+     <li>Brought back the ability to dump the master word list even in the case
+of the special <strong>multi</strong> lists.
+
+     <li>Added a large number of hacker related words and some other slang
+terms to the medium size word list.
+
+     <li>Added an <strong>ispell</strong> and <strong>spell</strong> compatibility script for
+systems which don't have Ispell installed.  They are located in the
+scripts/ directory and are not installed by default.
+
+     <li>Manual fixes.
+
+     <li>Added a note on not using GNU Make on Solaris. 
+</ul>
+
+<h3 class="heading">Changes from .32 to .32.1 (August 5, 2000)</h3>
+
+     <ul>
+<li>Minor compile fixes for recent gcc snapshot.
+
+     <li>Fixed naming of pwli files.
+
+     <li>Fixed a bug when Aspell will crash when used with certain single
+letter flags.  This bug was most noticeable when used with Emacs.
+
+     <li>Word list changes, see SCOWL Readme.
+
+     <li>Other miscellaneous changes. 
+</ul>
+
+<h3 class="heading">Changes from .31.1 to .32 (July 23, 2000)</h3>
+
+     <ul>
+<li>Added support for optionally doing without the soundslike data.
+
+     <li>Greatly reduced the amount of memory used when creating word lists.
+
+     <li>Added support for ignoring accents when coming up with suggestions.
+
+     <li>Added support for local-data-dir which is searched before data-dir.
+
+     <li>Added support for specifying which words may be used in compounds and where
+ they may be used.
+
+     <li>Added support for having more than one main word list as well as a
+special <strong>multi</strong> word list files which will allow multiple word
+lists to be treated as one.
+
+     <li>Aspell now uses a completely new word list.
+
+     <li>The apostrophe (') is no longer considered part of the word when it as
+at the end of the word such as in `<samp><span class="samp">dogs'</span></samp>'. 
+</ul>
+
+<h3 class="heading">Changes from .31 to .31.1 (June 18, 2000)</h3>
+
+     <ul>
+<li>Fixed a bug where Aspell would not create a complete dictionary file
+on some platforms when the data is 8-bit.
+
+     <li>Added a workaround so Aspell will work with ispell.el 3.3.
+
+     <li>Minor compile fixes so it would compile better with the very latest
+gcc (CVS Version).
+
+     <li>Removed note about compiling in Win32 as I was now able to get it to work. 
+</ul>
+
+<h3 class="heading">Changes from .30.1 to .31 (June 11, 2000)</h3>
+
+     <ul>
+<li>Added support for spell checking run together words.
+
+     <li>Added an option to produce a list of misspelled words from standard input.
+
+     <li>More robust error reporting when reading in language data files.
+
+     <li>Fixed a bug that would cause Aspell to crash if the
+<strong>special</strong> line was not defined in the language data file.
+
+     <li>Updated Pspell Module.
+
+     <li>Minor bug fixes.
+
+     <li>Added cross references in &ldquo;The Aspell Utility Chapter&rdquo; for easier
+use. 
+</ul>
+
+<h3 class="heading">Changes from .30 to .30.1 (April 29, 2000)</h3>
+
+     <ul>
+<li>Ported Aspell to Win32 platforms.
+
+     <li>Portability fixes which may help Aspell compile on other platforms.
+
+     <li>Aspell will no longer fail if for some reason the mmap fails, instead
+it will just read the file in as normal and free the memory when done.
+
+     <li>Minor changes in the format of the main word list as a result of the
+changes, the old format should still work in most cases.
+
+     <li>Fixed a bug where Aspell was ignoring the extension of file names such
+as .html or .tex when checking files.
+
+     <li>Fixed a bug where Aspell will go into an infinite loop when creating
+the main word list from a word list which has duplicates in it.
+
+     <li>Minor changes to the manual for better clarity. 
+</ul>
+
+<h3 class="heading">Changes from .29.1 to .30 (April 2, 2000)</h3>
+
+     <ul>
+<li>Fixed many of the capitalization bugs found in previous versions of
+Aspell.
+
+     <li>Changed the format of the main word list yet again.
+
+     <li>Fixed a bug so that <code>aspell check</code> will work on the PowerPC.
+
+     <li>Added ability to change configuration options in the middle of a session.
+
+     <li>Added words from /usr/dict/words found on most Linux systems as well
+as a bunch of commonly used abbreviations to the word list.
+
+     <li>Fixed a bug where Aspell would dump core after reporting certain errors
+when compiled with gcc 2.95 or higher.  This involved reworking the
+Exception heritage to get around a bug in gcc 2.95.
+
+     <li>Added a few more commands to the list of default commands the TeX
+filter knows about.
+
+     <li>Aspell will now check if a word only contains valid characters before
+adding it to any dictionaries.  This might mean that you have to
+manually delete a few words from your personal word list.
+
+     <li>Added option to ignore case when checking a document.
+
+     <li>Adjusted the parameters of the <strong>normal</strong> suggest mode to so that
+significantly less far fetched results are returned in cases such as
+tomatoe, which went from 100 suggestions down to 32, at the expense of
+getting slightly lower results (less than 1%),
+
+     <li>Improved the edit distance algorithm for slightly faster results.
+
+     <li>Removed the `<samp><span class="samp">$$m</span></samp>' command in pipe mode, you should now use
+`<samp><span class="samp">$$cs mode,</span><var>mode</var></samp>' to set the mode and <strong>$$cr mode</strong> to
+find out the current mode.
+
+     <li>Reworked parts of Aspell to use Pspell services to avoid duplicating code.
+
+     <li>Added a module for the newly released Pspell.  It will get installed
+with the rest of Aspell.
+
+     <li>Miscellaneous other bug fixes. 
+</ul>
+
+<h3 class="heading">Changes from .29 to .29.1 (Feb 18, 2000)</h3>
+
+     <ul>
+<li>Improved the TeX filter so that it will accept '@' at the beginning
+of a command name and ignored trailing '*'s.  It also now has better
+defaults for which parameters to skip.
+
+     <li>Reworked the main dictionary so that it can be memory mapped in.  This
+decreases startup time and allows multiple Aspell processes to use the
+same memory for the main word list.  This also also made Aspell 64 bit
+clean so that it should work on an alpha now.
+
+     <li>Fix so that Aspell could compile on platforms that gnu is not yet
+available for.
+
+     <li>Fixed issue with flock so it would compile on FreeBSD.
+
+     <li>Minor changes in the code to make it more C++ compliant although I am
+sure there will still be problems when using some other compiler other
+than gcc or egcs.
+
+     <li>Added some comments to the header files to better document a few of
+the classes. 
+</ul>
+
+<h3 class="heading">Changes from .28.3 to .29 (Feb 6, 2000)</h3>
+
+     <ul>
+<li>Fixed a bug in the pipe mode with lines that start with
+`<samp><span class="samp">^$$</span></samp>'.
+
+     <li>Added support for ignoring all words less than or equal to a specified length
+
+     <li>New soundslike code based thanks to the contribution of Bj&ouml;rn Jacke. 
+It now gets all of its data from a table making it easier for other
+people to add soundslike code for their native language.  He also
+converted the metaphone algorithm to table form, eliminating the need
+for the old metaphone code.
+
+     <li>Major redesign of the suggestion code for better results.
+
+     <li>Changed the format of the personal word lists.  In most cases it
+should be converted automatically.
+
+     <li>Changed the format of the main word list.
+
+     <li>Name space cleanup for more consistent naming.  I now use name spaces
+which means that gcc 2.8.* and egcs 1.0.* will no longer cut it.
+
+     <li>Used file locks when reading and saving the personal dictionaries so
+that it truly multiprocesses safely.
+
+     <li>Added rudimentary filter support.
+
+     <li>Reworked the configuration system once again.  However, the changes to
+the end user who does not directly use my library should be minimal.
+
+     <li>Rewrote my code that handles parsing command line parameters so that
+it no longer used popt as it was causing too many problems and didn't
+integrate well with my new configuration system.
+
+     <li>Fixed pipe mode so that it will properly ignore lines starting with
+'~' for better Ispell compatibility.
+
+     <li>Aspell now has a new home page at
+<a href="http://aspell.sourceforge.net/">http://aspell.sourceforge.net/</a>.  Please make note of the new
+URL.
+
+     <li>Miscellaneous manual fixes and clarifications. 
+</ul>
+
+<h3 class="heading">Changes from .28.2.1 to .28.3 (Nov 20, 1999)</h3>
+
+     <ul>
+<li>Fixed a bug that caused Aspell to crash when spell checking words over
+60 characters long.
+
+     <li>Reworked <strong>aspell check</strong> so that
+          <ol type=1 start=1>
+<li>You no longer have to hit enter when making a choice.
+
+          <li>It will now overwrite the original file instead of creating a new
+file.  An optional backup can be made by using the -b option.
+          </ol>
+
+     <li>Fixed a few bugs in data.cc. 
+</ul>
+
+<h3 class="heading">Changes from .28.2 to .28.2.1 (Aug 25, 1999)</h3>
+
+     <ul>
+<li>Fixed the version number for the shared library.
+
+     <li>Fixed a problem with undefined references when linking to the shared library. 
+</ul>
+
+<h3 class="heading">Changes from .28.1 to .28.2 (Aug 25, 1999)</h3>
+
+     <ul>
+<li>Fixed a bunch of bugs in the language and configuration classes.
+
+     <li>Minor changes in the code so that it could compile with the new gcc
+2.95(.1).
+
+     <li>Changed the output of <code>dump config</code> so that default values are
+given the value <code>&lt;default&gt;</code>.  This means that the output can
+be used to create a configuration file.
+
+     <li>Added notes on using Aspell with VIM. 
+</ul>
+
+<h3 class="heading">Changes from .28 to .28.1 (July 27, 1999)</h3>
+
+     <ul>
+<li>Removed some debug output
+
+     <li>Changed notes on compiling with gcc 2.8.* as I managed to get it to
+compile on my school account
+
+     <li>Avoided including <strong>stdexcept</strong> in <samp><span class="file">const_string.hh</span></samp> so that
+I could get Aspell to compile on my school account with gcc 2.8.1. 
+</ul>
+
+<h3 class="heading">Changes from .27.2 to .28 (July 25, 1999)</h3>
+
+     <ul>
+Provided an iterator for the replacement classes.
+
+     <li>Added support for dumping and creating and merging the personal and
+replacement word lists.
+
+     <li>Changed the Aspell utility command line a bit, it now used popt.
+
+     <li>Totally reworked Aspell configuration system.  Now Aspell could get
+configuration from any of 5 sources: the command line, the environment
+variable <samp><span class="env">ASPELL_CONF</span></samp>, the personal configuration file, the
+global configuration file, and finally the compiled-in defaults.
+
+     <li>Totally reworked the language class in preparation for my new language
+code.  See <a href="http://aspell.sourceforge.net/international/">http://aspell.sourceforge.net/international/</a> for more
+information of what I have in store.
+
+     <li>Added some options to the configure script: &ndash;enable-dict-dir=DIR,
+&ndash;enable-doc-dir=DIR, &ndash;enable-debug, and &ndash;enable-opt
+
+     <li>Removed some old header files.
+
+     <li>Reorganized the directory structure a bit
+
+     <li>Made the text version of the manual pages slightly easier to read
+
+     <li>Used the `<samp><span class="samp">\url</span></samp>' command for urls for better formating of the
+printed version. 
+</ul>
+
+<h3 class="heading">Changes from .27.1 to .27.2 (Mar 1, 1999)</h3>
+
+     <ul>
+<li>Fixed a major bug that caused Aspell to dump core when used without
+any arguments
+
+     <li>Fixed another major bug that caused Aspell to do nothing when used in
+interactive mode.
+
+     <li>Added an option to exit in Aspell's interactive mode.
+
+     <li>Removed some old documentation files from the distribution.
+
+     <li>Minor changes to the the section on using Aspell with egcs.
+
+     <li>Minor changes to remove -Wall warnings. 
+</ul>
+
+<h3 class="heading">Changes from .27 to .27.1 (Feb 24, 1999)</h3>
+
+     <ul>
+<li>Fixed a minor compile problem.
+
+     <li>Updated the section on using Aspell with egcs to it.  It was now more
+clear why the patch was necessary. 
+</ul>
+
+<h3 class="heading">Changes from .26.2 to .27 (Feb 22, 1999)</h3>
+
+     <ul>
+<li>Totally reworked the C++ library which means you may need to change
+some things in your code.
+
+     <li>Added support for detachable and multiple personal dictionaries in the
+C++ class library.
+
+     <li>The C++ class library now throws exceptions.
+
+     <li>Reworked Aspell ability to learn from users misspellings a bit so that
+it now has a memory.  For more information see <a href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">Notes on Storing Replacement Pairs</a>.
+
+     <li>Upgraded autoconf to version 2.13 and automake to version 1.4 for
+better portability.
+
+     <li>Fixed the configuration so the <code>make dist</code> will work.  From now on
+Aspell will be distributed with <code>make dist</code>.
+
+     <li>Added support to skip over URL's, email addresses and host names.
+
+     <li>Added support for dumping the master and personal word list.  You can
+now also merge a personal word list.  Type aspell -help for help on
+using this feature.
+
+     <li>Reorganized the source code.
+
+     <li>Started using proper version numbers for the shared library.
+
+     <li>Fixed a bug that caused Aspell to crash when adding certain
+replacement pairs.
+
+     <li>Fixed the problem with duplicate lines when exiting pipe mode for
+good. 
+</ul>
+
+<h3 class="heading">Changed from .26.1 to .26.2 (Jan 3, 1998)</h3>
+
+     <ul>
+<li>Fixed another compile problem.  Hopefully this time it will really
+compile OK on other peoples machines. 
+</ul>
+
+<h3 class="heading">Changed from .26 to .26.1 (Jan 3, 1998)</h3>
+
+     <ul>
+<li>Fixed a small compile problem in <samp><span class="file">as_data.cc</span></samp>. 
+</ul>
+
+<h3 class="heading">Changed from .25.1 to .26 (Jan 3, 1999)</h3>
+
+     <ul>
+<li>Fixed a bug that caused duplicate items to be displayed in the
+suggestion list for good.  (If it still does it please send me email.)
+
+     <li>Added the ability for Aspell to learn form the users misspellings.
+
+     <li>Library Interface changes.  Still more to come <small class="dots">...</small>.
+
+     <li>Is now multiprocess safe.  When a personal dictionary (or replacement
+list) is saved it will now first update the list against the dictionary
+on disk in case another process modified it.
+
+     <li>Fixed the bug that caused duplicate output when used non interactively
+in pipe mode.
+
+     <li>Dropped support for gcc 2.7.2 as the C++ compiler.
+
+     <li>Updated the How Aspell Works (<a href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">Aspell Suggestion Strategy</a>.)
+
+     <li>Added support for the <samp><span class="env">ASPELL_DATA_DIR</span></samp> environment variable. 
+</ul>
+
+<h3 class="heading">Changes from .25 to .25.1 (Dec 10, 1998)</h3>
+
+     <ul>
+<li>Fixed the version number so that Aspell reports the correct version
+number.
+
+     <li>Changed the note on gcc 2.7.2 compilers to make it clear that only the
+C++ compiler cannot be gcc 2.7.2, it is OK if the C compiler is gcc
+2.7.2.
+
+     <li>Updated the TODO list and reorganized it a bit.
+
+     <li>Fixed the directory so that all the documentation will get installed
+in <tt>${prefix}/doc/aspell</tt> instead of half of it in
+<tt>${prefix}/doc/aspell</tt> and half of it in
+<tt>${prefix}/doc/kspell</tt>. 
+</ul>
+
+<h3 class="heading">Changes from .24 to .25 (Nov 23, 1998)</h3>
+
+     <ul>
+<li>Total rework of how the main word list is stored.  Start up time
+decreased to about 1/3 of what it was in .24 and memory usage
+decreased to about 2/3.  (When used with the provided word list on a
+Linux system).
+
+     <p>Also the format and default locations of the main word list data files
+changed in the process and the data is now machine dependent.  The
+personal word list format, however, stayed the same.
+
+     <li>Changed the scoring method to produce slightly better results with
+words like the vs.  teh.  And other simpler misspellings where two
+letters are swapped.
+
+     <li>Fixed the very unpredictable behavior of the `<samp><span class="samp">*</span></samp>', `<samp><span class="samp">&amp;</span></samp>',
+`<samp><span class="samp">@</span></samp>' commands in the pipe mode.
+
+     <li>Added documentations for Aspell pipe mode (also known as
+<samp><span class="command">ispell -a</span></samp> compatibility mode)
+
+     <li>Added a bunch of Aspell specific extensions to the pipe mode and
+documented them.
+
+     <li>Documented the <code>to_soundslike</code> and <code>soundslike</code> methods for
+the <code>aspell</code> class.
+
+     <li>Changed the scoring method to produce better results for words like
+<em>fone</em> vs <em>phone</em> and other words that have a spelling that
+doesn't directly relate to how the word sounds by using the phoneme
+equivalent of the word in the scoring of it.
+
+     <li>Added the <code>to_phoneme</code> and <code>have_phoneme</code> methods to the
+<code>SC_Language</code> class.
+
+     <li>Added the <code>to_phoneme</code> method to the <code>aspell</code> class.
+
+     <li>Added the framework for being able to learn from the users
+misspelling.  Right now it just keeps a log of replacements.
+
+     <li>Redid <samp><span class="file">stl_rope-30.diff</span></samp>.  For some reason the version of patch
+on my system refused it.
+
+     <li>Rewrite of the &ldquo;<em>Using as a replacement for Ispell</em>&rdquo; section
+and added the <code>run-with-aspell</code> utility as a replacement of the
+old method of mapping Ispell to Aspell.
+
+     <li>Fixed a bug that caused duplicate words to appear in the suggestion
+list. 
+</ul>
+
+<h3 class="heading">Changes from .23 to .24 (Nov 8, 1998)</h3>
+
+     <ul>
+<li>Fixed my code so that it can once again compile with g++ 2.7.2.
+
+     <li>Rewrote the How It Works chapter.
+
+     <li>Rewrote the Requirement section and added notes on compiling with g++
+2.7.2.
+
+     <li>Added a To Do chapter.
+
+     <li>Added a Glossary and References chapter.
+
+     <li>Other minor documentation improvements.
+
+     <li>Internal code documentation improvements. 
+</ul>
+
+<h3 class="heading">Changes from .22.1 to .23 (Oct 31, 1998)</h3>
+
+     <ul>
+<li>Minor documentation fixes.
+
+     <li>Changed the scoring strategy for words with 3 or less letters.  This
+cut the number of words returned for these roughly in half.
+
+     <li>Expanded the word list to also include <strong>american.0</strong> and
+<strong>american.1</strong> from the Ispell distribution.  It now includes
+<strong>english.0</strong>, <strong>english.1</strong>, <strong>american.0</strong> and
+<strong>american.1</strong> from the directory <samp><span class="file">languages/english</span></samp>
+provided with Ispell 3.1.20.
+
+     <li>Added a link to the location of the latest Ispell.el in the
+documentation.
+
+     <li>Started a C interface and added some rough documentation for it. 
+</ul>
+
+<h3 class="heading">Changes from .22 to .22.1 (Oct 27, 1998)</h3>
+
+     <ul>
+<li>Minor bug fixes.  I was deleting arrays with delete rather than
+delete[].  I was suprised that this had not created a problem.
+
+     <li>Added a simple test program to test for a memory leak present on some
+systems.  (Only debian slink at the moment.) See the file
+memleak-test.cc for more info. 
+</ul>
+
+<h3 class="heading">Changes from .21 to .22 (Oct 26, 1998)</h3>
+
+     <ul>
+<li>Major redesign of the scoring method.  It now uses absolute distances
+rather than relative scores for more consistent results.  See
+<samp><span class="file">suggest.cc</span></samp> for more info.
+
+     <li>Suggest code rewritten in several places, however the core process
+stayed the same.
+
+     <li>The <code>suggest_ultra</code> method temporarily does nothing.  It should
+be working again by the next release. 
+</ul>
+
+<h3 class="heading">Changes from .20 to .21 (Oct 13, 1998)</h3>
+
+     <ul>
+<li>Added documentation for aspell::Error
+
+     <li>
+Changed the library name from <code>libspell</code> to <code>libaspell</code>.  It
+should never have been <code>libspell</code> in the first place.  Sorry for
+the incompatibility.
+
+     <li>Added <samp><span class="file">as_error.hh</span></samp> to the list of files copied to the include
+directory so that you can actually use the library outside of the
+source dir.
+
+     <li>Fixed bug that caused a segmentation fault with words where the only
+suggestions was inserting a space or hyphen such as in
+<strong>ledgerline</strong>.
+
+     <li>Added the <strong>score</strong> method to <code>aspell</code>.
+
+     <li>Changed the scoring method to deal with word when the user uses "f" in
+place of "ph" a lot better. 
+</ul>
+
+<h3 class="heading">Changes from .11 to .20 (Oct 10, 1998)</h3>
+
+     <ul>
+<li><em>Name change</em>.  Everything that was Kspell is now Aspell.  Sorry,
+the name Kspell was already used by KDE and I didn't want to cause any
+confusion.
+
+     <li>Fixed a bug that causes a segmentation fault when the <samp><span class="env">HOME</span></samp>
+environment variable doesn't exist. 
+</ul>
+
+<h3 class="heading">Changes from .10 to .11 (Sep 12, 1998)</h3>
+
+     <ul>
+<li>Overhaul of the SC_Language class
+
+     <li>Added documentation for international support
+
+     <li>Added documentation for the C++ library
+
+     <li>Other minor bug fixes. 
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Compiling-the-Word-List.html b/manual/aspell.html/Compiling-the-Word-List.html
new file mode 100644 (file)
index 0000000..70990fe
--- /dev/null
@@ -0,0 +1,58 @@
+<html lang="en">
+<head>
+<title>Compiling the Word List - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="The-Language-Data-File.html#The-Language-Data-File" title="The Language Data File">
+<link rel="next" href="Phonetic-Code.html#Phonetic-Code" title="Phonetic Code">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Compiling-the-Word-List"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Phonetic-Code.html#Phonetic-Code">Phonetic Code</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="The-Language-Data-File.html#The-Language-Data-File">The Language Data File</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.2 Compiling the Word List</h3>
+
+<p>Once you have a working language data file installed in the right
+place you are ready to compile the main word list.  To find out what
+to do, see <a href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>.  This section also
+includes instructions for creating the AWLI file.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Compound-Words.html b/manual/aspell.html/Compound-Words.html
new file mode 100644 (file)
index 0000000..0a6bba3
--- /dev/null
@@ -0,0 +1,133 @@
+<html lang="en">
+<head>
+<title>Compound Words - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="next" href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them" title="Words With Symbols in Them">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Compound-Words"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">Words With Symbols in Them</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">C.1 Compound Words</h3>
+
+<p>In some languages, such as German, it is acceptable to string two words
+together, thus forming a compound word.  However, there are rules to
+when this can be done.  Furthermore, it is not always sufficient to
+simply concatenate the two words.  For example, sometimes a letter is
+inserted between the two words.  Aspell currently has support for
+unconditionally stringing words together.  I tried implementing more
+sophisticated support for compound words in Aspell but it was too
+limiting and no one used it.
+
+   <p>After receiving feedback from several people it seems that acceptable
+support for compound words involved two basically independent parts. 
+If this is not sufficient for your language please let me know.
+
+<h3 class="heading">Part One</h3>
+
+<p>Describes how the word needs to be changed when forming a compound
+
+<pre class="example">     CMP &lt;flag&gt; &lt;strip&gt; &lt;add&gt; &lt;cond&gt; &lt;cond2&gt;
+     
+     &lt;flag&gt;  is the compound flag
+     &lt;strip&gt; is the string to strip or 0 for the null string
+     &lt;add&gt;   is the string to add or 0 for the null string
+     &lt;cond&gt;  is the condition to match at the end of the current word
+     &lt;cond2&gt; is the condition to match at the beginning of the next word
+</pre>
+   <p class="noindent">All but the last field are the same as a suffix entry in the existing
+affix code.
+
+   <p>&lt;cond&gt; is a simplified regular expression.  Some examples:
+<pre class="example">     . (for anything)
+     e
+     [^aeiou]y
+     [^ey]
+     [aeiou]y
+</pre>
+   <p>It does not seem necessary to change the beginning of a word when
+forming compounds
+
+<h3 class="heading">Part Two</h3>
+
+<p>Describes the position a word can appear in (beginning, middle, or
+end) and with which words.
+
+   <p>To do this each word can be assigned a category.  Then each category
+can be given a set of rules to describe how it can be used in a
+compound word for example
+
+<pre class="example">     A + B: indicates that category A may appear at the beginning of a
+       word when followed by a category B word.  When combined it is then
+       considered a category B word.
+     A + C + B: here a C word may only appear between an A or B word
+     A + A + B
+     A + A
+     A + A + A
+     etc..
+</pre>
+   <p>I have not decided if a word should be allowed to belong to more than
+one category as a new category can be created in necessary to mean
+words in both category A and B for example.
+
+<h4 class="appendixsubsec">C.1.1 To Implement</h4>
+
+<p>To implement support for compound words based on the above description
+the following will need to be done:
+
+     <ol type=1 start=1>
+
+     <li>expand the affix code to support special compound flags as
+described in part one
+
+     <li>write code to store the conditions as described in part two
+
+     <li>expand the compound checking code to check against the conditions
+
+     <li>expand the dictionary format to store the necessary compound info
+with the word
+
+        </ol>
+
+   <p>I don't know when I will be able to actually implement this.  If you
+would like to try please let me know.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Context-Sensitive-Spelling.html b/manual/aspell.html/Context-Sensitive-Spelling.html
new file mode 100644 (file)
index 0000000..7776ae5
--- /dev/null
@@ -0,0 +1,58 @@
+<html lang="en">
+<head>
+<title>Context Sensitive Spelling - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="prev" href="German-Sharp-S.html#German-Sharp-S" title="German Sharp S">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Context-Sensitive-Spelling"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="German-Sharp-S.html#German-Sharp-S">German Sharp S</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">C.5 Context Sensitive Spelling</h3>
+
+<p>In some language, such as Luxembourgish, the spelling of a word depends
+on which words surround it.  For example the the letter `<samp><span class="samp">n</span></samp>' at the
+end of a word will disappear if it is followed by another word starting
+with a certain letter such as an `<samp><span class="samp">s</span></samp>'.  However, it can probably get
+more complicated than that.  I would like to know how complicated before
+I attempt to implement support for context sensitive spelling.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Controlling-the-Behavior-of-Run_002dtogether-Words.html b/manual/aspell.html/Controlling-the-Behavior-of-Run_002dtogether-Words.html
new file mode 100644 (file)
index 0000000..69681fc
--- /dev/null
@@ -0,0 +1,68 @@
+<html lang="en">
+<head>
+<title>Controlling the Behavior of Run-together Words - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Affix-Compression.html#Affix-Compression" title="Affix Compression">
+<link rel="next" href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set" title="Creating A New Character Set">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Controlling-the-Behavior-of-Run-together-Words"></a>
+<a name="Controlling-the-Behavior-of-Run_002dtogether-Words"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">Creating A New Character Set</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Affix-Compression.html#Affix-Compression">Affix Compression</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.7 Controlling the Behavior of Run-together Words</h3>
+
+<p>Aspell currently has support for unconditionally accepting run-together
+words.
+
+   <p>Support for unconditionally accepting run-together words can either be
+turned on in the language data file or as a normal option via the
+<samp><span class="option">run-together</span></samp> option.  The <samp><span class="option">run-together-limit</span></samp> options
+controls the maximum number of words that can be strung together, the
+default is normally 2.  The <samp><span class="option">run-together-min</span></samp> options
+controls the minimum length of the individual components of the run
+together word, the default is normally 3.  Both the
+<samp><span class="option">run-together-limit</span></samp> and <samp><span class="option">run-together-min</span></samp> option may
+be specified in both the language data file or as a normal option.
+
+<!-- FIXME: Add note about compound word support when suggesting. -->
+</body></html>
+
diff --git a/manual/aspell.html/Copying.html b/manual/aspell.html/Copying.html
new file mode 100644 (file)
index 0000000..8db020b
--- /dev/null
@@ -0,0 +1,74 @@
+<html lang="en">
+<head>
+<title>Copying - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Authors.html#Authors" title="Authors">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Copying"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Authors.html#Authors">Authors</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix H Copying</h2>
+
+<p>Copyright &copy; 2000&ndash;2006 Kevin Atkinson.
+
+   <p>Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+   <p>The library and utility program is copyright &copy; 2000&ndash;2006 by
+Kevin Atkinson.  You can redistribute it and/or modify it under the
+terms of the GNU Lesser General Public License as (LGPL) published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+   <p>Certain parts of the library, as indicated at the top of the source
+file, are under a weaker license.  However, all parts of the library
+are LGPL Compatible.
+
+<ul class="menu">
+<li><a accesskey="1" href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>
+<li><a accesskey="2" href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">GNU Lesser General Public License</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Creating-A-New-Character-Set.html b/manual/aspell.html/Creating-A-New-Character-Set.html
new file mode 100644 (file)
index 0000000..b45af34
--- /dev/null
@@ -0,0 +1,71 @@
+<html lang="en">
+<head>
+<title>Creating A New Character Set - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words" title="Controlling the Behavior of Run-together Words">
+<link rel="next" href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package" title="Creating An Official Dictionary Package">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Creating-A-New-Character-Set"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package">Creating An Official Dictionary Package</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.8 Creating A New Character Set</h3>
+
+<p>If there is not a standard character set for your language then you
+can invent one.  The new charset will only be used by Aspell
+internally.  If the option <samp><span class="option">data-encoding</span></samp> is set to
+`<samp><span class="samp">utf-8</span></samp>', and your current locale character type is always set to
+`<samp><span class="samp">utf-8</span></samp>', then you can use UTF-8 for everything and not
+worry yourself that an 8-bit character set is being used internally. 
+If your language has no more than 210 distinct symbols, including
+different capitalizations and accents, then Aspell can support it.
+
+   <p>The first thing to do is to download the Aspell lang package
+(see <a href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package">Creating An Official Dictionary Package</a>)
+and check if one of the provided charsets in this package will suite
+your needs.  Non-standard character sets are provided for many scripts
+and languages.  If not, then see the included <samp><span class="file">README</span></samp> file for
+instructions on creating a new one.  Version 0.1, and 0.2 of
+mkchardata <em>will not</em> work as the format of the character data
+file has changed.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Creating-An-Official-Dictionary-Package.html b/manual/aspell.html/Creating-An-Official-Dictionary-Package.html
new file mode 100644 (file)
index 0000000..b53b412
--- /dev/null
@@ -0,0 +1,60 @@
+<html lang="en">
+<head>
+<title>Creating An Official Dictionary Package - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set" title="Creating A New Character Set">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Creating-An-Official-Dictionary-Package"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">Creating A New Character Set</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.9 Creating An Official Dictionary Package</h3>
+
+<p>Once you have a basic dictionary working, you should consider creating
+an official package so that it can be distributed with Aspell. To do
+so download the aspell-lang package available at
+<a href="ftp://ftp.gnu.org/gnu/aspell/aspell-lang-<var>version</var>.tar.bz2">ftp://ftp.gnu.org/gnu/aspell/aspell-lang-<var>version</var>.tar.bz2</a>
+or in the &ldquo;aspell-lang&rdquo; module in the Aspell CVS repository
+available at <a href="https://savannah.gnu.org/cvs/?group=aspell">https://savannah.gnu.org/cvs/?group=aspell</a>.  See
+the included <samp><span class="file">README</span></samp> file for what to do.  Or, send mail to
+aspell-dict at gnu org asking for help on how to get started.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Creating-an-Individual-Word-List.html b/manual/aspell.html/Creating-an-Individual-Word-List.html
new file mode 100644 (file)
index 0000000..613f83c
--- /dev/null
@@ -0,0 +1,119 @@
+<html lang="en">
+<head>
+<title>Creating an Individual Word List - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List" title="Dumping the Contents of the Word List">
+<link rel="next" href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists" title="Working With Affix Info in Word Lists">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Creating-an-Individual-Word-List"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">Working With Affix Info in Word Lists</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List">Dumping the Contents of the Word List</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.5 Creating an Individual Word List</h3>
+
+<p>To create an individual main word list from a list of words use the
+command
+
+<pre class="example">     aspell --lang=<var>lang</var> create master ./<var>base</var> &lt; <var>wordlist</var>
+</pre>
+   <p class="noindent">where <var>base</var> is the name of the word list and
+<var>wordlist</var> is the list of words separated by white space. 
+The name of the word list will automatically be converted to all
+lowercase.  The <code>./</code> is important because without it Aspell will
+create the word list in the normal word list directory.  If you are
+trying to create a word list in a language other than English check
+the Aspell <samp><span class="option">data-dir</span></samp> (usually <samp><span class="file">/usr/share/aspell</span></samp>, use
+<code>aspell dump config</code> to find out what it is on your system) to
+see if a language data file exists for your language.  If not you will
+need to create one.  For more information on using Aspell with other
+languages <a href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>.
+
+   <p>This will create the file <samp><var>base</var></samp> in the current directory. 
+To use the new word list copy the file to the normal word list
+directory (use <code>aspell config</code> to find out what it is) and use
+the option <samp><span class="option">--master=</span><var>base</var></samp>.
+
+   <p>During the creating of the dictionary you may get a number of warnings
+or errors about invalid words or affixes.  By default Aspell will skip
+any invalid words and remove invalid affixes.  If you rather that Aspell
+simply accepts all words given then the option
+<samp><span class="option">--dont-validate-words</span></samp> can be specified.  To avoid checking if
+affixes are valid use the option <samp><span class="option">--dont-validate-affixes</span></samp>. 
+However, rather than disable checking, it is preferable to clean the
+input word list.  This can be done by using the command
+
+<pre class="example">     aspell --local-data-dir=./ --lang=<var>lang</var> clean &lt; <var>wordlist</var> &gt; <var>result</var>
+</pre>
+   <p class="noindent">which will clean the word list and output the results to <var>result</var>. 
+By default it will remove invalid characters from the beginning and end
+of a word before resorting to skipping the word.  If you rather it just
+skip the words than add the keyword strict:
+
+<pre class="example">     aspell --local-data-dir=./ --lang=<var>lang</var> clean strict &lt; <var>wordlist</var> &gt; <var>result</var>
+</pre>
+   <p>The option <samp><span class="option">--clean-words</span></samp> can be be added when creating a
+dictionary if you want Aspell to remove invalid characters from the
+beginning and end of a word like the "clean" command does. In addition
+the options <samp><span class="option">--dont-skip-invalid-words</span></samp> and
+<samp><span class="option">--dont-clean-affixes</span></samp> can be specified to turn the warnings into
+errors.
+
+   <p>The compiled dictionary file are endian order dependent.  When a
+dictionary is loaded the endian order is checked.  Please do not
+distribute the compiled dictionaries unless you are only distributing
+them for a particular platform such as you would a binary.
+
+   <p>Aspell is now also able to use special <code>multi</code> dictionaries.  for
+more information <a href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>.
+
+   <p>A personal and replacement word list can be created in a similar fashion.
+
+<!-- FIXME: add notes about how affix compression works when creating -->
+<!-- dictionaries. -->
+<h4 class="subsection">5.5.1 Format of the Replacement Word List</h4>
+
+<p>The replacement word list has each replacement pair on its own line in
+the following format
+
+<pre class="example">     <i>misspelled_word</i> <i>correction</i>
+</pre>
+   </body></html>
+
diff --git a/manual/aspell.html/Curses-Notes.html b/manual/aspell.html/Curses-Notes.html
new file mode 100644 (file)
index 0000000..2a5793b
--- /dev/null
@@ -0,0 +1,94 @@
+<html lang="en">
+<head>
+<title>Curses Notes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022" title="HTML Manuals and "make clean"">
+<link rel="next" href="Loadable-Filter-Notes.html#Loadable-Filter-Notes" title="Loadable Filter Notes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Curses-Notes"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Loadable-Filter-Notes.html#Loadable-Filter-Notes">Loadable Filter Notes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022">HTML Manuals and &quot;make clean&quot;</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.3 Curses Notes</h3>
+
+<p>If you are having problems compiling <samp><span class="file">check_funs.cpp</span></samp> then the
+most likely reason is due to incompatibilities with the curses
+implementation on your system.  You should first try disabling the
+&ldquo;wide&rdquo; curses library by with the <samp><span class="option">--disable-wide-curses</span></samp>
+configure option..  By doing so you will lose support for properly
+displaying UTF-8 characters but you may still be able to get the full
+screen interface.  If this fails than you can disable curses support
+altogether with the <samp><span class="option">--disable-curses</span></samp> configure option.  By
+doing this you will lose the nice full screen interface but hopefully
+you will be able to at least get Aspell to compile correctly.
+
+   <p>If the curses library is installed in a non-standard location than you
+can specify the library and include directory with
+<samp><span class="option">--enable-curses=</span><var>lib</var></samp> and
+<samp><span class="option">--enable-curses-include=</span><var>dir</var></samp>.
+
+   <p><samp><var>lib</var></samp> can either be the complete path of the library&mdash;for
+example
+<pre class="example">     /usr/local/curses/libcurses.a
+</pre>
+   <p>or the name of the library (for example
+<samp><span class="file">ncurses</span></samp>) or a combined location and library in the form
+<samp><span class="option">-L</span><var>libdir</var><span class="option"> -l</span><var>lib</var></samp> (for example
+<samp><span class="option">-L/usr/local/ncurses/lib -lncurses</span></samp>).
+
+   <p><var>dir</var> is the location of the curses header files (for example
+<samp><span class="file">/usr/local/ncurses/include</span></samp>).
+
+<h4 class="appendixsubsec">E.3.1 Unicode Support</h4>
+
+<p>In order for Aspell to correctly spell check UTF-8 documents in full
+screen mode the "wide" version of the curses library must be
+installed.  This is different from the normal version of curses
+library, and is normally named <samp><span class="file">libcursesw</span></samp> (with a `<samp><span class="samp">w</span></samp>' at
+the end) or <samp><span class="file">libncursesw</span></samp>.  UTF-8 documents will not display
+correctly without the right curses version installed.
+
+   <p>In addition your system must also support the <code>mblen</code> function. 
+Although this function was defined in the ISO C89 standard (ANSI
+X3.159-1989), not all systems have it.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Customizing-Aspell.html b/manual/aspell.html/Customizing-Aspell.html
new file mode 100644 (file)
index 0000000..d2baaac
--- /dev/null
@@ -0,0 +1,79 @@
+<html lang="en">
+<head>
+<title>Customizing Aspell - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Basic-Usage.html#Basic-Usage" title="Basic Usage">
+<link rel="next" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Customizing-Aspell"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">4 Customizing Aspell</h2>
+
+<p>The behavior of Aspell can be changed by any number of options which
+can be specified at either the command line, the environment variable
+<samp><span class="env">ASPELL_CONF</span></samp>, a personal configuration file, or a global
+configuration file.  Options specified on the command line override
+options specified by the environment variable.  Options specified by
+the environment variable override options specified by either of the
+configuration files.  Finally options specified by the personal
+configuration file override options specified in the global
+configuration file.  Options specified in the environment variable
+<samp><span class="env">ASPELL_CONF</span></samp>, a personal configuration file, or a global
+configuration file will take effect no matter how Aspell is used which
+includes being used by other applications.
+
+   <p>Aspell has three basic types of options: <dfn>boolean</dfn>, <dfn>value</dfn>,
+and <dfn>list</dfn>.
+
+   <p><dfn>Boolean</dfn> options are either enabled or disabled, <dfn>value</dfn>
+options take a specific value, and <dfn>list</dfn> options can either have
+entries added or removed from the list.
+
+<ul class="menu">
+<li><a accesskey="1" href="Specifying-Options.html#Specifying-Options">Specifying Options</a>
+<li><a accesskey="2" href="The-Options.html#The-Options">The Options</a>
+<li><a accesskey="3" href="Dumping-Configuration-Values.html#Dumping-Configuration-Values">Dumping Configuration Values</a>
+<li><a accesskey="4" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Dictionary-Naming.html b/manual/aspell.html/Dictionary-Naming.html
new file mode 100644 (file)
index 0000000..1a0855e
--- /dev/null
@@ -0,0 +1,84 @@
+<html lang="en">
+<head>
+<title>Dictionary Naming - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries" title="Using Multi Dictionaries">
+<link rel="next" href="AWLI-files.html#AWLI-files" title="AWLI files">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Dictionary-Naming"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="AWLI-files.html#AWLI-files">AWLI files</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries">Using Multi Dictionaries</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.9 Dictionary Naming</h3>
+
+<p>In order for Aspell to be able to correctly recognize a dictionary
+based on the setting of the <samp><span class="env">LANG</span></samp> environment variable the
+dictionaries need to be located somewhere Aspell can find them and
+they need to be <em>multi</em> dictionaries.  Where Aspell looks for
+dictionaries depends on the value of the <samp><span class="option">dict-dir</span></samp> and
+<samp><span class="option">word-list-path</span></samp> option.
+
+   <p><samp><span class="option">dict-dir</span></samp> is generally <samp><var>prefix</var><span class="file">/lib/aspell</span></samp>, and
+<samp><span class="option">word-list-path</span></samp> is generally empty.
+
+   <p>Each dictionary that you expect Aspell to be able to find needs to
+have a name in the following format:
+
+<pre class="example">     <var>language</var>[_<var>region</var>][-<var>variety</var>][-<var>size</var>].multi
+</pre>
+   <p class="noindent">where <var>language</var> is the two letter language code, <var>region</var> is
+the two letter region code, <var>variety</var> is any extra information to
+distinguish the word list from other ones with the same language and
+spelling.  Multiple varieties can be used by separating them with a '-'. 
+Finally, <var>size</var> is the size of the dictionary.  If no size is
+specified then the default size of 60 will be assumed.
+
+   <p>For example:
+
+<pre class="example">     en.multi
+     en_US.multi
+     en-medical.multi
+     en-medical-85.multi
+     en-85.multi
+     de.multi
+</pre>
+   </body></html>
+
diff --git a/manual/aspell.html/Differences-From-Ispell.html b/manual/aspell.html/Differences-From-Ispell.html
new file mode 100644 (file)
index 0000000..d550c31
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Using-Aspell-as-a-Replacement-for-Ispell.html#Differences%20From%20Ispell">
diff --git a/manual/aspell.html/Dumping-Configuration-Values.html b/manual/aspell.html/Dumping-Configuration-Values.html
new file mode 100644 (file)
index 0000000..aa111ed
--- /dev/null
@@ -0,0 +1,63 @@
+<html lang="en">
+<head>
+<title>Dumping Configuration Values - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link rel="prev" href="The-Options.html#The-Options" title="The Options">
+<link rel="next" href="Notes-on-Various-Options.html#Notes-on-Various-Options" title="Notes on Various Options">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Dumping-Configuration-Values"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="The-Options.html#The-Options">The Options</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">4.3 Dumping Configuration Values</h3>
+
+<p>To find out the current value of all the options use the command
+<samp><span class="command">aspell dump config</span></samp>.  This will dump the current Aspell
+configuration to standard output.  The format of the contents dumped
+is such that it can be used as either the global or your personal
+configuration file.
+
+   <p>To find out the current value of a particular option use
+<samp><span class="command">aspell config </span><var>option</var></samp>.  This will print out the value of
+<var>option</var> to <code>stdout</code> and nothing else.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Dumping-the-Contents-of-the-Word-List.html b/manual/aspell.html/Dumping-the-Contents-of-the-Word-List.html
new file mode 100644 (file)
index 0000000..ed5d40e
--- /dev/null
@@ -0,0 +1,65 @@
+<html lang="en">
+<head>
+<title>Dumping the Contents of the Word List - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries" title="Listing Available Dictionaries">
+<link rel="next" href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List" title="Creating an Individual Word List">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Dumping-the-Contents-of-the-Word-List"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">Creating an Individual Word List</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries">Listing Available Dictionaries</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.4 Dumping the Contents of the Word List</h3>
+
+<p>The dump command in <samp><span class="command">aspell</span></samp> will simply dump the contents of
+a word list to <samp><span class="file">stdout</span></samp> in a format that can be read back in with
+<samp><span class="command">aspell create</span></samp>.
+
+   <p>If no word list is specified the command will act on the default one. 
+For example the command
+
+<pre class="example">     aspell dump personal
+</pre>
+   <p class="noindent">will simply dump the contents of the current personal word list to
+<samp><span class="file">stdout</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Email-the-Personal-Dictionary.html b/manual/aspell.html/Email-the-Personal-Dictionary.html
new file mode 100644 (file)
index 0000000..ebc0d7c
--- /dev/null
@@ -0,0 +1,78 @@
+<html lang="en">
+<head>
+<title>Email the Personal Dictionary - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Items.html#Notes-on-Various-Items" title="Notes on Various Items">
+<link rel="prev" href="Hidden-Markov-Model.html#Hidden-Markov-Model" title="Hidden Markov Model">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Email-the-Personal-Dictionary"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Hidden-Markov-Model.html#Hidden-Markov-Model">Hidden Markov Model</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>
+<hr>
+</div>
+
+<h4 class="appendixsubsec">D.3.3 Email the Personal Dictionary</h4>
+
+<p>Someone suggested in a personal email:
+
+   <blockquote>
+Have you thought of adding a function to Aspell, that - when the
+personal dictionary has grown significantly - sends the user's
+personal dictionary to the maintainer of the corresponding Aspell
+dictionary? (if the user allows it)
+
+        <p>It would be a very useful service to the dictionary maintainers, and I
+think most users can see their benefit in it too. 
+</blockquote>
+
+   <p>And I replied:
+
+   <blockquote>
+Yes I have considered something like that but not for the personal
+dictionaries but rather the replacement word list in order to get
+better test data for <a href="http://aspell.sourceforge.net/test/">http://aspell.sourceforge.net/test/</a>. 
+</blockquote>
+
+   <p>The problem is I don't know of a good way to do this since Aspell can
+also be used as a library.  It also is not a real high priority,
+especially since I would first need to learn how to send email within
+a C++ program.
+
+<!-- @node Installing -->
+<!-- @appendix Installing -->
+</body></html>
+
diff --git a/manual/aspell.html/Format-of-the-Personal-Dictionary.html b/manual/aspell.html/Format-of-the-Personal-Dictionary.html
new file mode 100644 (file)
index 0000000..2fdce8c
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=Format-of-the-Personal-and-Replacement-Dictionaries.html#Format%20of%20the%20Personal%20Dictionary">
diff --git a/manual/aspell.html/Format-of-the-Personal-and-Replacement-Dictionaries.html b/manual/aspell.html/Format-of-the-Personal-and-Replacement-Dictionaries.html
new file mode 100644 (file)
index 0000000..0074ade
--- /dev/null
@@ -0,0 +1,95 @@
+<html lang="en">
+<head>
+<title>Format of the Personal and Replacement Dictionaries - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists" title="Working With Affix Info in Word Lists">
+<link rel="next" href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries" title="Using Multi Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Format-of-the-Personal-and-Replacement-Dictionaries"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries">Using Multi Dictionaries</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">Working With Affix Info in Word Lists</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.7 Format of the Personal and Replacement Dictionaries</h3>
+
+<p><a name="Format-of-the-Personal-Dictionary"></a>
+
+<h4 class="subsection">5.7.1 Format of the Personal Dictionary</h4>
+
+<p>The personal dictionary generally has a filename of the form:
+
+<pre class="example">     .aspell.<var>lang</var>.pws
+</pre>
+   <p class="noindent">And the file itself contains two parts.  The first part is a
+header line of the form:
+
+<pre class="example">     personal_ws-1.1 <var>lang</var> <var>num</var> <i>[</i><var>encoding</var><i>]</i>
+</pre>
+   <p class="noindent">where <var>num</var> is the number of words in the list.  This number is
+only used as a hint, and thus does not have to be accurate.  When
+creating a new dictionary it is perfectly acceptable for <var>num</var> to
+be 0.  The <var>encoding</var> is optional and specifies the encoding of
+the word list.  If it is left out the encoding is expected to be in
+the default encoding for the language as specified by the
+<samp><span class="option">data-encoding</span></samp> option.  See <a href="data_002dencoding.html#data_002dencoding">data-encoding</a>.
+
+   <p>The second part of simply a word list with one word per line.
+
+<h4 class="subsection">5.7.2 Format of the Personal Replacement Dictionary</h4>
+
+<p>The personal replacement dictionary generally has a filename of the form:
+
+<pre class="example">     .aspell.<var>lang</var>.prepl
+</pre>
+   <p class="noindent">And the file itself contains two parts.  The first part is a
+header line of the form:
+
+<pre class="example">     personal_repl-1.1 <var>lang</var> <var>num</var> <i>[</i><var>encoding</var><i>]</i>
+</pre>
+   <p class="noindent">where <var>num</var> is currently unused and thus always 0.  As with the
+personal dictionary the <var>encoding</var> is optional.
+
+   <p>The second part simply a list of replacements with one replacement
+per line with each replacement pair has the following format:
+
+<pre class="example">     <var>misspelled_word</var> <var>correction</var>
+</pre>
+   </body></html>
+
diff --git a/manual/aspell.html/GNU-Free-Documentation-License.html b/manual/aspell.html/GNU-Free-Documentation-License.html
new file mode 100644 (file)
index 0000000..4e90596
--- /dev/null
@@ -0,0 +1,457 @@
+<html lang="en">
+<head>
+<title>GNU Free Documentation License - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Copying.html#Copying" title="Copying">
+<link rel="next" href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License" title="GNU Lesser General Public License">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="GNU-Free-Documentation-License"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">GNU Lesser General Public License</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Copying.html#Copying">Copying</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">H.1 GNU Free Documentation License</h3>
+
+<p><a name="index-FDL_002c-GNU-Free-Documentation-License-1"></a><div align="center">Version 1.2, November 2002</div>
+
+<pre class="display">     Copyright &copy; 2000,2001,2002 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+     
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+</pre>
+     <ol type=1 start=0>
+<li>PREAMBLE
+
+     <p>The purpose of this License is to make a manual, textbook, or other
+functional and useful document <dfn>free</dfn> in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially. 
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+     <p>This License is a kind of &ldquo;copyleft&rdquo;, which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+     <p>We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+     <li>APPLICABILITY AND DEFINITIONS
+
+     <p>This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The &ldquo;Document&rdquo;, below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as &ldquo;you&rdquo;.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+     <p>A &ldquo;Modified Version&rdquo; of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+     <p>A &ldquo;Secondary Section&rdquo; is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+     <p>The &ldquo;Invariant Sections&rdquo; are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+     <p>The &ldquo;Cover Texts&rdquo; are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+     <p>A &ldquo;Transparent&rdquo; copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent. 
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
+
+     <p>Examples of suitable formats for Transparent copies include plain
+<span class="sc">ascii</span> without markup, Texinfo input format, LaTeX input
+format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
+<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> designed for human modification.  Examples
+of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
+<acronym>JPG</acronym>.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, <acronym>SGML</acronym> or
+<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
+not generally available, and the machine-generated <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> produced by some word processors for
+output purposes only.
+
+     <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, &ldquo;Title Page&rdquo; means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+     <p>A section &ldquo;Entitled XYZ&rdquo; means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.)  To &ldquo;Preserve the Title&rdquo;
+of such a section when you modify the Document means that it remains a
+section &ldquo;Entitled XYZ&rdquo; according to this definition.
+
+     <p>The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+     <li>VERBATIM COPYING
+
+     <p>You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+     <p>You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+     <li>COPYING IN QUANTITY
+
+     <p>If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition. 
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+     <p>If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+     <p>If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material. 
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+     <p>It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+     <li>MODIFICATIONS
+
+     <p>You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+          <ol type=A start=1>
+<li>Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+          <li>List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+          <li>State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+          <li>Preserve all the copyright notices of the Document.
+
+          <li>Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+          <li>Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+          <li>Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+          <li>Include an unaltered copy of this License.
+
+          <li>Preserve the section Entitled &ldquo;History&rdquo;, Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled &ldquo;History&rdquo; in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+          <li>Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the &ldquo;History&rdquo; section. 
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+          <li>For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+          <li>Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+          <li>Delete any section Entitled &ldquo;Endorsements&rdquo;.  Such a section
+may not be included in the Modified Version.
+
+          <li>Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
+to conflict in title with any Invariant Section.
+
+          <li>Preserve any Warranty Disclaimers.
+          </ol>
+
+     <p>If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice. 
+These titles must be distinct from any other section titles.
+
+     <p>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
+nothing but endorsements of your Modified Version by various
+parties&mdash;for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+     <p>You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+     <p>The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+     <li>COMBINING DOCUMENTS
+
+     <p>You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+     <p>The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number. 
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+     <p>In the combination, you must combine any sections Entitled &ldquo;History&rdquo;
+in the various original documents, forming one section Entitled
+&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
+and any sections Entitled &ldquo;Dedications&rdquo;.  You must delete all
+sections Entitled &ldquo;Endorsements.&rdquo;
+
+     <li>COLLECTIONS OF DOCUMENTS
+
+     <p>You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+     <p>You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+     <li>AGGREGATION WITH INDEPENDENT WORKS
+
+     <p>A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an &ldquo;aggregate&rdquo; if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit. 
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+     <p>If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form. 
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+     <li>TRANSLATION
+
+     <p>Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4. 
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+     <p>If a section in the Document is Entitled &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+     <li>TERMINATION
+
+     <p>You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+     <li>FUTURE REVISIONS OF THIS LICENSE
+
+     <p>The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
+
+     <p>Each version of the License is given a distinguishing version number. 
+If the Document specifies that a particular numbered version of this
+License &ldquo;or any later version&rdquo; applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+        </ol>
+
+<h4 class="appendixsubsec">H.1.1 ADDENDUM: How to use this License for your documents</h4>
+
+<p>To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+<pre class="smallexample">       Copyright (C)  <var>year</var>  <var>your name</var>.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.2
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+</pre>
+   <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the &ldquo;with...Texts.&rdquo; line with this:
+
+<pre class="smallexample">         with the Invariant Sections being <var>list their titles</var>, with
+         the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
+         being <var>list</var>.
+</pre>
+   <p>If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   <p>If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+   </body></html>
+
diff --git a/manual/aspell.html/GNU-Lesser-General-Public-License.html b/manual/aspell.html/GNU-Lesser-General-Public-License.html
new file mode 100644 (file)
index 0000000..9bbe878
--- /dev/null
@@ -0,0 +1,566 @@
+<html lang="en">
+<head>
+<title>GNU Lesser General Public License - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Copying.html#Copying" title="Copying">
+<link rel="prev" href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License" title="GNU Free Documentation License">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="GNU-Lesser-General-Public-License"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Copying.html#Copying">Copying</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">H.2 GNU Lesser General Public License</h3>
+
+<p><a name="index-LGPL_002c-Lesser-General-Public-License-2"></a><div align="center">Version 2.1, February 1999</div>
+
+<pre class="display">     Copyright &copy; 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place &ndash; Suite 330, Boston, MA 02111-1307, USA
+     
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+     
+     [This is the first released version of the Lesser GPL.  It also counts
+     as the successor of the GNU Library Public License, version 2, hence the
+     version number 2.1.]
+</pre>
+<h4 class="appendixsubsec">H.2.1 Preamble</h4>
+
+<p>The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software&mdash;to make sure the software is free for all its users.
+
+   <p>This license, the Lesser General Public License, applies to some
+specially designated software&mdash;typically libraries&mdash;of the Free
+Software Foundation and other authors who decide to use it.  You can use
+it too, but we suggest you first think carefully about whether this
+license or the ordinary General Public License is the better strategy to
+use in any particular case, based on the explanations below.
+
+   <p>When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of it
+in new free programs; and that you are informed that you can do these
+things.
+
+   <p>To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+   <p>For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+   <p>We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+   <p>To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+   <p>Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+   <p>Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+   <p>When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+   <p>We call this license the <dfn>Lesser</dfn> General Public License because it
+does <em>Less</em> to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+   <p>For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+   <p>In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+   <p>Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+   <p>The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+&ldquo;work based on the library&rdquo; and a &ldquo;work that uses the library&rdquo;.  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+     <ol type=1 start=0>
+<li>This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this
+Lesser General Public License (also called &ldquo;this License&rdquo;).  Each
+licensee is addressed as &ldquo;you&rdquo;.
+
+     <p>A &ldquo;library&rdquo; means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+     <p>The &ldquo;Library&rdquo;, below, refers to any such software library or work
+which has been distributed under these terms.  A &ldquo;work based on the
+Library&rdquo; means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term &ldquo;modification&rdquo;.)
+
+     <p>&ldquo;Source code&rdquo; for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+     <p>Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+     <li>You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+     <p>You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+     <li>You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+          <ol type=a start=1>
+<li>The modified work must itself be a software library.
+
+          <li>You must cause the files modified to carry prominent notices
+stating that you changed the files and the date of any change.
+
+          <li>You must cause the whole of the work to be licensed at no
+charge to all third parties under the terms of this License.
+
+          <li>If a facility in the modified Library refers to a function or a
+table of data to be supplied by an application program that uses
+the facility, other than as an argument passed when the facility
+is invoked, then you must make a good faith effort to ensure that,
+in the event an application does not supply such function or
+table, the facility still operates, and performs whatever part of
+its purpose remains meaningful.
+
+          <p>(For example, a function in a library to compute square roots has
+a purpose that is entirely well-defined independent of the
+application.  Therefore, Subsection 2d requires that any
+application-supplied function or table used by this function must
+be optional: if the application does not supply it, the square
+root function must still compute square roots.)
+          </ol>
+
+     <p>These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+     <p>Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+     <p>In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+     <li>You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+     <p>Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+     <p>This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+     <li>You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+     <p>If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+     <li>A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a &ldquo;work that uses the Library&rdquo;.  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+     <p>However, linking a &ldquo;work that uses the Library&rdquo; with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a &ldquo;work that uses the
+library&rdquo;.  The executable is therefore covered by this License. 
+Section 6 states terms for distribution of such executables.
+
+     <p>When a &ldquo;work that uses the Library&rdquo; uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not. 
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+     <p>If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+     <p>Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6. 
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+     <li>As an exception to the Sections above, you may also combine or
+link a &ldquo;work that uses the Library&rdquo; with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+     <p>You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+          <ol type=a start=1>
+<li>Accompany the work with the complete corresponding
+machine-readable source code for the Library including whatever
+changes were used in the work (which must be distributed under
+Sections 1 and 2 above); and, if the work is an executable linked
+with the Library, with the complete machine-readable &ldquo;work that
+uses the Library&rdquo;, as object code and/or source code, so that the
+user can modify the Library and then relink to produce a modified
+executable containing the modified Library.  (It is understood
+that the user who changes the contents of definitions files in the
+Library will not necessarily be able to recompile the application
+to use the modified definitions.)
+
+          <li>Use a suitable shared library mechanism for linking with the Library.  A
+suitable mechanism is one that (1) uses at run time a copy of the
+library already present on the user's computer system, rather than
+copying library functions into the executable, and (2) will operate
+properly with a modified version of the library, if the user installs
+one, as long as the modified version is interface-compatible with the
+version that the work was made with.
+
+          <li>Accompany the work with a written offer, valid for at
+least three years, to give the same user the materials
+specified in Subsection 6a, above, for a charge no more
+than the cost of performing this distribution.
+
+          <li>If distribution of the work is made by offering access to copy
+from a designated place, offer equivalent access to copy the above
+specified materials from the same place.
+
+          <li>Verify that the user has already received a copy of these
+materials or that you have already sent this user a copy.
+          </ol>
+
+     <p>For an executable, the required form of the &ldquo;work that uses the
+Library&rdquo; must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies the
+executable.
+
+     <p>It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+     <li>You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+          <ol type=a start=1>
+<li>Accompany the combined library with a copy of the same work
+based on the Library, uncombined with any other library
+facilities.  This must be distributed under the terms of the
+Sections above.
+
+          <li>Give prominent notice with the combined library of the fact
+that part of it is a work based on the Library, and explaining
+where to find the accompanying uncombined form of the same work.
+          </ol>
+
+     <li>You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+     <li>You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+     <li>Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein. 
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+     <li>If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+     <p>If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+     <p>It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+     <p>This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+     <li>If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+     <li>The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time. 
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+     <p>Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+&ldquo;any later version&rdquo;, you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+     <li>If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+     <li>BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+     <li>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+        </ol>
+
+<h4 class="appendixsubsec">H.2.2 How to Apply These Terms to Your New Libraries</h4>
+
+<p>If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+   <p>To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+&ldquo;copyright&rdquo; line and a pointer to where the full notice is found.
+
+<pre class="smallexample">     <var>one line to give the library's name and an idea of what it does.</var>
+     Copyright (C) <var>year</var>  <var>name of author</var>
+     
+     This library is free software; you can redistribute it and/or modify it
+     under the terms of the GNU Lesser General Public License as published by
+     the Free Software Foundation; either version 2.1 of the License, or (at
+     your option) any later version.
+     
+     This library is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Lesser General Public License for more details.
+     
+     You should have received a copy of the GNU Lesser General Public
+     License along with this library; if not, write to the Free Software
+     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+     USA.
+</pre>
+   <p>Also add information on how to contact you by electronic and paper mail.
+
+   <p>You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a &ldquo;copyright disclaimer&rdquo; for the library, if
+necessary.  Here is a sample; alter the names:
+
+<pre class="smallexample">     Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+     `Frob' (a library for tweaking knobs) written by James Random Hacker.
+     
+     <var>signature of Ty Coon</var>, 1 April 1990
+     Ty Coon, President of Vice
+</pre>
+   <p>That's all there is to it!
+
+<!-- @node Index -->
+<!-- @unnumbered Index -->
+<!-- @printindex cp -->
+</body></html>
+
+<!--
+\1f
+Local Variables:
+coding: iso-8859-1
+End:
+
+-->
diff --git a/manual/aspell.html/Generic-Install-Instructions.html b/manual/aspell.html/Generic-Install-Instructions.html
new file mode 100644 (file)
index 0000000..7cada3a
--- /dev/null
@@ -0,0 +1,84 @@
+<html lang="en">
+<head>
+<title>Generic Install Instructions - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="next" href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022" title="HTML Manuals and "make clean"">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Generic-Install-Instructions"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022">HTML Manuals and &quot;make clean&quot;</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.1 Generic Install Instructions</h3>
+
+<pre class="example">     ./configure &amp;&amp; make
+</pre>
+   <p>For additional <samp><span class="command">configure</span></samp> options type `<samp><span class="samp">./configure
+--help</span></samp>'.  You can control what C++ compiler is used by setting the
+environment variable <samp><span class="env">CXX</span></samp> before running configure and you can
+control what flags are passed to the C++ compile via the environment
+variable <samp><span class="env">CXXFLAGS</span></samp>.  Static libraries are disabled by default
+since static libraries will not work right due to the mixing of C and
+C++.  When a C program links with the static libraries in Aspell it is
+likely to crash because Aspell's C++ objects are not getting
+initialized correctly.  However, if for some reason you want them, you
+can enable them via <samp><span class="option">--enable-static</span></samp>.
+
+   <p>Aspell should then compile without any additional user intervention. 
+If you run into problems please first check the sections below as that
+might solve your problem.
+
+   <p>To install the program simply type
+
+<pre class="example">     make install
+</pre>
+   <p>After Aspell is installed at least one dictionary needs to be
+installed.  You can find them at <a href="http://aspell.net/">http://aspell.net/</a>.  The
+<samp><span class="command">aspell</span></samp> program must be in your path in order for the
+dictionaries to install correctly.
+
+   <p>If you do not have Ispell or the traditional Unix <samp><span class="command">spell</span></samp> utility
+installed on your system then you should also copy the compatibility
+scripts <samp><span class="command">ispell</span></samp> and <samp><span class="command">spell</span></samp> located in the <samp><span class="file">scripts/</span></samp>
+directory into your binary directory which is usually
+<samp><span class="file">/usr/local/bin</span></samp> so that programs that expect the
+<samp><span class="command">ispell</span></samp> or <samp><span class="command">spell</span></samp> command will work correctly.
+
+   </body></html>
+
diff --git a/manual/aspell.html/German-Sharp-S.html b/manual/aspell.html/German-Sharp-S.html
new file mode 100644 (file)
index 0000000..89a7d33
--- /dev/null
@@ -0,0 +1,62 @@
+<html lang="en">
+<head>
+<title>German Sharp S - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="prev" href="Unicode-Normalization.html#Unicode-Normalization" title="Unicode Normalization">
+<link rel="next" href="Context-Sensitive-Spelling.html#Context-Sensitive-Spelling" title="Context Sensitive Spelling">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="German-Sharp-S"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Context-Sensitive-Spelling.html#Context-Sensitive-Spelling">Context Sensitive Spelling</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Unicode-Normalization.html#Unicode-Normalization">Unicode Normalization</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">C.4 German Sharp S</h3>
+
+<p>The German Sharp S or Eszett does not have an uppercase equivalent. 
+Instead when `<samp><span class="samp">&szlig;</span></samp>' is converted to `<samp><span class="samp">SS</span></samp>'.  The conversion of
+`<samp><span class="samp">&szlig;</span></samp>' to `<samp><span class="samp">SS</span></samp>' requires a special rule, and increases the
+length of a word, thus disallowing inplace case conversion. 
+Furthermore, my general rule of converting all words to lowercase before
+looking them up in the dictionary won't work because the conversion of
+`<samp><span class="samp">SS</span></samp>' to lowercase is ambiguous; it can be `<samp><span class="samp">ss</span></samp>' or
+`<samp><span class="samp">&szlig;</span></samp>'.  I do plan on dealing with this eventually.
+
+   </body></html>
+
diff --git a/manual/aspell.html/HTML-Manuals-and-_0022make-clean_0022.html b/manual/aspell.html/HTML-Manuals-and-_0022make-clean_0022.html
new file mode 100644 (file)
index 0000000..da5d8e4
--- /dev/null
@@ -0,0 +1,61 @@
+<html lang="en">
+<head>
+<title>HTML Manuals and &quot;make clean&quot; - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Generic-Install-Instructions.html#Generic-Install-Instructions" title="Generic Install Instructions">
+<link rel="next" href="Curses-Notes.html#Curses-Notes" title="Curses Notes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="HTML-Manuals-and-%22make-clean%22"></a>
+<a name="HTML-Manuals-and-_0022make-clean_0022"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Curses-Notes.html#Curses-Notes">Curses Notes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Generic-Install-Instructions.html#Generic-Install-Instructions">Generic Install Instructions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.2 HTML Manuals and <samp><span class="command">make clean</span></samp></h3>
+
+<p>The Aspell distribution includes HTML versions of the User and
+Developer's manual.  Unfortunately, doing a <samp><span class="command">make clean</span></samp> will
+erase them.  This is due to a limitation of automake which is not
+easily fixed.  If makeinfo is installed they can easily be rebuild
+with <samp><span class="command">make aspell.html aspell-dev.html</span></samp>, or you can unpack
+them from the tarbar.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Hidden-Markov-Model.html b/manual/aspell.html/Hidden-Markov-Model.html
new file mode 100644 (file)
index 0000000..12de216
--- /dev/null
@@ -0,0 +1,79 @@
+<html lang="en">
+<head>
+<title>Hidden Markov Model - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Items.html#Notes-on-Various-Items" title="Notes on Various Items">
+<link rel="prev" href="Word-skipping-by-context.html#Word-skipping-by-context" title="Word skipping by context">
+<link rel="next" href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary" title="Email the Personal Dictionary">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Hidden-Markov-Model"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary">Email the Personal Dictionary</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Word-skipping-by-context.html#Word-skipping-by-context">Word skipping by context</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>
+<hr>
+</div>
+
+<h4 class="appendixsubsec">D.3.2 Hidden Markov Model</h4>
+
+<p>Knud Haugaard S&oslash;rensen suggested this one.  From his email on the
+Aspell mailing list:
+
+   <p>consider these examples:
+
+<pre class="example">     a fone number.
+      -&gt; a phone number.
+     
+     a fone dress.
+      -&gt; a fine dress.
+</pre>
+   <p>the example illustrates that the right correction might depend on the
+context of the word.
+
+   <p>So I suggested that you take a look on HMM to solve this problem.
+
+   <p>This might also provide a good base to include grammar correction in
+Aspell.
+
+   <p>see this link
+<a href="http://www.cse.ogi.edu/CSLU/HLTsurvey/ch1node7.html">http://www.cse.ogi.edu/CSLU/HLTsurvey/ch1node7.html</a>.
+
+   <p>I think it is a great idea. 
+ However unfortunately it will probably be very complicated to implement. 
+ Perhaps in the far future.
+
+   </body></html>
+
diff --git a/manual/aspell.html/How-Aspell-Selects-an-Appropriate-Dictionary.html b/manual/aspell.html/How-Aspell-Selects-an-Appropriate-Dictionary.html
new file mode 100644 (file)
index 0000000..96e2bac
--- /dev/null
@@ -0,0 +1,88 @@
+<html lang="en">
+<head>
+<title>How Aspell Selects an Appropriate Dictionary - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Using-aspell_002dimport.html#Using-aspell_002dimport" title="Using aspell-import">
+<link rel="next" href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries" title="Listing Available Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="How-Aspell-Selects-an-Appropriate-Dictionary"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries">Listing Available Dictionaries</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Using-aspell_002dimport.html#Using-aspell_002dimport">Using aspell-import</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.2 How Aspell Selects an Appropriate Dictionary</h3>
+
+<p>If the <samp><span class="option">master</span></samp> option is set in any fashion (via the command
+line, the <samp><span class="env">ASPELL_CONF</span></samp> environment variable, or a configuration
+file) Aspell will look for a dictionary of that name.  If one could
+not be found, it will complain.
+
+   <p>Otherwise it will use the value of the <samp><span class="option">lang</span></samp> option to search
+for an appropriate dictionary.  If more than one dictionary is found
+for the given language string then it will look for a dictionary with
+a matching variety if the <samp><span class="option">variety</span></samp> option is set.  If it is not
+set it will look for a dictionary without a variety.  If after matching
+the <samp><span class="option">lang</span></samp> and <samp><span class="option">variety</span></samp> there is still more than one
+dictionary available it will find one with the size closest to the
+value of the <samp><span class="option">size</span></samp> option.  The default size is 60.  If Aspell
+cannot find a dictionary based on the <samp><span class="option">lang</span></samp> option then it
+will give up and complain.
+
+   <p>If the <samp><span class="option">lang</span></samp> option is not explicitly set its value will be
+based on the <samp><span class="env">LC_MESSAGES</span></samp> locale.  This locale is generally taken
+from the <samp><span class="env">LC_MESSAGES</span></samp> environment variable or the <samp><span class="env">LANG</span></samp>
+environment variable if <samp><span class="env">LC_MESSAGES</span></samp> is not set.  However, if
+Aspell is being used as a library from within another program which
+already explicitly set the locale then it will use the locale of the
+library rather than the environment variables.  If Aspell cannot
+determine the language from the <samp><span class="env">LC_MESSAGES</span></samp> locale than it will
+default to <code>en_US</code>.
+
+   <p>The list option <samp><span class="option">dict-alias</span></samp> can be used to influence which dictionary
+is selected by creating an alias from one dictionary name to another. 
+This option is most useful when there is more than one dictionary for a
+given language.  For example `<samp><span class="samp">add-dict-alias en_US en_US-w_accents</span></samp>'
+will cause Aspell to choose the accented version of the American English
+dictionary instead of the non-accented version.  To add an alias use:
+
+<pre class="example">     add-dict-alias <var>NAME</var> <var>VAL</var>
+</pre>
+   </body></html>
+
diff --git a/manual/aspell.html/Implementation-Notes.html b/manual/aspell.html/Implementation-Notes.html
new file mode 100644 (file)
index 0000000..b208313
--- /dev/null
@@ -0,0 +1,57 @@
+<html lang="en">
+<head>
+<title>Implementation Notes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="next" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Implementation-Notes"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix A Implementation Notes</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">Aspell Suggestion Strategy</a>
+<li><a accesskey="2" href="Notes-on-8_002dbit-Characters.html#Notes-on-8_002dbit-Characters">Notes on 8-bit Characters</a>
+</ul>
+
+</body></html>
+
diff --git a/manual/aspell.html/Important-Items.html b/manual/aspell.html/Important-Items.html
new file mode 100644 (file)
index 0000000..21fe8dd
--- /dev/null
@@ -0,0 +1,131 @@
+<html lang="en">
+<head>
+<title>Important Items - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="To-Do.html#To-Do" title="To Do">
+<link rel="next" href="Other-Items.html#Other-Items" title="Other Items">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Important-Items"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Other-Items.html#Other-Items">Other Items</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="To-Do.html#To-Do">To Do</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">D.1 Important Items</h3>
+
+<p>Words in bold indicate how you should refer to the item when
+discussing it with me or others.
+
+<h4 class="appendixsubsec">D.1.1 Things that need to be done</h4>
+
+<p>These items need to be done before I consider Aspell finished. If you
+are interested in helping me with one of these tasks please email
+me. Good C++ skills are needed for most of these tasks involving
+coding.
+
+     <ul>
+<li>Create a generic filter to handle multi-character letters such as
+`<samp><span class="samp">"a</span></samp>' or `<samp><span class="samp">\"a</span></samp>' for &auml;.  This filter should make use of the
+already exiting normalization code if possible. 
+<li>Make Aspell <strong>Thread safe</strong>. Even though Aspell itself is not
+multi-threaded I would like it to be thread safe so that it can be
+used by multi-threaded programs. There are several areas of Aspell
+that are potentially thread unsafe (such as accessing a global pool)
+and several classes which have the potential of being used by more
+than one thread (such as the personal dictionary). <em>[In
+Progress]</em>. 
+<li>Enhance <strong>ispell.el</strong> so that it will work better with GNU
+Aspell.  <em>[In Progress]</em>. 
+<li>Clean up copyright notices and bring the Aspell package up to
+<strong>GNU Standards</strong>. <em>[In Progress]</em>. 
+</ul>
+
+<h4 class="appendixsubsec">D.1.2 Things I would like to get done</h4>
+
+<p>I would like to get these done. However, I may still consider Aspell
+finished without. They will probably eventually get
+implemented. However, I could still use help with them.
+
+     <ul>
+<li>Better support for <strong>compound words</strong>. The support for
+<em>conditional</em> compound words found in Aspell versions 0.50
+and earlier is no longer available since no one seems to be using
+it. Support for <em>unconditional</em> compound words is still
+available. See <a href="Compound-Words.html#Compound-Words">Compound Words</a>. 
+<li>Be able to accept <strong>words with spaces in them</strong> as many languages
+have words, such as a word in a foreign phrase, which only makes sense
+when followed by other words. See <a href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">Words With Symbols in Them</a>. 
+<li>Reorganize manual to make it easier to understand and to make it
+possible to break out useful man pages. 
+<li>Support <strong>soundslike lookup with affix compression</strong>.  I think it
+is possible, although I don't know how effective it will be.  The basic
+idea is to affix compress the soundslike codes and then match the
+codes up with affix compressed words.  If you are interested,
+email <a href="mailto:aspell-devel@gnu.org">aspell-devel@gnu.org</a>, and I will explain it in more
+detail. 
+<li>Use Lawrence Philips' new <strong>Double Metaphone algorithm</strong>. See
+<a href="http://aspell.net/metaphone/">http://aspell.net/metaphone/</a>. The main task involved
+here is converting the algorithm into table form. This will take some
+time but there is no real programming experience required. If you want
+to help with Aspell but don't have any real programming experience,
+this would be a great place to start. 
+<li>Rank suggestions based on <strong>frequency information</strong>.  Both global
+frequency and document specific frequency can be used.  The latter will
+require that the whole document be made available to the spell checker. 
+Also use frequency information to flag words which are found in the
+dictionary but not in common usage, and thus might not be what was
+intended. 
+<li>Support a <strong>"dual-script" mode</strong> where Aspell can use a separate
+dictionary depending on which script it detects the current word in, the
+two dictionaries can have nothing in common, ie an English one and a
+Russian one for example.  This will <em>not</em> support two languages that
+use the same script as that is a lot more complicated.  For example if
+the word is misspelled which dictionary should it use for the
+suggestions? 
+<li>Write a <strong>GUI</strong> for the Aspell utility. Ideally it should be able to do
+everything the Aspell utility can do and not just be able spell check
+a document. 
+<li>Develop a <strong>more powerful C API</strong> for Aspell.  Ideally this API should
+allow one to perform all the tasks the Aspell utility can do.  This
+included the ability to check whole documents, and create
+dictionaries, among other things. 
+<li>Create a <strong>C++ interface</strong> for Aspell, possibly on top of the C one.
+
+   </ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Installing.html b/manual/aspell.html/Installing.html
new file mode 100644 (file)
index 0000000..959f2be
--- /dev/null
@@ -0,0 +1,76 @@
+<html lang="en">
+<head>
+<title>Installing - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="To-Do.html#To-Do" title="To Do">
+<link rel="next" href="ChangeLog.html#ChangeLog" title="ChangeLog">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Installing"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="ChangeLog.html#ChangeLog">ChangeLog</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="To-Do.html#To-Do">To Do</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix E Installing</h2>
+
+<p>Aspell requires gcc 2.95 (or better) as the C++ compiler.  Other C++
+compilers should work with some effort.  Other C++ compilers for mostly
+POSIX compliant (Unix, Linux, BeOS, Cygwin) systems should work without
+any major problems provided that the compile can handle all of the
+advanced C++ features Aspell uses.  C++ compilers for non-Unix systems
+might work but it will take some work.  Aspell at very least requires a
+Unix-like environment (<samp><span class="file">sh</span></samp>, <samp><span class="file">grep</span></samp>, <samp><span class="file">sed</span></samp>, <samp><span class="file">tr</span></samp>,
+<small class="dots">...</small>), and Perl in order to build.  Aspell also uses a few POSIX
+functions when necessary.
+
+   <p>The latest version can always be found at GNU Aspell's home page at
+<a href="http://aspell.net">http://aspell.net</a>.
+
+<ul class="menu">
+<li><a accesskey="1" href="Generic-Install-Instructions.html#Generic-Install-Instructions">Generic Install Instructions</a>
+<li><a accesskey="2" href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022">HTML Manuals and "make clean"</a>
+<li><a accesskey="3" href="Curses-Notes.html#Curses-Notes">Curses Notes</a>
+<li><a accesskey="4" href="Loadable-Filter-Notes.html#Loadable-Filter-Notes">Loadable Filter Notes</a>
+<li><a accesskey="5" href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">Upgrading from Aspell 0.50</a>
+<li><a accesskey="6" href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12">Upgrading from Aspell .33/Pspell .12</a>
+<li><a accesskey="7" href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot">Upgrading from a Pre-0.50 snapshot</a>
+<li><a accesskey="8" href="WIN32-Notes.html#WIN32-Notes">WIN32 Notes</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Introduction.html b/manual/aspell.html/Introduction.html
new file mode 100644 (file)
index 0000000..9292ee4
--- /dev/null
@@ -0,0 +1,137 @@
+<html lang="en">
+<head>
+<title>Introduction - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="index.html#Top" title="Top">
+<link rel="next" href="Support.html#Support" title="Support">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Introduction"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Support.html#Support">Support</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="index.html#Top">Top</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">1 Introduction</h2>
+
+<p>GNU Aspell is a spell checker designed to eventually replace Ispell.  It
+can either be used as a library or as an independent spell checker.  Its
+main feature is that it does a much better job of suggesting possible
+replacements for a misspelled word than just about any other spell
+checker out there for the English language.  Unlike Ispell, Aspell can
+also easily check documents in UTF-8 without having to use a special
+dictionary.  Aspell will also do its best to respect the current locale
+setting.  Other advantages over Ispell include support for using
+multiple dictionaries at once and intelligently handling personal
+dictionaries when more than one Aspell process is open at once.
+
+   <p>The latest version of Aspell can always be found at <a href="http://aspell.net">http://aspell.net</a>
+
+<h3 class="section">1.1 Comparison to other spell checker engines</h3>
+
+<p><table summary=""><tr align="left"><td valign="top"></td><td valign="top">Aspell </td><td valign="top">Ispell </td><td valign="top">Netscape </td><td valign="top">Microsoft
+<br></td></tr><tr align="left"><td valign="top"></td><td valign="top"></td><td valign="top"></td><td valign="top">4.0     </td><td valign="top">Word 97
+<br></td></tr><tr align="left"><td valign="top">Open Source </td><td valign="top">x      </td><td valign="top">x
+<br></td></tr><tr align="left"><td valign="top">Suggestion  </td><td valign="top">88-98  </td><td valign="top">54     </td><td valign="top">55-70?   </td><td valign="top">71
+<br></td></tr><tr align="left"><td valign="top">Intelligence
+<br></td></tr><tr align="left"><td valign="top">Personal part </td><td valign="top">x    </td><td valign="top">x      </td><td valign="top">x
+<br></td></tr><tr align="left"><td valign="top">of Suggestions
+<br></td></tr><tr align="left"><td valign="top">Alternate Dictionaries </td><td valign="top">x </td><td valign="top">x </td><td valign="top">?        </td><td valign="top">? 
+<br></td></tr><tr align="left"><td valign="top">International Support </td><td valign="top">x </td><td valign="top">x </td><td valign="top">?         </td><td valign="top">?
+<br></td></tr></table>
+
+   <p>The Suggestion Intelligence is based on a small test kernel of
+misspelled/correct word pairs.  Go to <a href="http://aspell.net/test">http://aspell.net/test</a>
+for more info and how you can help contribute to the test kernel.  The
+current scores for Aspell are 88 in <em>fast</em> mode, 93 in
+<em>normal</em> mode, and 98 in <em>bad spellers</em> mode: for more
+information about the various suggestion modes <a href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>.
+
+   <p>If you have any other information you would like to add to this chart
+please contact me at <a href="mailto:kevina@gnu.org">kevina@gnu.org</a>.
+
+<h4 class="subsection">1.1.1 Comparison to Ispell</h4>
+
+<h5 class="subsubsection">1.1.1.1 Features that only Aspell has</h5>
+
+     <ul>
+<li>Is an actual library that other programs can link to instead of
+having to use it through a pipe.
+
+     <li>Does a much better job of suggesting possible replacements for a
+misspelled word than Ispell does or for that matter many other spell
+checkers I have seen.  If you know a spell checker that does a better
+job please let me know.
+
+     <li>Can learn from user's misspellings.
+
+     <li>Can easily check documents in UTF-8 without having to use a special
+dictionary.
+
+     <li>Has support for using multiple dictionaries at once.
+
+     <li>Is multiprocess intelligent.  When a personal dictionary (or
+replacement list) is saved, it will now first update the list against
+the dictionary on disk in case another process modified it.
+
+     <li>Can share the memory used in the main word list between processes.
+
+     <li>A better, more complete word list for the English language.  Word
+lists are provided for American, British, and Canadian spelling. 
+Special care has been taken to only include one spelling for each word
+in any particular word list.  The word list included in Ispell by
+contrast only included support for American and British and also tends
+to included multiple spellings for a word which can mask some spelling
+errors. 
+</ul>
+
+<h5 class="subsubsection">1.1.1.2 Things that, currently, only Ispell has</h5>
+
+     <ul>
+<li>Lower memory footprint
+
+     <li>Ability to deal with arbitrary multi-character letters such as old
+ASCII encodings of accented letters.
+
+     <li>Perhaps better support for spell checking (La)TeX files.
+
+</ul>
+
+   <p>For a detailed description of how Aspell differs from Ispell, See <a href="Differences-From-Ispell.html#Differences-From-Ispell">Differences From Ispell</a>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Language-Related-Issues.html b/manual/aspell.html/Language-Related-Issues.html
new file mode 100644 (file)
index 0000000..aa0a0a3
--- /dev/null
@@ -0,0 +1,65 @@
+<html lang="en">
+<head>
+<title>Language Related Issues - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="next" href="To-Do.html#To-Do" title="To Do">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Language-Related-Issues"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="To-Do.html#To-Do">To Do</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix C Language Related Issues</h2>
+
+<p>Here are some language related issues that a good spell checker needs to
+handle.  If you have any more information about any of these issues, or
+of a new issue not discussed here, please email me at
+<a href="mailto:kevina@gnu.org">kevina@gnu.org</a>.
+
+<ul class="menu">
+<li><a accesskey="1" href="Compound-Words.html#Compound-Words">Compound Words</a>
+<li><a accesskey="2" href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">Words With Symbols in Them</a>
+<li><a accesskey="3" href="Unicode-Normalization.html#Unicode-Normalization">Unicode Normalization</a>
+<li><a accesskey="4" href="German-Sharp-S.html#German-Sharp-S">German Sharp S</a>
+<li><a accesskey="5" href="Context-Sensitive-Spelling.html#Context-Sensitive-Spelling">Context Sensitive Spelling</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Languages-Which-Aspell-can-Support.html b/manual/aspell.html/Languages-Which-Aspell-can-Support.html
new file mode 100644 (file)
index 0000000..550677a
--- /dev/null
@@ -0,0 +1,65 @@
+<html lang="en">
+<head>
+<title>Languages Which Aspell can Support - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Implementation-Notes.html#Implementation-Notes" title="Implementation Notes">
+<link rel="next" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Languages-Which-Aspell-can-Support"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Implementation-Notes.html#Implementation-Notes">Implementation Notes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix B Languages Which Aspell can Support</h2>
+
+<p>Even though Aspell will remain 8-bit internally it should still be
+able to support any written languages not based on a logographic
+script.  The only logographic writing system in current use are those
+based on h&agrave;nzi which includes Chinese, Japanese, and sometimes Korean.
+
+<ul class="menu">
+<li><a accesskey="1" href="Supported.html#Supported">Supported</a>
+<li><a accesskey="2" href="Unsupported.html#Unsupported">Unsupported</a>
+<li><a accesskey="3" href="Multiple-Scripts.html#Multiple-Scripts">Multiple Scripts</a>
+<li><a accesskey="4" href="Planned-Dictionaries.html#Planned-Dictionaries">Planned Dictionaries</a>
+<li><a accesskey="5" href="References.html#References">References</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Listing-Available-Dictionaries.html b/manual/aspell.html/Listing-Available-Dictionaries.html
new file mode 100644 (file)
index 0000000..39d52d8
--- /dev/null
@@ -0,0 +1,57 @@
+<html lang="en">
+<head>
+<title>Listing Available Dictionaries - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary" title="How Aspell Selects an Appropriate Dictionary">
+<link rel="next" href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List" title="Dumping the Contents of the Word List">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Listing-Available-Dictionaries"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List">Dumping the Contents of the Word List</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.3 Listing Available Dictionaries</h3>
+
+<p>For a list of available dictionaries use the command <samp><span class="command">aspell
+dump dicts</span></samp>.  This will form a list of dictionaries that Aspell will
+search when a dictionary is not specifically given.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Loadable-Filter-Notes.html b/manual/aspell.html/Loadable-Filter-Notes.html
new file mode 100644 (file)
index 0000000..763c1ae
--- /dev/null
@@ -0,0 +1,62 @@
+<html lang="en">
+<head>
+<title>Loadable Filter Notes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Curses-Notes.html#Curses-Notes" title="Curses Notes">
+<link rel="next" href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50" title="Upgrading from Aspell 0.50">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Loadable-Filter-Notes"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">Upgrading from Aspell 0.50</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Curses-Notes.html#Curses-Notes">Curses Notes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.4 Loadable Filter Notes</h3>
+
+<p>Support for being able to load additional filter modules at run-time
+has only been verified to work on Linux platforms.  If you get linker
+errors when trying to use a filter, then it is likely that loadable
+filter support is not working yet on your platform.  Thus, in order to
+get Aspell to work correctly you will need to avoid compiling the
+filters as individual modules by using the
+<samp><span class="option">--enable-compile-in-filters</span></samp> when configuring Aspell with
+<samp><span class="command">./configure</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Multiple-Scripts.html b/manual/aspell.html/Multiple-Scripts.html
new file mode 100644 (file)
index 0000000..e23323a
--- /dev/null
@@ -0,0 +1,64 @@
+<html lang="en">
+<head>
+<title>Multiple Scripts - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="prev" href="Unsupported.html#Unsupported" title="Unsupported">
+<link rel="next" href="Planned-Dictionaries.html#Planned-Dictionaries" title="Planned Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Multiple-Scripts"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Planned-Dictionaries.html#Planned-Dictionaries">Planned Dictionaries</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Unsupported.html#Unsupported">Unsupported</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">B.3 Languages Written in Multiple Scripts</h3>
+
+<p>Aspell should be able to check text written in the same language but
+in multiple scripts with some work.  If the number of unique symbols
+in both scripts is less than 210, then a special character set can be
+used to allow both scripts to be encoded in the same dictionary. 
+However this may not be the most efficient solution.  An alternate
+solution is to store each script in its own dictionary and allow
+Aspell to choose the correct dictionary based on which script the
+given word is written in.  Aspell currently does not support this mode
+of spell checking but it is something that I hope to eventually
+support.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-8_002dbit-Characters.html b/manual/aspell.html/Notes-on-8_002dbit-Characters.html
new file mode 100644 (file)
index 0000000..e3c238e
--- /dev/null
@@ -0,0 +1,119 @@
+<html lang="en">
+<head>
+<title>Notes on 8-bit Characters - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Implementation-Notes.html#Implementation-Notes" title="Implementation Notes">
+<link rel="prev" href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy" title="Aspell Suggestion Strategy">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-8-bit-Characters"></a>
+<a name="Notes-on-8_002dbit-Characters"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">Aspell Suggestion Strategy</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Implementation-Notes.html#Implementation-Notes">Implementation Notes</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">A.2 Notes on 8-bit Characters</h3>
+
+<p>There is a very good reason I use 8-bit characters in Aspell. Speed
+and simplicity. While many parts of my code can fairly easily be
+converted to some sort of wide character as my code is clean. Other
+parts cannot be.
+
+   <p>One of the reasons why is because in many, many places I use a direct
+lookup to find out various information about characters. With 8-bit
+characters this is very feasible because there is only 256 of
+them. With 16-bit wide characters this will waste a LOT of space. With
+32-bit characters this is just plain impossible. Converting the lookup
+tables to another form is certainly possible but degrades performance
+significantly.
+
+   <p>Furthermore, some of my algorithms rely on words consisting only on a
+small number of distinct characters (often around 30 when case and
+accents are not considered). When the possible character can consist
+of any Unicode character this number becomes several thousand, if
+that. In order for these algorithms to still be used, some sort of
+limit will need to be placed on the possible characters the word can
+contain. If I impose that limit, I might as well use some sort of
+8-bit characters set which will automatically place the limit on what
+the characters can be.
+
+   <p>There is also the issue of how I should store the word lists in
+memory? As a string of 32 bit wide characters. Now that is using up 4
+times more memory than characters would and for languages that can fit
+within an 8-bit character that is, in my view, a gross waste of
+memory. So maybe I should store them is some variable width format
+such as UTF-8. Unfortunately, way, way too many of the algorithms will
+simply not work with variable width characters without significant
+modification which will very likely degrade performance. So the
+solution is to work with the characters as 32-bit wide characters and
+then convert it to a shorter representation when storing them in the
+lookup tables. Now that can lead to an inefficiency. I could also use
+16 bit wide characters, however that may not be good enough to hold all
+future versions of Unicode and therefore has the same problems.
+
+   <p>As a response to the space waste used by storing word lists in some
+sort of wide format some one asked:
+
+   <blockquote>
+Since hard drives are cheaper and cheaper, you could store a dictionary
+in a usable (uncompressed) form and use it directly with memory
+mapping. Then the efficiency would directly depend on the disk caching
+method, and only the used part of the dictionaries would really be
+loaded into memory. You would no more have to load plain dictionaries
+into main memory, you'll just want to compute some indexes (or
+something like that) after mapping. 
+</blockquote>
+
+   <p>However, the fact of the matter is that most of the dictionary will be
+read into memory anyway if it is available. If it is not available
+then there would be a good deal of disk swaps. Making characters
+32-bit wide will increase the chance that there are more disk swaps. 
+So the bottom line is that it is more efficient to convert characters
+from something like UTF-8 into some sort of 8-bit character. I could
+also use some sort of disk space lookup table such as the Berkeley
+Database. However this will <strong>definitely</strong> degrade performance.
+
+   <p>The bottom line is that keeping Aspell 8-bit internally is a very well
+though out decision that is not likely to change any time soon. Feel
+free to challenge me on it, but, don't expect me to change my mind
+unless you can bring up some point that I have not thought of before
+and quite possibly a patch to solve cleanly convert Aspell to Unicode
+internally without a serious performance lost OR serious memory usage
+increase.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-Storing-Replacement-Pairs.html b/manual/aspell.html/Notes-on-Storing-Replacement-Pairs.html
new file mode 100644 (file)
index 0000000..8e5bee6
--- /dev/null
@@ -0,0 +1,92 @@
+<html lang="en">
+<head>
+<title>Notes on Storing Replacement Pairs - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell" title="Writing programs to use Aspell">
+<link rel="prev" href="Through-A-Pipe.html#Through-A-Pipe" title="Through A Pipe">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-Storing-Replacement-Pairs"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Through-A-Pipe.html#Through-A-Pipe">Through A Pipe</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">6.3 Notes on Storing Replacement Pairs</h3>
+
+<p>The <code>store_repl</code> method and the <code>$$ra</code> should be used
+because Aspell is able to learn from users misspellings.  For example
+on the first pass a user misspells <em>beginning</em> as <em>beging</em>
+so Aspell suggests:
+
+<pre class="example">     begging, begin, being, Beijing, bagging, ....
+</pre>
+   <p class="noindent">However the user then tries <em>begning</em> and Aspell suggests
+
+<pre class="example">     beginning, beaning, begging, ...
+</pre>
+   <p class="noindent">so the user selects <em>beginning</em>.  However, later on in the
+document the user misspells it as <em>begng</em> (<strong>not</strong>
+<em>beging</em>).  Normally Aspell will suggest.
+
+<pre class="example">     began, begging, begin, begun, ...
+</pre>
+   <p class="noindent">However because it knows the user misspelled <em>beginning</em> as
+<em>beging</em> it will instead suggest:
+
+<pre class="example">     beginning, began, begging, begin, begun ...
+</pre>
+   <p>I myself often misspelled beginning (and still do) as something close
+to begging and too many times wind up writing sentences such as
+"begging with <small class="dots">...</small>".
+
+   <p>Please also note that replacements commands have a memory.  Which means
+if you first store the replacement pair:
+
+<pre class="example">     sicolagest -&gt; psycolagest
+</pre>
+   <p class="noindent">then store the replacement pair
+
+<pre class="example">     psycolagest -&gt; psychologist
+</pre>
+   <p class="noindent">The replacement pair
+
+<pre class="example">     sicolagest -&gt; psychologist
+</pre>
+   <p class="noindent">will also get stored so that you don't have to worry about it.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-Typo_002dAnalysis.html b/manual/aspell.html/Notes-on-Typo_002dAnalysis.html
new file mode 100644 (file)
index 0000000..fa628d1
--- /dev/null
@@ -0,0 +1,96 @@
+<html lang="en">
+<head>
+<title>Notes on Typo-Analysis - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Options.html#Notes-on-Various-Options" title="Notes on Various Options">
+<link rel="prev" href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option" title="Notes on the Prefix Option">
+<link rel="next" href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes" title="Notes on the Different Suggestion Modes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-Typo-Analysis"></a>
+<a name="Notes-on-Typo_002dAnalysis"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option">Notes on the Prefix Option</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+<hr>
+</div>
+
+<h4 class="subsection">4.4.3 Notes on Typo-Analysis and the Keyboard Definition File</h4>
+
+<p>Aspell .33 and better will, in general, give a higher priority to
+certain misspellings which are likely to be due to typos such as
+<code>teh</code> instead of <code>the</code> or <code>hapoy</code> instead of
+<code>happy</code>.  However in order to do this well Aspell needs to know the
+layout of the keyboard via the keyboard definition file.  The keyboard
+definition file simply identifies the keys on the keyboard and which of
+them are right next to each other.  It has an extension of <samp><span class="file">.kbd</span></samp>
+and all non-ASCII characters are expected to be in UTF-8.
+
+   <p>To identify a key use:
+
+<pre class="example">     key <var>base</var> <var>other</var> ...
+</pre>
+   <p class="noindent">where <var>base</var> is the base character that the key types, and
+<var>other</var> are other keys that the key can produce.  For example
+
+<pre class="example">     key a A &aacute; &Aacute;
+</pre>
+   <p>It generally is only necessary to list keys which type more than one
+distinct letter as Aspell can derive the rest from the language data
+file.  For example, it is not necessary to include the previously
+mentioned key.
+
+   <p>To identify two keys as being right next to each other simply list the
+type keys right after each other.  For example the line:
+
+<pre class="example">     as
+</pre>
+   <p class="noindent">will indicate that `<samp><span class="samp">a</span></samp>' and `<samp><span class="samp">s</span></samp>' are right next to each other. 
+If `<samp><span class="samp">as</span></samp>' is listed as an entry it is not necessary to list `<samp><span class="samp">sa</span></samp>'
+as an entry as that will be done automatically.  Also by <dfn>right
+next to each other</dfn> I mean two keys that are close enough together that
+it is easy to type one instead of the other.  On most keyboards this
+means keys that are to the left or to the right of each other and
+<em>not</em> keys that are below or above it.
+
+   <p>The default for this option is normally <samp><span class="option">standard</span></samp>.  However
+the default can be changed via the language data file.  The normal
+default, <samp><span class="option">standard</span></samp>, should work well for most QWERTY like
+keyboard layouts.  It may need minor adjusting for foreign keyboards. 
+The <samp><span class="option">dvorak</span></samp> option can be used for a Dvorak layout.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-Various-Filters-and-Filter-Modes.html b/manual/aspell.html/Notes-on-Various-Filters-and-Filter-Modes.html
new file mode 100644 (file)
index 0000000..a168d20
--- /dev/null
@@ -0,0 +1,301 @@
+<html lang="en">
+<head>
+<title>Notes on Various Filters and Filter Modes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Options.html#Notes-on-Various-Options" title="Notes on Various Options">
+<link rel="next" href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option" title="Notes on the Prefix Option">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-Various-Filters-and-Filter-Modes"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option">Notes on the Prefix Option</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+<hr>
+</div>
+
+<h4 class="subsection">4.4.1 Notes on Various Filters and Filter Modes</h4>
+
+<p>Aspell now has filter support.  You can either select from individual
+filters or choose a filter mode.  To select a filter mode use the
+<samp><span class="option">mode</span></samp> option.  You may choose from `<samp><span class="samp">none</span></samp>', `<samp><span class="samp">url</span></samp>',
+`<samp><span class="samp">email</span></samp>', `<samp><span class="samp">sgml</span></samp>', `<samp><span class="samp">ccpp</span></samp>', `<samp><span class="samp">tex</span></samp>' and any other
+available on your system.  The default mode is `<samp><span class="samp">url</span></samp>'.  Individual
+filters can be added with the option <samp><span class="option">add-filter</span></samp> and removed
+with the <samp><span class="option">rem-filter</span></samp> option.  The currently available filters
+are `<samp><span class="samp">url</span></samp>', `<samp><span class="samp">email</span></samp>', `<samp><span class="samp">sgml</span></samp>' and `<samp><span class="samp">tex</span></samp>', `<samp><span class="samp">latex</span></samp>'
+(alias for `<samp><span class="samp">tex</span></samp>'), `<samp><span class="samp">nroff</span></samp>', `<samp><span class="samp">context</span></samp>', as well as a
+bunch of filters which translate the text from one format to another.
+
+   <p>To check which filters are available use <samp><span class="command">aspell dump filters</span></samp>. 
+To check which filter modes are available use <samp><span class="command">aspell dump
+modes</span></samp>.  The <samp><span class="command">aspell help</span></samp> command will also list all available
+filter and filter modes.
+
+<h5 class="subsubsection">4.4.1.1 None Filter Mode</h5>
+
+<p>The <samp><span class="option">none</span></samp> mode is exactly what it says.  It turns off all filters.
+
+<h5 class="subsubsection">4.4.1.2 URL Filter</h5>
+
+<p>The <samp><span class="option">url</span></samp> filter/mode skips over URLs, host names, and email
+addresses.  Because this filter is almost always useful and rarely
+does any harm it is enabled in all modes except <samp><span class="option">none</span></samp>.  To
+turn it off either select the <samp><span class="option">none</span></samp> mode or use
+<samp><span class="option">rem-filter</span></samp> option <em>after</em> the desired mode is selected.
+
+<h5 class="subsubsection">4.4.1.3 Email Filter</h5>
+
+<p>The <samp><span class="option">email</span></samp> filter mode skips over quoted text.  It currently
+does not support skipping over headers however a future version
+should.  In the meantime I suggest you use Aspell with Newsbody which
+can be found at <a href="http://home.worldonline.dk/~byrial/newsbody/">http://home.worldonline.dk/~byrial/newsbody/</a>. 
+The option <samp><span class="option">email-skip</span></samp> controls the number of characters that
+can appear before the email quote character, the default is 10.  The
+option <samp><span class="option">add|rem-email-quote</span></samp> controls the characters that are
+considered quote characters, the defaults are `<samp><span class="samp">&gt;</span></samp>' and `<samp><span class="samp">|</span></samp>'.
+
+<h5 class="subsubsection">4.4.1.4 SGML Filter</h5>
+
+<p>The SGML filter allows you to spell check SGML, HTML, XHTML, and XML
+files. In most cases everything within a tag `<samp><span class="samp">&lt;tag attrib=value
+attrib2="a whole sentence"&gt;</span></samp>' will be skipped by the spell checker. The
+SGML/HTML/XML that Aspell supports is a slight superset of most DTDs
+(Document Type Definitions) and can spell check the often non-conforming
+HTML found on the web.
+
+   <p>Two configuration options, <samp><span class="option">sgml-skip</span></samp> and <samp><span class="option">sgml-check</span></samp>,
+allow you to control what is spell checked. The tag and attribute names
+specified are case insensitive.
+
+     <dl>
+<dt><b>sgml-skip</b><dd>This is a list of tags whose contents will also be skipped by the spell
+checker.  For example, if you wish to leave a misspelling in a document
+and not have them flagged as misspellings, you could surround them with
+a &lt;nospellcheck&gt; tag:
+     <pre class="example">            &lt;TD&gt;&lt;FONT size=2&gt;&lt;NOSPELLCHECK&gt;leviosa&lt;/NOSPELLCHECK&gt;
+            is what Mr. Potter said&lt;/FONT&gt;&lt;/TD&gt;
+     </pre>
+     <p class="noindent">And put that word in the skip config directive:
+     <pre class="example">          add-sgml-skip nospellcheck
+     </pre>
+     <br><dt><b>sgml-check</b><dd>
+This is a list of attributes whose values you do want spell checked. By
+default, 'alt' (&lt;img&gt; alternate text) is a member of the check list
+since it is text that is seen by a web page viewer. You may also want
+'value' to be on the check list since that is the text put on buttons:
+     <pre class="example">          add-sgml-check value
+     </pre>
+     <p class="noindent">In this case `<samp><span class="samp">&lt;input type=button value="Donr"&gt;</span></samp>' will be flagged as a
+misspelling. 
+</dl>
+
+   <p>This filter will also translate SGML characters of the form
+`<samp><span class="samp">&amp;#num;</span></samp>'.  Other SGML characters such as `<samp><span class="samp">&amp;amp;</span></samp>' will simply
+be skipped over so that the word `<samp><span class="samp">amp</span></samp>', for example, will not be
+spell checked.  Eventually full support for properly translating SGML
+characters will be added.
+
+<h5 class="subsubsection">4.4.1.5 HTML Filter</h5>
+
+<p>The <samp><span class="option">html</span></samp> filter is like the SGML Filter Mode but specialized for
+HTML.  By default, 'script' and 'style' are members of the skip list in
+HTML mode.
+
+<h5 class="subsubsection">4.4.1.6 TeX/LaTeX Filter</h5>
+
+<p>The <samp><span class="option">tex</span></samp> (all lowercase) filter mode skips over TeX
+commands and parameters and/or options to certain commands.  It also
+skips over TeX comments by default.  The option
+<samp><span class="option">[dont-]tex-check-comments</span></samp> controls whether or not Aspell will
+skip over TeX comments.  The option <samp><span class="option">add|rem-tex-command</span></samp>
+controls which TeX commands should have certain parameters and/or
+options also skipped over.  Commands that are not specified will have
+all their parameters and/or options checked.  The format for each item
+is
+
+<pre class="example">     &lt;command&gt; &lt;a list of p,P,o and Os&gt;
+</pre>
+   <p>The first item is simply the command name.  The second item controls
+which parameters to skip over.  A 'p' skips over a parameter while a
+'P' doesn't.  Similarly an 'o' will skip over an optional parameter
+while an 'O' doesn't.  The first letter on the list will apply to the
+first parameter, the second letter will apply to the second parameter
+etc.  If there are more parameters than letters Aspell will simply
+check them as normal.  For example the option
+
+<pre class="example">     add-tex-command rule pp
+</pre>
+   <p class="noindent">will skip over the first two parameters of the <code>rule</code> command
+while the option
+
+<pre class="example">     add-tex-command foo Pop
+</pre>
+   <p class="noindent">will <em>check</em> the first parameter of the <code>foo</code> command, skip
+over the next optional parameter, if it is present, and will skip over
+the second parameter &mdash; even if the optional parameter is not present
+&mdash; and will check any additional parameters.
+
+   <p>A `<samp><span class="samp">*</span></samp>' at the end of the command is simply ignored.  For example
+the option
+
+<pre class="example">     enlargethispage p
+</pre>
+   <p class="noindent">will ignore the first parameter in both <samp><span class="option">enlargethispage</span></samp> and
+<samp><span class="option">enlargethispage*</span></samp>.
+
+   <p>To remove a command simply use the <samp><span class="option">rem-tex-command</span></samp> option. 
+For example
+
+<pre class="example">     rem-tex-command foo
+</pre>
+   <p class="noindent">will remove the command foo, if present, from the list of TeX
+commands.
+
+   <p>The TeX filter mode is also available via <samp><span class="option">latex</span></samp> alias name.
+
+<!-- The TeXfilter mode also contains a decoding and a encoding filter for -->
+<!-- @emph{babel} character codes like the German Umlauts: -->
+<!-- @itemize @bullet -->
+<!-- @item -->
+<!-- @code{@"a} -> @code{\"a} -> @code{"a} -->
+<!-- @item -->
+<!-- @code{@"o} -> @code{\"o} -> @code{"o} -->
+<!-- @item -->
+<!-- @code{@"u} -> @code{\"u} -> @code{"u} -->
+<!-- @item -->
+<!-- @code{@"s} -> @code{\"s} -> @code{"s} -->
+<!-- @end itemize -->
+<!-- @end quotation -->
+<!-- @quotation -->
+<!-- @option{add|rem-tex-multi-byte} conversion -->
+<!-- Changes list of multi character coded TeX(babel) characters recognized -->
+<!-- by Aspell.  In case of German umlauts mentioned above this would mean -->
+<!-- that Aspell would decode from their multi character representation to -->
+<!-- their proper single char representation.  Given the German word -->
+<!-- @code{St@"arke} (strength) which within TeX/LaTeXdocument has to be -->
+<!-- written as @code{St"arke} or as @code{St\"arke} would split it into -->
+<!-- the two words @code{St} and @code{arke} if it does not know anything -->
+<!-- about the multi character encoding @code{"a} or @code{\"a} of -->
+<!-- @code{@"a}.  On the other hand if it knows about it than Aspell will -->
+<!-- recognize the word properly and will not try to make any strange -->
+<!-- suggestion. -->
+<!-- Each multi character coding conversion has to be specified the -->
+<!-- following way: -->
+<!-- @example -->
+<!-- @i{char}:@i{rep}[:@i{rep}[@dots{}]] -->
+<!-- @end example -->
+<!-- where @code{@i{char}} is the character encoded by multiple characters -->
+<!-- and rep stands for a specific representation of that character.  For -->
+<!-- each character may be specified as many representations as available -->
+<!-- for it. -->
+<!-- @end quotation -->
+<h5 class="subsubsection">4.4.1.7 Texinfo Filter</h5>
+
+<p>The <samp><span class="option">texinfo</span></samp> filter allows you to spell check Texinfo files. 
+It will skip over any Texinfo commands and their parameters when
+appropriate.  It will also skip over some Texinfo environments such as
+<samp><span class="command">example</span></samp>.  The list option <samp><span class="option">texinfo-ignore</span></samp>
+controls which commands to ignore the parameters of and the list option
+<samp><span class="option">texinfo-ignore-env</span></samp> controls which Texinfo
+environments to ignore.
+
+   <p>The Texinfo filter has special code to deal with the <samp><span class="command">@table</span></samp>
+and related commands.  It will apply the formatting command to each of
+the <samp><span class="command">@item</span></samp> or <samp><span class="command">@itemx</span></samp> commands just like Texinfo
+will.  This means that if the formatting command is <samp><span class="command">@code</span></samp>
+and and the <samp><span class="command">@code</span></samp> command is a member of the
+<samp><span class="option">texinfo-ignore</span></samp> option than the Texinfo filter will ignore the
+parameter of the <samp><span class="command">@item</span></samp> command as if the parameter was also
+the parameter of the <samp><span class="command">@code</span></samp> command.
+
+   <p>The Texinfo filter will also skip over the `<samp><span class="samp">\input texinfo</span></samp>' line.
+
+<h5 class="subsubsection">4.4.1.8 Nroff Filter</h5>
+
+<p>The <samp><span class="option">nroff</span></samp> filter mode allows you to check the spelling of
+Nroff documents. The mode is enabled by giving
+<samp><span class="option">--add-filter=nroff</span></samp> or <samp><span class="option">-n</span></samp> command line option to
+<samp><span class="command">aspell</span></samp>. It is also automatically enabled if the first three
+characters of the file being checked are <code>.\"</code> (a <samp><span class="command">nroff</span></samp> comment
+marker) or the file name ends in a one of the following suffixes:
+
+     <ul>
+<li>single decimal digit from `<samp><span class="samp">0</span></samp>' to `<samp><span class="samp">9</span></samp>'
+<li>letter `<samp><span class="samp">n</span></samp>'
+<li>`<samp><span class="samp">tmac</span></samp>'
+</ul>
+
+<p class="noindent">This filter mode skips following <samp><span class="command">nroff</span></samp> language
+elements:
+
+     <ul>
+<li>Comments
+<li>Requests
+<li>Names of <samp><span class="command">nroff</span></samp> registers (both traditional two-letter
+names and GNU nroff long names)
+<li>Arguments to the following requests: <code>ds</code>, <code>de</code>, <code>nr</code>,
+<code>do</code>, <code>so</code>. 
+<li>Arguments to font switch (<code>\f</code>) and size switch (<code>\s</code>)
+escapes
+<li>Arguments to extended charset escape in both traditional
+(<code>\(</code>) and extended (<code>\[comp1 comp2 ...]</code>) form. 
+</ul>
+
+<h5 class="subsubsection">4.4.1.9 Context Filter</h5>
+
+<p>The <em>context</em> filter allows Aspell to distinguish between visible
+and invisible contexts.  The visible ones will be spell checked and
+the invisible ones will be ignored.  The contexts are distinguished by
+the fact that the visible/invisible ones are delimited by specific and
+unique delimiter characters or character sequences.  Whether the
+delimited contexts should be visible or invisible only stated by the
+value of the <samp><span class="option">[dont-]context-visible-first</span></samp> option and not by
+the delimiters.
+
+   <p>The context delimiters are specified as pairs of delimiters via the
+<samp><span class="option">add|rem-context-delimiters</span></samp> option.  The delimiters enclosing
+a specific context are specified as a space separated pair.  If more
+than one delimiter pair is specified by one call of
+<samp><span class="option">add|rem-context-delimiters</span></samp> they have to be combined to a
+comma separated list.  To indicate that a context is always closed by
+end of line use <code>\0</code> sequence as closing delimiter.
+
+<h5 class="subsubsection">4.4.1.10 Ccpp Filter Mode</h5>
+
+<p>The <samp><span class="option">ccpp</span></samp> filter mode will limit spell checking to C/C++ comments
+and string literals. Any code in between will be left alone.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-Various-Items.html b/manual/aspell.html/Notes-on-Various-Items.html
new file mode 100644 (file)
index 0000000..7a86b70
--- /dev/null
@@ -0,0 +1,57 @@
+<html lang="en">
+<head>
+<title>Notes on Various Items - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="To-Do.html#To-Do" title="To Do">
+<link rel="prev" href="Other-Items.html#Other-Items" title="Other Items">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-Various-Items"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Other-Items.html#Other-Items">Other Items</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="To-Do.html#To-Do">To Do</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">D.3 Notes on Various Items</h3>
+
+<ul class="menu">
+<li><a accesskey="1" href="Word-skipping-by-context.html#Word-skipping-by-context">Word skipping by context</a>
+<li><a accesskey="2" href="Hidden-Markov-Model.html#Hidden-Markov-Model">Hidden Markov Model</a>
+<li><a accesskey="3" href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary">Email the Personal Dictionary</a>
+</ul>
+
+</body></html>
+
diff --git a/manual/aspell.html/Notes-on-Various-Options.html b/manual/aspell.html/Notes-on-Various-Options.html
new file mode 100644 (file)
index 0000000..e24f596
--- /dev/null
@@ -0,0 +1,58 @@
+<html lang="en">
+<head>
+<title>Notes on Various Options - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link rel="prev" href="Dumping-Configuration-Values.html#Dumping-Configuration-Values" title="Dumping Configuration Values">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-Various-Options"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Dumping-Configuration-Values.html#Dumping-Configuration-Values">Dumping Configuration Values</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">4.4 Notes on Various Options</h3>
+
+<ul class="menu">
+<li><a accesskey="1" href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>
+<li><a accesskey="2" href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option">Notes on the Prefix Option</a>
+<li><a accesskey="3" href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>
+<li><a accesskey="4" href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>
+</ul>
+
+</body></html>
+
diff --git a/manual/aspell.html/Notes-on-the-Different-Suggestion-Modes.html b/manual/aspell.html/Notes-on-the-Different-Suggestion-Modes.html
new file mode 100644 (file)
index 0000000..8a61d46
--- /dev/null
@@ -0,0 +1,95 @@
+<html lang="en">
+<head>
+<title>Notes on the Different Suggestion Modes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Options.html#Notes-on-Various-Options" title="Notes on Various Options">
+<link rel="prev" href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis" title="Notes on Typo-Analysis">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-the-Different-Suggestion-Modes"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+<hr>
+</div>
+
+<h4 class="subsection">4.4.4 Notes on the Different Suggestion Modes</h4>
+
+<p>In order to understand what these suggestion modes do, a basic
+understanding of how Aspell works is required.  For that, see
+<a href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">Aspell Suggestion Strategy</a>.
+
+   <p>The suggestion modes are as follows.
+
+     <dl>
+<dt><b>ultra</b><dd>This method will use the fastest method available to come up with
+decent suggestions.  This currently means that it will look for
+soundslikes within one edit distance.  This method will also use the
+replacement table if one is available.  In this mode Aspell gets about
+87% of the words from my small test kernel of misspelled words.  (Go
+to <a href="http://aspell.net/test">http://aspell.net/test</a> for more info on the test kernel as
+well as comparisons of this version of Aspell with previous versions
+and other spell checkers.)
+
+     <br><dt><b>fast</b><dd>This method is currently identical to <samp><span class="option">ultra</span></samp>.
+
+     <br><dt><b>normal</b><dd>This mode will use what ever method is necessary to return good
+suggestions in most cases in a reasonable amount of time.  This
+currently means it will looks for soundslikes within two edit distance
+apart.  This mode gets 93% of the words.
+
+     <br><dt><b>slow</b><dd>Like <samp><span class="option">normal</span></samp> except that &ldquo;reasonable amount of time&rdquo; is not
+a consideration.  In most cases it will return the same results as
+<samp><span class="option">normal</span></samp>.  The biggest difference is that it will try an ngram
+scan if the normal methods of finding a suggestion fail. 
+<!-- FIXME: Explain what this means. -->
+
+     <br><dt><b>bad-spellers</b><dd>This method is like <samp><span class="option">slow</span></samp> but is tailored more for the bad
+speller, where as the other modes are tailored more
+to strike a good balance between typos and true misspellings.  This
+mode never performs typo-analysis and returns a <em>huge</em> number of
+words for the really bad spellers who can't seem to get the spelling
+anything close to what it should be.  If the misspelled word looks
+anything like the correct spelling it is bound to be found
+<em>somewhere</em> on the list of 100 or more suggestions.  This mode
+gets 98% of the words. 
+</dl>
+
+   <p>If jump tables were not used then the <samp><span class="option">normal</span></samp> option is
+identical to <samp><span class="option">fast</span></samp> and the <samp><span class="option">slow</span></samp> option is identical
+to the <samp><span class="option">normal</span></samp> if jump tables were used.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Notes-on-the-Prefix-Option.html b/manual/aspell.html/Notes-on-the-Prefix-Option.html
new file mode 100644 (file)
index 0000000..4226a6e
--- /dev/null
@@ -0,0 +1,65 @@
+<html lang="en">
+<head>
+<title>Notes on the Prefix Option - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Options.html#Notes-on-Various-Options" title="Notes on Various Options">
+<link rel="prev" href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes" title="Notes on Various Filters and Filter Modes">
+<link rel="next" href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis" title="Notes on Typo-Analysis">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Notes-on-the-Prefix-Option"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+<hr>
+</div>
+
+<h4 class="subsection">4.4.2 Notes on the Prefix Option</h4>
+
+<p>The <samp><span class="option">prefix</span></samp> option is there to allow Aspell to easily be
+relocated.  Changing <samp><span class="option">prefix</span></samp> will change all directory names
+relative to the new prefix that are not explicitly set.  For example
+if <samp><span class="option">prefix</span></samp> was <samp><span class="file">/usr/local/aspell</span></samp> and <samp><span class="option">dict-dir</span></samp>
+has a default value of <samp><span class="file">/usr/local/aspell/dict</span></samp> than changing
+<samp><span class="option">prefix</span></samp> to <samp><span class="file">/opt/aspell</span></samp> will also change the default
+value of <samp><span class="option">dict-dir</span></samp> to <samp><span class="file">/opt/aspell/dict</span></samp>.  Note that
+modifying <samp><span class="option">prefix</span></samp> will only affect the default compiled in
+values of directories.  If a directory option is explicitly given a
+value then changing the value of <samp><span class="option">prefix</span></samp> has no effect on that
+directory option.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Other-Items.html b/manual/aspell.html/Other-Items.html
new file mode 100644 (file)
index 0000000..7bffdfb
--- /dev/null
@@ -0,0 +1,100 @@
+<html lang="en">
+<head>
+<title>Other Items - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="To-Do.html#To-Do" title="To Do">
+<link rel="prev" href="Important-Items.html#Important-Items" title="Important Items">
+<link rel="next" href="Notes-on-Various-Items.html#Notes-on-Various-Items" title="Notes on Various Items">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Other-Items"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Important-Items.html#Important-Items">Important Items</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="To-Do.html#To-Do">To Do</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">D.2 Other Items</h3>
+
+<p>These items all sound like good ideas however I am not sure when I
+will get to implementing them if ever.  Words in bold indicate how you
+should refer to the item when discussing it with me or others.
+
+     <ul>
+<li>Come up with a plug-in for <samp><span class="command">gEdit</span></samp> the gnome text editor.
+
+     <li>Change languages (and thus dictionaries) based on the information in
+the actual document.
+
+     <li>Come up with a mode that will skip words based on the symbols that
+(almost) always surround the word.  See <a href="Word-skipping-by-context.html#Word-skipping-by-context">Word skipping by context</a>.
+
+     <li>Create two <strong>server modes</strong> for Aspell.  One that uses the DICT
+protocol and one that uses <samp><span class="command">ispell -a</span></samp> method of communication
+via some arbitrary port.
+
+     <li>Come up with <strong>thread safe personal dictionaries</strong>.
+
+     <li>Use the <strong>Hidden Markov Model</strong> to base the suggestions on not
+only the word itself but on the context around the word. See <a href="Hidden-Markov-Model.html#Hidden-Markov-Model">Hidden Markov Model</a>.
+
+     <li>Having a way to <strong>email the personal dictionary</strong> and/or
+replacement list to a particular address either periodically or when
+it grows to a certain size. See <a href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary">Email the Personal Dictionary</a>. 
+</ul>
+
+   <p>The following good ideas were found in the Ispell <samp><span class="file">WISHES</span></samp> file
+so I thought I would pass them on.
+
+     <ul>
+<li>Ispell should be smart enough to ignore hyphenation signs, such as the
+TeX `<samp><span class="samp">\-</span></samp>' hyphenation indicator.
+
+     <li>(Jeff Edmonds) The personal dictionary should be able to remove
+certain words from the master dictionary, so that obscure words like
+"wether" wouldn't mask favorite typos.
+
+     <li>(Jeff Edmonds) It would be wonderful if Ispell could correct inserted
+spaces such as "th e" for "the" or even "can not" for "cannot".
+
+     <li>Since Ispell has dictionaries available to it, it is conceivable that
+it could automatically determine the language of a particular file by
+choosing the dictionary that produced the fewest spelling errors on
+the first few lines. 
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Phonetic-Code.html b/manual/aspell.html/Phonetic-Code.html
new file mode 100644 (file)
index 0000000..0b2bcbf
--- /dev/null
@@ -0,0 +1,371 @@
+<html lang="en">
+<head>
+<title>Phonetic Code - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Compiling-the-Word-List.html#Compiling-the-Word-List" title="Compiling the Word List">
+<link rel="next" href="The-Simple-Soundslike.html#The-Simple-Soundslike" title="The Simple Soundslike">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Phonetic-Code"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="The-Simple-Soundslike.html#The-Simple-Soundslike">The Simple Soundslike</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Compiling-the-Word-List.html#Compiling-the-Word-List">Compiling the Word List</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.3 Phonetic Code</h3>
+
+<!-- @emph{(The following section was originally written by Bj@"orn Jacke, -->
+<!-- bjoern.jacke at gmx de)} -->
+<p>Aspell is in fact the spell checker that comes up with the best
+suggestions if it finds an unknown word.  One reason is that it does
+not just compare the word with other words in the dictionary (like
+Ispell does) but also uses phonetic comparisons with other words.
+
+   <p>The new table driven phonetic code is very flexible and setting up
+phonetic transformation rules for other languages is not difficult but
+there can be a number of stumbling blocks &mdash; that's why I wrote this
+section.
+
+   <p>The main phonetic code is free of any language specific code and
+should be powerful enough to allow setting up rules for any language. 
+Anything which is language specific is kept in a plain text file and
+can easily be edited.  So it's even possible to write phonetic
+transformation rules if you don't have any programming skills.  All
+you need to know is how words of the language are written and how they
+are pronounced.
+
+<h4 class="subsection">7.3.1 Syntax of the transformation array</h4>
+
+<p>In the translation array there are two strings on each line; the first
+one is the search string (or switch name) and the second one is the
+replacement string (or switch parameter).  The line
+
+<pre class="example">     version   <var>version</var>
+</pre>
+   <p class="noindent">is also required to appear somewhere in the translation array.  The
+version string can be anything but it should be changed whenever a new
+version of the translation array is released.  This is important
+because it will keep Aspell from using a compiled dictionary with the
+wrong set of rules.  For example, if when coming up with suggestion
+for <code>hallo</code>, Aspell will use the new rules to come up with the
+soundslike say <code>H*L*</code>, but if `<samp><span class="samp">hello</span></samp>' is stored in the
+dictionary using the old rules as <code>HL</code> instead of <code>H*L*</code>
+Aspell will never be able to come up with `<samp><span class="samp">hello</span></samp>'.  So to solve
+this problem Aspell checks if the version strings match and aborts
+with an error if they don't.  Thus it is important to update it
+whenever a new version of the translation array is released.  This is
+only a problem with the main word list as the personal word lists are
+now stored as simple word lists with a single header line (i.e. no
+soundslike data).
+
+   <p>Each non switch line represents one replacement (transformation) rule. 
+Words beginning with the same letter must be grouped together; the
+order inside this group does not depend on alphabetical issues but it
+gives priorities; the higher the rule the higher the priority.  That's
+why the first rule that matches is applied.  In the following example:
+
+<pre class="example">     GH   _
+     G    K
+</pre>
+   <p class="noindent">`<samp><span class="samp">GH -&gt; _</span></samp>' has higher priority than `<samp><span class="samp">G -&gt; K</span></samp>'
+
+   <p>`<samp><span class="samp">_</span></samp>' represents the empty string &ldquo;&rdquo;.  If `<samp><span class="samp">GH -&gt; _</span></samp>' came
+after `<samp><span class="samp">G -&gt; K</span></samp>', the second rule would never match because the
+algorithm would stop searching for more rules after the first match. 
+The above rules transform any `<samp><span class="samp">GH</span></samp>' to an empty string (delete
+them) and transforms any other `<samp><span class="samp">G</span></samp>' to `<samp><span class="samp">K</span></samp>'.
+
+   <p>At the end of the first string of a line (the search string) there may
+optionally stand a number of characters in brackets.  One (only one!) 
+of these characters must fit.  It's comparable with the `<samp><span class="samp">[ ]</span></samp>'
+brackets in regular expressions.  The rule `<samp><span class="samp">DG(EIY) -&gt; J</span></samp>' for
+example would match any `<samp><span class="samp">DGE</span></samp>', `<samp><span class="samp">DGI</span></samp>' and
+`<samp><span class="samp">DGY</span></samp>' and replace them with `<samp><span class="samp">J</span></samp>'.  This way you can
+reduce several rules to one.
+
+   <p>Before the search string, one or more dashes `<samp><span class="samp">-</span></samp>' may be placed. 
+Those search strings will be matched totally but only the beginning of
+the string will be replaced.  Furthermore, for these rules no follow-up
+rule will be searched (what this is will be explained later).  The
+rule `<samp><span class="samp">TCH-- </span></samp>'-&gt; _ will match any word containing
+`<samp><span class="samp">TCH</span></samp>' (like `<samp><span class="samp">match</span></samp>') but will only replace the first
+character `<samp><span class="samp">T</span></samp>' with an empty string.  The number of dashes
+determines how many characters from the end will not be replaced. 
+After the replacement, the search for transformation rules continues
+with the not replaced `<samp><span class="samp">CH</span></samp>'!
+
+   <p>If a `<samp><span class="samp">&lt;</span></samp>' is appended to the search string, the search for
+replacement rules will continue with the replacement string and not with
+the next character of the word.  The rule `<samp><span class="samp">PH&lt; -&gt; F</span></samp>' for example
+would replace `<samp><span class="samp">PH</span></samp>' with `<samp><span class="samp">F</span></samp>' and then again start to search for
+a replacement rule for `<samp><span class="samp">F...</span></samp>'.  If there would also be rules
+like `<samp><span class="samp">FO </span></samp>'-&gt; `<samp><span class="samp">O</span></samp>' and `<samp><span class="samp">F -&gt; _</span></samp>' then words like
+`<samp><span class="samp">PHOXYZ</span></samp>' would be transformed to `<samp><span class="samp">OXYZ</span></samp>' and any occurrences of
+`<samp><span class="samp">PH</span></samp>' that are not followed by an `<samp><span class="samp">O</span></samp>' will be deleted like
+`<samp><span class="samp">PHIXYZ -&gt; IXYZ</span></samp>'.  The second replacement however is not applied if
+the priority of this rule is lower than the priority of the first rule.
+
+   <p>Priorities are added to a rule by putting a number between 0 and 9 at
+the end of the search string, for example `<samp><span class="samp">ING6 -&gt; N</span></samp>'. 
+The higher the number the higher is the priority.
+
+   <p>Priorities are especially important for the previously mentioned
+follow-up rules.  Follow-up rules are searched beginning from the last
+string of the first search string.  This is a bit complicated but I
+hope this example will make it clearer:
+
+<pre class="example">     CHS      X
+     CH       G
+     
+     HAU--1   H
+     
+     SCH      SH
+</pre>
+   <p>In this example `<samp><span class="samp">CHS</span></samp>' in the word `<samp><span class="samp">FUCHS</span></samp>' would be
+transformed to `<samp><span class="samp">X</span></samp>'.  If we take the word `<samp><span class="samp">DURCHSCHNITT</span></samp>' then
+things look a bit different.  Here `<samp><span class="samp">CH</span></samp>' belongs together and
+`<samp><span class="samp">SCH</span></samp>' belongs together and both are spoken separately.  The
+algorithm however first finds the string `<samp><span class="samp">CHS</span></samp>' which may not be
+transformed like in the previous word `<samp><span class="samp">FUCHS</span></samp>'.  At this point the
+algorithm can find a follow-up rule.  It takes the last character of
+the first matching rule (`<samp><span class="samp">CHS</span></samp>') which is `<samp><span class="samp">S</span></samp>' and looks for
+the next match, beginning from this character.  What it finds is
+clear: It finds `<samp><span class="samp">SCH -&gt; SH</span></samp>', which has the same priority
+(no priority means standard priority, which is 5).  If the priority is
+the same or higher the follow-up rule will be applied.  Let's take a
+look at the word `<samp><span class="samp">SCHAUKEL</span></samp>'.  In this word `<samp><span class="samp">SCH</span></samp>' belongs
+together and may not be taken apart.  After the algorithm has found
+`<samp><span class="samp">SCH </span></samp>'-&gt; `<samp><span class="samp">SH</span></samp>' it searches for a follow-up rule for
+`<samp><span class="samp">H+</span></samp>'`<samp><span class="samp">AUKEL</span></samp>'.  It finds `<samp><span class="samp">HAU--1 -&gt; H</span></samp>', but does not
+apply it because its priority is lower than the one of the first rule. 
+You see that this is a very powerful feature but it also can easily
+lead to mistakes.  If you really don't need this feature you can turn
+it off by putting the line:
+
+<pre class="example">     followup      0
+</pre>
+   <p class="noindent">at the beginning of the phonetic table file.  As mentioned, for rules
+containing a `<samp><span class="samp">-</span></samp>' no follow-up rules are searched but giving such
+rules a priority is not totally senseless because they can be
+follow-up rules and in that case the priority makes sense again. 
+Follow-up rules of follow-up rules are not searched because this is in
+fact not needed very often.
+
+   <p>The control character `<samp><span class="samp">^</span></samp>' says that the search string only
+matches at the beginning of words so that the rule `<samp><span class="samp">RH -&gt; R</span></samp>' will
+only apply to words like `<samp><span class="samp">RHESUS</span></samp>' but not `<samp><span class="samp">PERHAPS</span></samp>'.  You
+can append another `<samp><span class="samp">^</span></samp>' to the search string.  In that case the
+algorithm treats the rest of the word totally separately from the
+first matched string at the beginning.  This is useful for prefixes
+whose pronunciation does not depend on the rest of the word and vice
+versa like `<samp><span class="samp">OVER^^</span></samp>' in English for example.
+
+   <p>The same way as `<samp><span class="samp">^</span></samp>' works does `<samp><span class="samp">$</span></samp>' only apply to words
+that end with the search string.  `<samp><span class="samp">GN$ -&gt; N</span></samp>' only
+matches on words like `<samp><span class="samp">SIGN</span></samp>' but not `<samp><span class="samp">SIGNUM</span></samp>'.  If
+you use `<samp><span class="samp">^</span></samp>' and `<samp><span class="samp">$</span></samp>' together, both of them must fit
+`<samp><span class="samp">ENOUGH^$ -&gt; NF</span></samp>' will only match the word
+`<samp><span class="samp">ENOUGH</span></samp>' and nothing else.
+
+   <p>Of course you can combine all of the mentioned control characters but
+they must occur in this order: `<samp><span class="samp">&lt; - priority ^ $</span></samp>'.  All
+characters must be written in CAPITAL letters.
+
+   <p>If absolutely no rule can be found &mdash; might happen if you use strange
+characters for which you don't have any replacement rule &mdash; the next
+character will simply be skipped and the search for replacement rules
+will continue with the rest of the word.
+
+   <p>If you want double letters to be reduced to one you must set up a rule
+like `<samp><span class="samp">LL- -&gt; L</span></samp>'.  If double letters in the resulting phonetic
+word should be allowed, you must place the line:
+
+<pre class="example">     collapse_result     0
+</pre>
+   <p class="noindent">at the beginning of your transformation table file; otherwise set the
+value to `1'.  The English rules for example strip all vowels from
+words and so the word "GOGO" would be transformed to "K" and not to
+"KK" (as desired) if <code>collapse_result</code> is set to 1.  That's why
+the English rules have <code>collapse_result</code> set to <code>0</code>.
+
+   <p>By default, all accents are removed from a word before it is matched to
+the soundslike rules.  If you do not want this then add the line
+
+<pre class="example">     remove_accents      0
+</pre>
+   <p>at the beginning of your file.  The exact definition of an accent is
+language dependent and is controlled via the character set file.  If you
+set remove_accents to '0' then you should also set "store-as" to "lower"
+in the language data file (not the phonetic transformation file)
+otherwise Aspell will have problems when both the accented and the
+de-accented version of a word appearing in the dictionary; it will
+consider one of them as incorrectly spelled.
+
+<h4 class="subsection">7.3.2 How do I start finally?</h4>
+
+<p>Before you start to write an array of transformation rules, you should
+be aware that you have to do some work to make sure that things you do
+will result in correct transformation rules.
+
+<h5 class="subsubsection">7.3.2.1 Things that come in handy</h5>
+
+<p>First of all, you need to have a large word list of the language you
+want to make phonetics for.  It should contain about as many words as
+the dictionary of the spell checker.  If you don't have such a list,
+you will probably find an Ispell dictionary at
+<a href="http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html">http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html</a> which
+will help you.  You can then make affix expansion via <samp><span class="command">ispell
+-e</span></samp> and then pipe it through <samp><span class="command">tr " " "\n"</span></samp> to put one word on
+each line.  After that you eventually have to convert special
+characters like `<samp><span class="samp">&eacute;</span></samp>' from Ispell's internal representation to
+latin1 encoding.  <samp><span class="command">sed s/e'/&eacute;/g</span></samp> for example would replace
+all `<samp><span class="samp">e'</span></samp>' with `<samp><span class="samp">&eacute;</span></samp>'.
+
+   <p>The second is that you know how to use regular expressions and know
+how to use <samp><span class="command">grep</span></samp>.  You should for example know that:
+
+<pre class="example">     grep ^[^aeiou]qu[io] wordlist | less
+</pre>
+   <p class="noindent">will show you all words that begin with any character but `<samp><span class="samp">a</span></samp>',
+`<samp><span class="samp">e</span></samp>', `<samp><span class="samp">i</span></samp>', `<samp><span class="samp">o</span></samp>' or `<samp><span class="samp">u</span></samp>' and then continue with
+`<samp><span class="samp">qui</span></samp>' or `<samp><span class="samp">quo</span></samp>'.  This stuff is important for example to
+find out if a phonetic replacement rule you want to set up is valid
+for all words which match the expression you want to replace.  Taking
+a look at the regex(7) man page is a good idea.
+
+<h5 class="subsubsection">7.3.2.2 What the phonetic code should do</h5>
+
+<p>Normal text comparison works well as long as the typer misspells a
+word because he pressed one key he didn't really want to press.  In
+these cases, mostly one character differs from the original word.
+
+   <p>In cases where the writer didn't know about the correct spelling of
+the word, the word may have several characters that differ from the
+original word but usually the word would still sound like the
+original.  Someone might think that `tough' is spelled `taff'.  No
+spell checker without phonetic code will come to the idea that this
+might be `tough', but a spell checker who knows that `taff' would be
+pronounced like `tough' will make good suggestions to the user.  Another
+example could be `funetik' and `phonetic'.
+
+   <p>From these examples you can see that the phonetic transformation should
+not be too fussy and too precise.  If you implement a whole phonetic
+dictionary as you can find it in books this will not be very useful
+because then there could still be many characters differing from the
+misspelled and the desired word.  What you should do if you implement
+the phonetic transformation table is to reduce the number of used
+letters to the only really necessary ones.
+
+   <p>Characters that sound similar should be reduced to one.  In the English
+language for example `Z' sounds like `S' and that's why the
+transformation rule `<samp><span class="samp">Z -&gt; S</span></samp>' is present in the
+replacement table.  &ldquo;PH is spoken like &ldquo;F and so we have a
+`<samp><span class="samp">PH -&gt; F</span></samp>' rule.
+
+   <p>If you take a closer look you will even see that vowels sound very
+similar in the English language: `contradiction', `cuntradiction',
+`cantradiction' or `centradiction' in fact sound nearly the same,
+don't they? Therefore the English phonetic replacement rules not only
+reduce all vowels to one but even remove them all (removing is done by
+just setting up no rule for those letters).  The phonetic code of
+&ldquo;contradiction&rdquo; is &ldquo;KNTRTKXN&rdquo; and if you try to read this
+letter-monster loud you will hear that it still sound a bit like
+`contradiction'.  You also see that &ldquo;D&rdquo; is transformed to &ldquo;T&rdquo;
+because they nearly sound the same.
+
+   <p>If you think you have found a regularity you should <em>always</em> take
+your word list and <samp><span class="command">grep</span></samp> for the corresponding regular
+expression you want to make a transformation rule for.  An example: If
+you come to the idea that all English words ending on `ough' sound
+like `AF' at the end because you think of `enough' and `tough'.  If
+you then <code>grep</code> for the corresponding regular expression by
+<samp><span class="command">grep -i ough$ wordlist</span></samp> you will see that the rule you wanted
+to set up is not correct because the rule doesn't fit to words like
+`although' or `bough'.  So you have to define your rule more precisely
+or you have to set up exceptions if the number of words that differ
+from the desired rule is not too big.
+
+   <p>Don't forget about follow-up rules which can help in many cases but
+which also can lead to confusion and unwanted side effects.  It's also
+important to write exceptions in front of the more general rules
+(`<samp><span class="samp">GH</span></samp>' before `<samp><span class="samp">G</span></samp>' etc.).
+
+   <p>If you think you have set up a number of rules that may produce some
+good results try them out! If you run Aspell as <samp><span class="command">aspell
+--lang=</span><var>your_language</var><span class="command"> pipe</span></samp> you get a prompt at which you can type
+in words.  If you just type words Aspell checks them and eventually
+makes suggestions if they are misspelled.  If you type in <code>$$Sw
+</code><var>word</var> you will see the phonetic transformation and you can test
+out if your work does what you want.
+
+   <p>Another good way to check that changes you make to your rules don't
+have any bad side effects is to create another list from your word
+list which contains not only the word of the word list but also the
+corresponding phonetic version of this word on the same line.  If you
+do this once before the change and once after the change you can make
+a diff (see <samp><span class="command">man diff</span></samp>) to see what <em>really</em> changed.  To
+do this use the command <samp><span class="command">aspell --lang=</span><var>your_language</var><span class="command">
+soundslike</span></samp>.  In this mode Aspell will output the the original word
+and then its soundslike separated by a tab character for each word you
+give it.  If you are interested in seeing how the algorithm works you
+can download a set of useful programs from
+<a href="http://members.xoom.com/maccy/spell/phonet-utils.tar.gz">http://members.xoom.com/maccy/spell/phonet-utils.tar.gz</a>.  This
+includes a program that produces a list as mentioned above and another
+program which illustrates how the algorithm works.  It uses the same
+transformation table as Aspell and so it helps a lot during the
+process of creating a phonetic transformation table for Aspell.
+
+   <p>During your work you should write down your basic ideas so that other
+people are able to understand what you did (and you still know about
+it after a few weeks).  The English table has a huge documentation
+appended as an example.
+
+   <p>Now you can start experimenting with all the things you just read and
+perhaps set up a nice phonetic transformation table for your language
+to help Aspell to come up with the best correction suggestions ever
+seen also for your language.  Take a look at the Aspell homepage to
+see if there is already a transformation table for your language.  If
+there is one you might also take a look at it to see if it could be
+improved.
+
+   <p>If you think that this section helped you or if you think that this is
+just a waste of time you can send any feedback to
+<a href="mailto:bjoern.jacke@gmx.de">bjoern.jacke@gmx.de</a>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Planned-Dictionaries.html b/manual/aspell.html/Planned-Dictionaries.html
new file mode 100644 (file)
index 0000000..0cb0389
--- /dev/null
@@ -0,0 +1,203 @@
+<html lang="en">
+<head>
+<title>Planned Dictionaries - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="prev" href="Multiple-Scripts.html#Multiple-Scripts" title="Multiple Scripts">
+<link rel="next" href="References.html#References" title="References">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Planned-Dictionaries"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="References.html#References">References</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Multiple-Scripts.html#Multiple-Scripts">Multiple Scripts</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">B.4 Notes on Planned Dictionaries</h3>
+
+<p>According to
+<a href="http://wiki.services.openoffice.org/wiki/Dictionaries">http://wiki.services.openoffice.org/wiki/Dictionaries</a>, Open
+Office dictionaries are available for the following languages, but no
+corresponding Aspell dictionary exists:
+
+     <ul>
+<li>Coptic (cop)
+<li>Dyula (dyu)
+<li>Fulah (ff)
+<li>Fijian (fj)
+<li>Friulian (fur)
+<li>Khmer (km)
+<li>Luxembourgish (lb)
+<li>Mossi (mos)
+<li>Nepali (ne)
+<li>South Ndebele (nr)
+<li>Northern Sotho (nso)
+<li>Swati (ss)
+<li>Southern Sotho (st)
+<li>Tsonga (ts)
+<li>Venda (ve)
+<li>Xhosa (xh)
+</ul>
+
+<p class="noindent">If you are interested in converting any of them please coordinate your
+efforts with the dictionary author and submit it to
+aspell-dict at gnu org when you have something ready.
+
+   <p>An unofficial dictionary for Albanian (sq) is available at
+<a href="http://psychology.rutgers.edu/~zaimi/software.html">http://psychology.rutgers.edu/~zaimi/software.html</a>.  However,
+I can not find any contact information for the author, thus I have
+been unable to contact him.  In addition an Albanian (sq) dictionary
+is available for Ispell at
+<a href="http://www.7kosova.com/kde-shqip/ispell/ispell.html">http://www.7kosova.com/kde-shqip/ispell/ispell.html</a>. 
+However, the raw word list is not provided and the author has not
+been responding to emails, possibly because he doesn't speak English. 
+If you have any additional information on either of these dictionaries,
+or can speak Albanian and can translate for me please let me know at
+<a href="mailto:kevina@gnu.org">kevina@gnu.org</a>
+
+   <p>An unofficial dictionary for Malayalam (ml) is available at
+<a href="http://in.geocities.com/paivakil/downloads/aspell/">http://in.geocities.com/paivakil/downloads/aspell/</a>. 
+I am working with the author to create an official one.
+
+   <p>Kevin Patrick Scannell has word lists available for the following
+languages based on his web crawling software
+(<a href="http://borel.slu.edu/crubadan/">http://borel.slu.edu/crubadan/</a>) but needs someone to proofread
+them:
+
+     <ul>
+<li>Afrikaans (af)
+<li>Asturian / Bable (ast)
+<li>Azerbaijani (az)
+<li>Balinese (ban)
+<li>Bemba (bem)
+<li>Bislama (bi)
+<li>Breton (br)
+<li>Catalan / Valencian (ca)
+<li>Cebuano (ceb)
+<li>Chamorro (ch)
+<li>Chuukese (chk)
+<li>Corsican (co)
+<li>Kashubian (csb)
+<li>Welsh (cy)
+<li>Basque (eu)
+<li>Fijian (fj)
+<li>Faroese (fo)
+<li>Friulian (fur)
+<li>Frisian (fy)
+<li>Irish (ga)
+<li>Scottish Gaelic (gd)
+<li>Gallegan (gl)
+<li>Guarani (gn)
+<li>Manx Gaelic (gv)
+<li>Hausa (ha)
+<li>Hawaiian (haw)
+<li>Hiligaynon (hil)
+<li>Haitian Creole (ht)
+<li>Iban (iba)
+<li>Igbo (ig)
+<li>Iloko (ilo)
+<li>Javanese (jv)
+<li>Kachin (kac)
+<li>Khasi (kha)
+<li>Kalaallisut / Greenlandic (kl)
+<li>Konkani (kok)
+<li>Kurdish (ku)
+<li>Cornish (kw)
+<li>Luxembourgish (lb)
+<li>Ganda (lg)
+<li>Limburgian (li)
+<li>Lingala (ln)
+<li>Lozi (loz)
+<li>Luo (Kenya and Tanzania) (luo)
+<li>Malagasy (mg)
+<li>Marshallese (mh)
+<li>Maori (mi)
+<li>Minangkabau (min)
+<li>Mongolian (mn)
+<li>Maltese (mt)
+<li>North Ndebele (nd)
+<li>Low Saxon (nds)
+<li>Ndonga (ng)
+<li>Niuean (niu)
+<li>Norwegian Nynorsk (nn)
+<li>Northern Sotho (nso)
+<li>Navajo (nv)
+<li>Nyanja (ny)
+<li>Occitan / Provencal (oc)
+<li>Pampanga (pam)
+<li>Papiamento (pap)
+<li>Quechua (qu)
+<li>Rarotongan (rar)
+<li>Rundi (rn)
+<li>Kinyarwanda (rw)
+<li>Sardinian (sc)
+<li>Northern Sami (se)
+<li>Sango (sg)
+<li>Samoan (sm)
+<li>Shona (sn)
+<li>Somali (so)
+<li>Swati (ss)
+<li>Southern Sotho (st)
+<li>Sundanese (su)
+<li>Swahili (sw)
+<li>Tetum (tet)
+<li>Tajik (tg)
+<li>Turkmen (tk)
+<li>Tokelau (tkl)
+<li>Tagalog (tl)
+<li>Tswana (tn)
+<li>Tonga (to)
+<li>Tok Pisin (tpi)
+<li>Tsonga (ts)
+<li>Tahitian (ty)
+<li>Venda (ve)
+<li>Walloon (wa)
+<li>Wolof (wo)
+<li>Xhosa (xh)
+<li>Yoruba (yo)
+<li>Zulu (zu)
+</ul>
+
+<p class="noindent">If you are interested, please contact him at scannell at slu edu.
+
+   <p>A dictionary marked as "Planned" or "Maybe" but not listed in
+the section means that someone has expressed an interest in creating
+one.  If you are interested in helping please contact me at
+<a href="mailto:kevina@gnu.org">kevina@gnu.org</a> so that I can put you in touch with them.
+
+   </body></html>
+
diff --git a/manual/aspell.html/References.html b/manual/aspell.html/References.html
new file mode 100644 (file)
index 0000000..8e7fac0
--- /dev/null
@@ -0,0 +1,82 @@
+<html lang="en">
+<head>
+<title>References - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="prev" href="Planned-Dictionaries.html#Planned-Dictionaries" title="Planned Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="References"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Planned-Dictionaries.html#Planned-Dictionaries">Planned Dictionaries</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">B.5 References</h3>
+
+<p>The information in this chapter was gathered from numerous sources,
+including:
+
+     <ul>
+<li>ISO 639-2 Registration Authority,
+<a href="http://www.loc.gov/standards/iso639-2/">http://www.loc.gov/standards/iso639-2/</a>
+
+     <li>Languages and Scripts (Official Unicode Site),
+<a href="http://www.unicode.org/onlinedat/languages-scripts.html">http://www.unicode.org/onlinedat/languages-scripts.html</a>
+
+     <li>Omniglot - a guide to written language, <a href="http://www.omniglot.com/">http://www.omniglot.com/</a>
+
+     <li>Wikipedia - The Free Encyclopedia, <a href="http://wikipedia.org/">http://wikipedia.org/</a>
+
+     <li>Ethnologue - Languages of the World,
+<a href="http://www.ethnologue.com/">http://www.ethnologue.com/</a>
+
+     <li>World Languages - The Ultimate Language Store,
+<a href="http://www.worldlanguage.com/">http://www.worldlanguage.com/</a>
+
+     <li>South African Languages Web,
+<a href="http://www.languages.web.za/">http://www.languages.web.za/</a>
+
+     <li>The Languages and Writing Systems of Africa (Global Advisor Newsletter),
+<a href="http://www.intersolinc.com/newsletters/africa.htm">http://www.intersolinc.com/newsletters/africa.htm</a>
+
+   </ul>
+
+   <p>Special thanks goes to Era Eriksson for helping me with the information in
+this chapter.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Replacement-Tables.html b/manual/aspell.html/Replacement-Tables.html
new file mode 100644 (file)
index 0000000..02eb2a9
--- /dev/null
@@ -0,0 +1,80 @@
+<html lang="en">
+<head>
+<title>Replacement Tables - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="The-Simple-Soundslike.html#The-Simple-Soundslike" title="The Simple Soundslike">
+<link rel="next" href="Affix-Compression.html#Affix-Compression" title="Affix Compression">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Replacement-Tables"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Affix-Compression.html#Affix-Compression">Affix Compression</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="The-Simple-Soundslike.html#The-Simple-Soundslike">The Simple Soundslike</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.5 Replacement Tables</h3>
+
+<p>When phonetic code is not used a replacement table can be used instead. 
+To enable the use of a replacement table add the line <code>repl-table
+</code><var>lang</var>, in which case the replacement table is excepted to be in
+the file <samp><var>lang</var><span class="file">_repl.dat</span></samp>.  A complete file name can also be
+specified in place of <var>lang</var>.  For compatibility with MySpell the
+replacement table can also be part of the affix file, in which case
+<samp><span class="option">repl-table</span></samp> will be <samp><var>lang</var><span class="file">_affix.dat"</span></samp>.
+
+   <p>Replacement table syntax:
+
+<pre class="example">     REP [number_of_replacement_definitions]
+     REP [what] [replacement]
+     REP [what] [replacement]
+</pre>
+   <p>For example a possible English replacement table definition
+to handle misspelled consonants:
+
+<pre class="example">     REP 8
+     REP f ph
+     REP ph f
+     REP f gh
+     REP gh f
+     REP j dg
+     REP dg j
+     REP k ch
+     REP ch k
+</pre>
+   </body></html>
+
diff --git a/manual/aspell.html/Specifying-Options.html b/manual/aspell.html/Specifying-Options.html
new file mode 100644 (file)
index 0000000..ad3e171
--- /dev/null
@@ -0,0 +1,195 @@
+<html lang="en">
+<head>
+<title>Specifying Options - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link rel="next" href="The-Options.html#The-Options" title="The Options">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Specifying-Options"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="The-Options.html#The-Options">The Options</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">4.1 Specifying Options</h3>
+
+<h4 class="subsection">4.1.1 At the Command Line</h4>
+
+<p>All options specified at the command line have the following basic format:
+
+<pre class="example">     --<var>option</var>[=<var>value</var>]
+</pre>
+   <p class="noindent">where the `<samp><span class="samp">=</span></samp>' can be replaced by whitespace.
+
+   <p>Some options also have single letter abbreviations of the form:
+
+<pre class="example">     <var>letter</var> [<var>optional_whitespace</var> <var>value</var>]
+</pre>
+   <p>Any non-ASCII characters are expected to be in the encoding
+specified by the current locale.
+
+   <p>To reset an option to the default value, prefix the option with a
+`<samp><span class="samp">reset-</span></samp>' and don't specify a value.
+
+<h5 class="subsubsection">4.1.1.1 Value options</h5>
+
+<p>To specify a value option simply specify the option with its
+corresponding value.  For example to set the filter mode to TeX use
+`<samp><span class="samp">--mode=tex</span></samp>'.
+
+   <p>If a value option has a single letter shortcut simply specify the single
+letter shortcut with its corresponding value.  For example to use a the
+accented version of the American English dictionary use `<samp><span class="samp">-d
+en_US-w_accents</span></samp>'.
+
+<h5 class="subsubsection">4.1.1.2 Boolean options</h5>
+
+<p>To enable a boolean option simply specify the option without any
+corresponding value, or prefix it with an `<samp><span class="samp">enable-</span></samp>'.  For example
+to create a backup file use `<samp><span class="samp">--backup</span></samp>'.  To disable a boolean
+option prefix the option name with a `<samp><span class="samp">dont-</span></samp>' or `<samp><span class="samp">disable-</span></samp>'. 
+To avoid creating a backup file use `<samp><span class="samp">--dont-backup</span></samp>'.  Boolean options
+can also be set directly like a value option where the value is either
+"true" or "false", for example `<samp><span class="samp">--backup=true</span></samp>'.
+
+   <p>If a boolean option has a single letter abbreviation simply give the
+letter corresponding to either enabling or disabling the option
+without any corresponding value.  For example, to consider run-together
+words valid use `<samp><span class="samp">-C</span></samp>' or to consider them invalid use
+`<samp><span class="samp">-B</span></samp>'
+
+<h5 class="subsubsection">4.1.1.3 List options</h5>
+
+<p>To add a value to the list, prefix the option name with an
+`<samp><span class="samp">add-</span></samp>' and then specify the value to add.  For example, to add
+the URL filter use `<samp><span class="samp">--add-filter url</span></samp>'.  To remove a value from
+a list option, prefix the option name with a `<samp><span class="samp">rem-</span></samp>' and then
+specify the value to remove.  For example, to remove the URL filter use
+`<samp><span class="samp">--rem-filter url</span></samp>'.  To remove all items from a list prefix the
+option name with a `<samp><span class="samp">clear-</span></samp>' without specify any value.  For
+example, to remove all filters use `<samp><span class="samp">--clear-filter</span></samp>'.
+
+   <p>A list option can also be set directly, in which case it will be set to
+a single value.  To directly set a list option to multiple values prefix
+the option name with a `<samp><span class="samp">lset-</span></samp>' and separate each value with a
+`<samp><span class="samp">:</span></samp>'.  For example, to use the URL and TeX filter use
+`<samp><span class="samp">--lset-filter url:tex</span></samp>'.
+
+<h4 class="subsection">4.1.2 Via a Configuration File</h4>
+
+<p>Aspell can also accept options via a personal or global configuration
+file.  The exact files to used are specified by the options
+<samp><span class="option">per-conf</span></samp> and <samp><span class="option">conf</span></samp> respectively but the personal
+configuration file is normally <samp><span class="file">.aspell.conf</span></samp> located in the
+<samp><span class="env">HOME</span></samp> directory and the global one is normally <samp><span class="file">aspell.conf</span></samp>
+which is located in the <samp><span class="file">etc</span></samp> directory which is normally
+<samp><span class="file">/usr/etc</span></samp> or <samp><span class="file">/usr/local/etc</span></samp>.  To find out the particular
+values for your particular system use <samp><span class="command">aspell dump config</span></samp>.
+
+   <p>Each line of the configuration file has the format:
+
+<pre class="example">     <var>option</var> [<var>value</var>]
+</pre>
+   <p>There may be any number of spaces between the option and the value
+however it can only be spaces, i.e. there is no `<samp><span class="samp">=</span></samp>' between the
+option name and the value and there are no preceding `<samp><span class="samp">--</span></samp>' as
+used on the command line.
+
+   <p>Comments may also be included by preceding them with a `<samp><span class="samp">#</span></samp>' as
+anything from a `<samp><span class="samp">#</span></samp>' to a newline is ignored.  Blank lines are also
+allowed.
+
+   <p>To include a literal `<samp><span class="samp">#</span></samp>' use `<samp><span class="samp">\#</span></samp>'.  To include a literal
+`<samp><span class="samp">\</span></samp>' use `<samp><span class="samp">\\</span></samp>'.  Any other non-alpha character can also be
+protected by a `<samp><span class="samp">\</span></samp>' if necessary.
+
+   <p>Any non-ASCII characters are expected to be in UTF-8.
+
+   <p>To reset an option to the default value prefix the option with a
+`<samp><span class="samp">reset-</span></samp>' and don't specify a value.
+
+   <p>Values set in the personal configuration file override those in the
+global file.  Options specified at either the command line or via an
+environment variable override those specified by either configuration
+file.
+
+   <blockquote>
+<b>Note:</b> Filters and corresponding options also may be assembled
+inside a special meta filter file named <samp><var>metafilter</var><span class="file">.flt</span></samp>.  A
+filter has to be loaded via adding a <code>add-filter </code><var>filtername</var>
+line to the meta filter file before its options may be specified. 
+</blockquote>
+
+<h5 class="subsubsection">4.1.2.1 Value options</h5>
+
+<p>To specify a value option simply include the option followed by the
+corresponding value.  For example to set the default language to
+German use <samp><span class="option">lang german</span></samp>.
+
+<h5 class="subsubsection">4.1.2.2 Boolean options</h5>
+
+<p>To specify a boolean option simply include the option followed by a
+`<samp><span class="samp">true</span></samp>' to enable it or a `<samp><span class="samp">false</span></samp>' to disable it.  For example
+to allow run-together words use `<samp><span class="samp">run-together true</span></samp>'.
+
+<h5 class="subsubsection">4.1.2.3 List options</h5>
+
+<p>To add a value to the list, prefix the option name with an
+`<samp><span class="samp">add-</span></samp>' and then specify the value to add.  For example to add
+the URL filter use `<samp><span class="samp">add-filter url</span></samp>'.  To remove a value from
+a list option prefix the option name with a `<samp><span class="samp">rem-</span></samp>' and then
+specify the value to remove.  For example, to remove the URL filter use
+`<samp><span class="samp">rem-filter url</span></samp>'.  To remove all items from a list prefix the
+option name with a `<samp><span class="samp">clear-</span></samp>' without specifying any value.  For
+example, to remove all filters use `<samp><span class="samp">clear-filter</span></samp>'.
+
+   <p>A list option can also be set directly, in which case it will be set to
+a single value.  To directly set a list option to multiple values prefix
+the option name with a `<samp><span class="samp">lset-</span></samp>' and separate each value with a
+`<samp><span class="samp">:</span></samp>'.  For example, to use the URL and TeX filter use
+`<samp><span class="samp">lset-filter url:tex</span></samp>'.  To include a literal `<samp><span class="samp">:</span></samp>' use
+`<samp><span class="samp">\:</span></samp>'.
+
+<h4 class="subsection">4.1.3 Setting Options via an Environment Variable</h4>
+
+<p>The environment variable <samp><span class="env">ASPELL_CONF</span></samp> may also be used and it
+overrides any options set in the configuration file.  The format of
+the string is exactly the same as the configuration file except that
+semicolons (`<samp><span class="samp">;</span></samp>') are used instead of newlines.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Spellchecking-Individual-Files.html b/manual/aspell.html/Spellchecking-Individual-Files.html
new file mode 100644 (file)
index 0000000..3f35d9d
--- /dev/null
@@ -0,0 +1,126 @@
+<html lang="en">
+<head>
+<title>Spellchecking Individual Files - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Basic-Usage.html#Basic-Usage" title="Basic Usage">
+<link rel="next" href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell" title="Using Aspell as a Replacement for Ispell">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Spellchecking-Individual-Files"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">Using Aspell as a Replacement for Ispell</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>
+<hr>
+</div>
+
+<h3 class="section">3.1 Spellchecking Individual Files</h3>
+
+<p>To use Aspell to spellcheck a file use:
+
+<pre class="example">     aspell check [<var>options</var>] <var>filename</var>
+</pre>
+   <p class="noindent">at the command line where <var>filename</var> is the file you want to
+check and <var>options</var> is any number of optional options.  Some of
+the more useful ones include:
+
+     <dl>
+<dt><b>&ndash;mode=</b><var>mode</var><dd>the mode to use when checking files.  The available modes are
+<code>none</code>, <code>url</code>, <code>email</code>, <code>sgml</code>, <code>tex</code>,
+<code>texinfo</code>, <code>nroff</code>, among others.  For more information on the
+various modes see <a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>.
+
+     <br><dt><b>&ndash;dont-backup</b><dd>don't create a backup file.  Normally, if there are any corrections
+the Aspell utility will append <samp><span class="file">.bak</span></samp> to the existing file name
+and then create a new file with corrections made during spell checking.
+
+     <br><dt><b>&ndash;sug-mode=</b><var>mode</var><dd>the suggestion mode to use where mode is one of <code>ultra</code>,
+<code>fast</code>, <code>normal</code>, or <code>bad-spellers</code>.  For more
+information on these modes see <a href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>.
+
+     <br><dt><b>&ndash;lang=</b><var>name</var><b>/-l </b><var>name</var><dd>the language the document is written in.  The default depends on the
+current locale.
+
+     <br><dt><b>&ndash;encoding=</b><var>name</var><dd>encoding the document is expected to be in.  The default depends on the
+current locale.
+
+     <br><dt><b>&ndash;master=</b><var>name</var><b>/-d </b><var>name</var><dd>the main dictionary to use.
+
+     <br><dt><b>&ndash;keymapping=</b><var>name</var><dd>the keymapping to use.  Either <samp><span class="option">aspell</span></samp> for the default mapping
+or <samp><span class="option">ispell</span></samp> to use the same mapping that the Ispell utility
+uses. 
+</dl>
+
+   <p>For more information on the available options, please see
+<a href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>.
+
+   <p>For example to check the file <samp><span class="file">foo.txt</span></samp>:
+
+<pre class="example">     aspell check foo.txt
+</pre>
+   <p class="noindent">and to check the file <samp><span class="file">foo.txt</span></samp> using the <samp><span class="option">bad-spellers</span></samp>
+suggestion mode and the American English dictionary:
+
+<pre class="example">     aspell check --sug-mode=bad-spellers -d en_US foo.txt
+</pre>
+   <p>If the <samp><span class="option">mode</span></samp> option is not given, then Aspell will use the
+extension of the file to determine the current mode.  If the extension
+is <samp><span class="file">.tex</span></samp>, then <samp><span class="option">tex</span></samp> mode will be used, if the extension
+is <samp><span class="file">.html</span></samp>, <samp><span class="file">.htm</span></samp>, <samp><span class="file">.php</span></samp>, or <samp><span class="file">.sgml</span></samp> it will
+check the file in <samp><span class="option">sgml</span></samp> mode, otherwise it will use
+<samp><span class="option">url</span></samp> mode.
+
+   <p>For more information on the various modes that can be used, see
+<a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>.
+
+   <p>If Aspell was compiled with curses support and the <samp><span class="env">TERM</span></samp>
+environment variable is set to a capable terminal type then Aspell
+will use a nice full screen interface, otherwise it will use a
+simpler &ldquo;dumb&rdquo; terminal interface where the misspelled word is
+surrounded by two '*'.  In either case the interface should be self
+explanatory.
+
+   <p>If Aspell is compiled with a version of the curses library that support
+wide characters then Aspell can also check UTF-8 text.  Furthermore, the
+document will be displayed in the encoding defined by the current
+locale.  This encoding does not necessarily have to be the same encoding
+that the document is in.  This means that is is possible to check an
+8-bit encoding such as ISO-8859-1 on an UTF-8 terminal.  To do so
+simply set the <samp><span class="option">encoding</span></samp> option to `<samp><span class="samp">iso-8859-1</span></samp>'. 
+Furthermore it is also possible to check an UTF-8 document on an 8-bit
+terminal provided that the document can be successfully converted into
+that encoding.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Support.html b/manual/aspell.html/Support.html
new file mode 100644 (file)
index 0000000..53c5324
--- /dev/null
@@ -0,0 +1,61 @@
+<html lang="en">
+<head>
+<title>Support - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Introduction.html#Introduction" title="Introduction">
+<link rel="next" href="Basic-Usage.html#Basic-Usage" title="Basic Usage">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Support"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Introduction.html#Introduction">Introduction</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">2 Support</h2>
+
+<p>Support for Aspell can be found on the Aspell mailing lists. 
+Instructions for joining the various mailing lists (and an archive of
+them) can be found off the Aspell home page at
+<a href="http://aspell.net">http://aspell.net</a>.
+
+   <p>Bug reports should be submitted via the Sourceforge Tracker at
+<a href="http://sourceforge.net/tracker/?group_id=245">http://sourceforge.net/tracker/?group_id=245</a> rather than
+being posted to the mailing lists.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Supported.html b/manual/aspell.html/Supported.html
new file mode 100644 (file)
index 0000000..afc0a28
--- /dev/null
@@ -0,0 +1,337 @@
+<html lang="en">
+<head>
+<title>Supported - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="next" href="Unsupported.html#Unsupported" title="Unsupported">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Supported"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Unsupported.html#Unsupported">Unsupported</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">B.1 Supported</h3>
+
+<p>Aspell 0.60 should be able to support the following languages:
+
+   <p><table summary=""><tr align="left"><td valign="top" width="5%"><b>Code</b> </td><td valign="top" width="31%"><b>Language Name</b> </td><td valign="top" width="29%"><b>Script</b> </td><td valign="top" width="20%"><b>Dictionary Available</b> </td><td valign="top" width="15%"><b>Gettext Translation</b>
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">aa </td><td valign="top" width="31%">Afar </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">af </td><td valign="top" width="31%">Afrikaans </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ak </td><td valign="top" width="31%">Akan </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">am </td><td valign="top" width="31%">Amharic </td><td valign="top" width="29%">Ethiopic </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ar </td><td valign="top" width="31%">Arabic </td><td valign="top" width="29%">Arabic </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">as </td><td valign="top" width="31%">Assamese </td><td valign="top" width="29%">Bengali </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">av </td><td valign="top" width="31%">Avar </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ay </td><td valign="top" width="31%">Aymara </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">az </td><td valign="top" width="31%">Azerbaijani </td><td valign="top" width="29%">Cyrillic, Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ba </td><td valign="top" width="31%">Bashkir </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">be </td><td valign="top" width="31%">Belarusian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">bg </td><td valign="top" width="31%">Bulgarian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">bh </td><td valign="top" width="31%">Bihari </td><td valign="top" width="29%">Devanagari </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">bm </td><td valign="top" width="31%">Bambara </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">bn </td><td valign="top" width="31%">Bengali </td><td valign="top" width="29%">Bengali </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">bo </td><td valign="top" width="31%">Tibetan </td><td valign="top" width="29%">Tibetan </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">br </td><td valign="top" width="31%">Breton </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">bs </td><td valign="top" width="31%">Bosnian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ca </td><td valign="top" width="31%">Catalan / Valencian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">ce </td><td valign="top" width="31%">Chechen </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">co </td><td valign="top" width="31%">Corsican </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">cop </td><td valign="top" width="31%">Coptic </td><td valign="top" width="29%">Greek </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">cs </td><td valign="top" width="31%">Czech </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">csb </td><td valign="top" width="31%">Kashubian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">cv </td><td valign="top" width="31%">Chuvash </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">cy </td><td valign="top" width="31%">Welsh </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">da </td><td valign="top" width="31%">Danish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">de </td><td valign="top" width="31%">German </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">dyu </td><td valign="top" width="31%">Dyula </td><td valign="top" width="29%">- </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ee </td><td valign="top" width="31%">Ewe </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">el </td><td valign="top" width="31%">Greek </td><td valign="top" width="29%">Greek </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">en </td><td valign="top" width="31%">English </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">eo </td><td valign="top" width="31%">Esperanto </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">es </td><td valign="top" width="31%">Spanish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">et </td><td valign="top" width="31%">Estonian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">eu </td><td valign="top" width="31%">Basque </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">fa </td><td valign="top" width="31%">Persian </td><td valign="top" width="29%">Arabic </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ff </td><td valign="top" width="31%">Fulah </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">fi </td><td valign="top" width="31%">Finnish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">fj </td><td valign="top" width="31%">Fijian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">fo </td><td valign="top" width="31%">Faroese </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">fr </td><td valign="top" width="31%">French </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">fur </td><td valign="top" width="31%">Friulian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">fy </td><td valign="top" width="31%">Frisian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ga </td><td valign="top" width="31%">Irish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">gd </td><td valign="top" width="31%">Scottish Gaelic </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">gl </td><td valign="top" width="31%">Gallegan </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">gn </td><td valign="top" width="31%">Guarani </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">gu </td><td valign="top" width="31%">Gujarati </td><td valign="top" width="29%">Gujarati </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">gv </td><td valign="top" width="31%">Manx Gaelic </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ha </td><td valign="top" width="31%">Hausa </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">he </td><td valign="top" width="31%">Hebrew </td><td valign="top" width="29%">Hebrew </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hi </td><td valign="top" width="31%">Hindi </td><td valign="top" width="29%">Devanagari </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hil </td><td valign="top" width="31%">Hiligaynon </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ho </td><td valign="top" width="31%">Hiri Motu </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hr </td><td valign="top" width="31%">Croatian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hsb </td><td valign="top" width="31%">Upper Sorbian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ht </td><td valign="top" width="31%">Haitian Creole </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hu </td><td valign="top" width="31%">Hungarian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hy </td><td valign="top" width="31%">Armenian </td><td valign="top" width="29%">Armenian </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">hz </td><td valign="top" width="31%">Herero </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ia </td><td valign="top" width="31%">Interlingua (IALA) </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">id </td><td valign="top" width="31%">Indonesian </td><td valign="top" width="29%">Arabic, Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ig </td><td valign="top" width="31%">Igbo </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ii </td><td valign="top" width="31%">Sichuan Yi </td><td valign="top" width="29%">Yi </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">io </td><td valign="top" width="31%">Ido </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">is </td><td valign="top" width="31%">Icelandic </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">it </td><td valign="top" width="31%">Italian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">jv </td><td valign="top" width="31%">Javanese </td><td valign="top" width="29%">Javanese, Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ka </td><td valign="top" width="31%">Georgian </td><td valign="top" width="29%">Georgian </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kg </td><td valign="top" width="31%">Kongo </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ki </td><td valign="top" width="31%">Kikuyu / Gikuyu </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kj </td><td valign="top" width="31%">Kwanyama </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kk </td><td valign="top" width="31%">Kazakh </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">km </td><td valign="top" width="31%">Khmer </td><td valign="top" width="29%">Khmer </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kn </td><td valign="top" width="31%">Kannada </td><td valign="top" width="29%">Kannada </td><td valign="top" width="20%">Planned </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kr </td><td valign="top" width="31%">Kanuri </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ks </td><td valign="top" width="31%">Kashmiri </td><td valign="top" width="29%">Arabic, Devanagari </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ku </td><td valign="top" width="31%">Kurdish </td><td valign="top" width="29%">Arabic, Cyrillic, Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">kv </td><td valign="top" width="31%">Komi </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ky </td><td valign="top" width="31%">Kirghiz </td><td valign="top" width="29%">Arabic, Cyrillic, Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">la </td><td valign="top" width="31%">Latin </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">lb </td><td valign="top" width="31%">Luxembourgish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">lg </td><td valign="top" width="31%">Ganda </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">li </td><td valign="top" width="31%">Limburgian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ln </td><td valign="top" width="31%">Lingala </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">lt </td><td valign="top" width="31%">Lithuanian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">lu </td><td valign="top" width="31%">Luba-Katanga </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">lv </td><td valign="top" width="31%">Latvian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">mg </td><td valign="top" width="31%">Malagasy </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mi </td><td valign="top" width="31%">Maori </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mk </td><td valign="top" width="31%">Macedonian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ml </td><td valign="top" width="31%">Malayalam </td><td valign="top" width="29%">Latin, Malayalam </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mn </td><td valign="top" width="31%">Mongolian </td><td valign="top" width="29%">Cyrillic, Mongolian </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">mo </td><td valign="top" width="31%">Moldavian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mos </td><td valign="top" width="31%">Mossi </td><td valign="top" width="29%">- </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mr </td><td valign="top" width="31%">Marathi </td><td valign="top" width="29%">Devanagari </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ms </td><td valign="top" width="31%">Malay </td><td valign="top" width="29%">Arabic, Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">mt </td><td valign="top" width="31%">Maltese </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">my </td><td valign="top" width="31%">Burmese </td><td valign="top" width="29%">Myanmar </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">nb </td><td valign="top" width="31%">Norwegian Bokmal </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nd </td><td valign="top" width="31%">North Ndebele </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nds </td><td valign="top" width="31%">Low Saxon </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ne </td><td valign="top" width="31%">Nepali </td><td valign="top" width="29%">Devanagari </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ng </td><td valign="top" width="31%">Ndonga </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nl </td><td valign="top" width="31%">Dutch </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">nn </td><td valign="top" width="31%">Norwegian Nynorsk </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nr </td><td valign="top" width="31%">South Ndebele </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nso </td><td valign="top" width="31%">Northern Sotho </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">nv </td><td valign="top" width="31%">Navajo </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ny </td><td valign="top" width="31%">Nyanja </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">oc </td><td valign="top" width="31%">Occitan / Provencal </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">om </td><td valign="top" width="31%">Oromo </td><td valign="top" width="29%">Ethiopic, Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">or </td><td valign="top" width="31%">Oriya </td><td valign="top" width="29%">Oriya </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">os </td><td valign="top" width="31%">Ossetic </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">pa </td><td valign="top" width="31%">Punjabi </td><td valign="top" width="29%">Gurmukhi </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">pl </td><td valign="top" width="31%">Polish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ps </td><td valign="top" width="31%">Pushto </td><td valign="top" width="29%">Arabic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">pt </td><td valign="top" width="31%">Portuguese </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">qu </td><td valign="top" width="31%">Quechua </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">rn </td><td valign="top" width="31%">Rundi </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ro </td><td valign="top" width="31%">Romanian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">ru </td><td valign="top" width="31%">Russian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">rw </td><td valign="top" width="31%">Kinyarwanda </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">sc </td><td valign="top" width="31%">Sardinian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sd </td><td valign="top" width="31%">Sindhi </td><td valign="top" width="29%">Arabic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sg </td><td valign="top" width="31%">Sango </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">si </td><td valign="top" width="31%">Sinhalese </td><td valign="top" width="29%">Sinhala </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sk </td><td valign="top" width="31%">Slovak </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">sl </td><td valign="top" width="31%">Slovenian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">sm </td><td valign="top" width="31%">Samoan </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sn </td><td valign="top" width="31%">Shona </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">so </td><td valign="top" width="31%">Somali </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sq </td><td valign="top" width="31%">Albanian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sr </td><td valign="top" width="31%">Serbian </td><td valign="top" width="29%">Cyrillic, Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">ss </td><td valign="top" width="31%">Swati </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">st </td><td valign="top" width="31%">Southern Sotho </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">su </td><td valign="top" width="31%">Sundanese </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">sv </td><td valign="top" width="31%">Swedish </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">sw </td><td valign="top" width="31%">Swahili </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ta </td><td valign="top" width="31%">Tamil </td><td valign="top" width="29%">Tamil </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">te </td><td valign="top" width="31%">Telugu </td><td valign="top" width="29%">Telugu </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tet </td><td valign="top" width="31%">Tetum </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tg </td><td valign="top" width="31%">Tajik </td><td valign="top" width="29%">Arabic, Cyrillic, Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">ti </td><td valign="top" width="31%">Tigrinya </td><td valign="top" width="29%">Ethiopic </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tk </td><td valign="top" width="31%">Turkmen </td><td valign="top" width="29%">Arabic, Cyrillic, Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tl </td><td valign="top" width="31%">Tagalog </td><td valign="top" width="29%">Latin, Tagalog </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tn </td><td valign="top" width="31%">Tswana </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">to </td><td valign="top" width="31%">Tonga </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tr </td><td valign="top" width="31%">Turkish </td><td valign="top" width="29%">Arabic, Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ts </td><td valign="top" width="31%">Tsonga </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tt </td><td valign="top" width="31%">Tatar </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">tw </td><td valign="top" width="31%">Twi </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">ty </td><td valign="top" width="31%">Tahitian </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ug </td><td valign="top" width="31%">Uighur </td><td valign="top" width="29%">Arabic, Cyrillic, Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">uk </td><td valign="top" width="31%">Ukrainian </td><td valign="top" width="29%">Cyrillic </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%">ur </td><td valign="top" width="31%">Urdu </td><td valign="top" width="29%">Arabic </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">uz </td><td valign="top" width="31%">Uzbek </td><td valign="top" width="29%">Cyrillic, Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">ve </td><td valign="top" width="31%">Venda </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">vi </td><td valign="top" width="31%">Vietnamese </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">Yes
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">wa </td><td valign="top" width="31%">Walloon </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">Incomplete
+<br></td></tr><tr align="left"><td valign="top" width="5%">wo </td><td valign="top" width="31%">Wolof </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">xh </td><td valign="top" width="31%">Xhosa </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">yi </td><td valign="top" width="31%">Yiddish </td><td valign="top" width="29%">Hebrew </td><td valign="top" width="20%">0.60 </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">yo </td><td valign="top" width="31%">Yoruba </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">Maybe </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%"><br></td></tr><tr align="left"><td valign="top" width="5%">za </td><td valign="top" width="31%">Zhuang </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">- </td><td valign="top" width="15%">-
+<br></td></tr><tr align="left"><td valign="top" width="5%">zu </td><td valign="top" width="31%">Zulu </td><td valign="top" width="29%">Latin </td><td valign="top" width="20%">0.50 </td><td valign="top" width="15%">-
+
+   <br></td></tr></table>
+
+   <p>Dictionaries marked as <dfn>0.50</dfn> are available for Aspell 0.50.  Ones
+marked as <dfn>0.60</dfn> are available for Aspell 0.60 only.  Ones marked as
+<dfn>Planned</dfn> should eventually be available.  Ones marked as
+<dfn>Maybe</dfn> might be available in the future. 
+See <a href="Planned-Dictionaries.html#Planned-Dictionaries">Planned Dictionaries</a>, for more info.
+
+<h4 class="appendixsubsec">B.1.1 Notes on Latin Languages</h4>
+
+<p>Any word that can be written using one of the Latin ISO-8859 character
+sets (ISO-8859-1,2,3,4,9,10,13,14,15,16) can be written, in decomposed
+form, using the ASCII characters, the 23 additional letters:
+
+<pre class="example">     U+00C6 LATIN CAPITAL LETTER AE
+     U+00D0 LATIN CAPITAL LETTER ETH
+     U+00D8 LATIN CAPITAL LETTER O WITH STROKE
+     U+00DE LATIN CAPITAL LETTER THORN
+     U+00DE LATIN SMALL LETTER THORN
+     U+00DF LATIN SMALL LETTER SHARP S
+     U+00E6 LATIN SMALL LETTER AE
+     U+00F0 LATIN SMALL LETTER ETH
+     U+00F8 LATIN SMALL LETTER O WITH STROKE
+     U+0110 LATIN CAPITAL LETTER D WITH STROKE
+     U+0111 LATIN SMALL LETTER D WITH STROKE
+     U+0126 LATIN CAPITAL LETTER H WITH STROKE
+     U+0127 LATIN SMALL LETTER H WITH STROKE
+     U+0131 LATIN SMALL LETTER DOTLESS I
+     U+0138 LATIN SMALL LETTER KRA
+     U+0141 LATIN CAPITAL LETTER L WITH STROKE
+     U+0142 LATIN SMALL LETTER L WITH STROKE
+     U+014A LATIN CAPITAL LETTER ENG
+     U+014B LATIN SMALL LETTER ENG
+     U+0152 LATIN CAPITAL LIGATURE OE
+     U+0153 LATIN SMALL LIGATURE OE
+     U+0166 LATIN CAPITAL LETTER T WITH STROKE
+     U+0167 LATIN SMALL LETTER T WITH STROKE
+</pre>
+   <p>and the 14 modifiers:
+
+<pre class="example">     U+0300 COMBINING GRAVE ACCENT
+     U+0301 COMBINING ACUTE ACCENT
+     U+0302 COMBINING CIRCUMFLEX ACCENT
+     U+0303 COMBINING TILDE
+     U+0304 COMBINING MACRON
+     U+0306 COMBINING BREVE
+     U+0307 COMBINING DOT ABOVE
+     U+0308 COMBINING DIAERESIS
+     U+030A COMBINING RING ABOVE
+     U+030B COMBINING DOUBLE ACUTE ACCENT
+     U+030C COMBINING CARON
+     U+0326 COMBINING COMMA BELOW
+     U+0327 COMBINING CEDILLA
+     U+0328 COMBINING OGONEK
+</pre>
+   <p>Which is a total of 37 additional Unicode code points.
+
+   <p>All ISO-8859 character leaves the characters 0x00 - 0x1F, and 0x80 -
+0x9F unmapped as they are generally used as control characters.  Of
+those, 0x01 - 0x0F, 0x11 - 0x1F and 0x80 - 0x9F may be mapped to
+anything in Aspell.  This is a total of 62 characters which can be
+remapped in any ISO-8859 character set.  Thus, by remapping 37 of the 62
+characters to the previously specified Unicode code-points, any modified
+ISO-8859 character set can be used for any Latin languages covered by
+ISO-8859.  Of course decomposing every single accented character wastes
+a lot of space, so only characters that cannot be represented in the
+precomposed form should be broken up.  By using this trick it is
+possible to store foreign words in the correctly accented form in the
+dictionary even if the precomposed character is not in the current
+character set.
+
+   <p>Any letter in the Unicode range U+0000 - U+0249, U+1E00 - U+1EFF (Basic
+Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B, and Latin
+Extended Additional) can be represented using around 175 basic letters,
+and 25 modifiers which is less than 210 and can thus fit in an Aspell
+8-bit character set.  Since this Unicode range covers any possible Latin
+language this special character set can be used to represent any word
+written using the Latin script if so desired.
+
+<h4 class="appendixsubsec">B.1.2 Syllabic</h4>
+
+<p>Syllabic languages use a separate symbol for each syllable of the
+language.  Even thought most of them have more than 210 distinct
+symbols Aspell can still support them by breaking them up.
+
+<h5 class="appendixsubsubsec">B.1.2.1 The Ethiopic Syllabary</h5>
+
+<p>Even though the Ethiopic script has more than 210 distinct characters
+Aspell can still handle it.  The idea is to split each character into
+two parts based on the Consonant and Vowel parts.  This encoding of the
+syllabary is far more useful to Aspell than if they were stored in UTF-8
+or UTF-16.  In fact, the exiting suggestion strategy of Aspell will work
+well with this encoding without any additional modifications.  However,
+additional improvements may be possible by taking advantage of the
+consonant-vowel structure of this encoding.
+
+   <p>In fact, the split consonant-vowel representation may prove to be so
+useful that it may be beneficial to encode other syllabary in this
+fashion, even if they are less than 210 of them.
+
+   <p>The code to break up a syllabary into the consonant-vowel part is part
+of the Unicode normalization process.
+
+<h5 class="appendixsubsubsec">B.1.2.2 The Yi Syllabary</h5>
+
+<p>A very large syllabary with 819 distinct symbols.  However, like
+Ethiopic, it should be possible to support this script by breaking it
+up.
+
+<h5 class="appendixsubsubsec">B.1.2.3 The Ojibwe Syllabary</h5>
+
+<p>With only 120 distinct symbols, Aspell can actually support this one as
+is.  However, as previously mentioned, it may be beneficial to break it
+up into the consonant-vowel representation anyway.
+
+   </body></html>
+
diff --git a/manual/aspell.html/The-Language-Data-File.html b/manual/aspell.html/The-Language-Data-File.html
new file mode 100644 (file)
index 0000000..ea64393
--- /dev/null
@@ -0,0 +1,183 @@
+<html lang="en">
+<head>
+<title>The Language Data File - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="next" href="Compiling-the-Word-List.html#Compiling-the-Word-List" title="Compiling the Word List">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="The-Language-Data-File"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Compiling-the-Word-List.html#Compiling-the-Word-List">Compiling the Word List</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.1 The Language Data File</h3>
+
+<p>The basic format of the language data file is the same as it is for the
+Aspell configuration file.  It is named <samp><var>lang</var><span class="file">.dat</span></samp> and is
+located in the architecture independent data dir for Aspell (option
+<samp><span class="option">data-dir</span></samp>) which is usually <samp><var>prefix</var><span class="file">/share/aspell</span></samp>. 
+Use <samp><span class="command">aspell config</span></samp> to find out where it is in your
+installation.  By convention the language name should be the two letter
+ISO 639 language code if it exists, if not use the three letter code.
+
+   <p>The language data file has several mandatory fields, and several
+optional ones.  All fields are case sensitive and should be in all
+lower case.
+
+   <p>The two mandatory fields are <samp><span class="option">name</span></samp> and <samp><span class="option">charset</span></samp>.
+
+   <p><samp><span class="option">name</span></samp> is the name of the language and should be the same as the
+file name (without the <samp><span class="file">.dat</span></samp>).
+
+   <p><samp><span class="option">charset</span></samp> is the 8-bit character set Aspell will expect the
+word lists to be formatted in.  If possible choose from one of the
+standard ones provided with Aspell.  These are `<samp><span class="samp">iso-8859-*</span></samp>',
+`<samp><span class="samp">koi8-*</span></samp>', or `<samp><span class="samp">viscii</span></samp>'.  If your language does not require
+any non-ascii characters choose `<samp><span class="samp">iso-8859-1</span></samp>'.  If one of these
+standard character sets is not suitable for your language then you can
+create a new one.  See <a href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">Creating A New Character Set</a>.
+
+   <p>The optional fields are as follows:
+
+     <dl>
+<a name="data_002dencoding"></a>
+<dt><samp><span class="option">data-encoding</span></samp><dd>
+The encoding the language data files are expected to be in as well as
+the default encoding to use when saving the personal dictionaries.  It
+can be either `<samp><span class="samp">utf-8</span></samp>' or any of the 8-bit encoding that Aspell
+supports.  If not set, then it defaults to <samp><span class="option">charset</span></samp>.
+
+     <br><dt><samp><span class="option">special</span></samp><dd>
+Non-letter characters that can appear in your language such as the
+`<samp><span class="samp">'</span></samp>' and `<samp><span class="samp">-</span></samp>'. The format for the value is a list separated by
+spaces.  Each item of the list has the following format.
+
+     <pre class="example">          &lt;char&gt; &lt;begin&gt;&lt;middle&gt;&lt;end&gt;
+     </pre>
+     <p><var>char</var> is the non-letter character in question. 
+<var>begin</var>, <var>middle</var>, <var>end</var> are either a
+`<samp><span class="samp">-</span></samp>' or a `<samp><span class="samp">*</span></samp>'.  A star for <var>begin</var> means that the
+character can begin a word, a `<samp><span class="samp">-</span></samp>' means it can't.  The same is
+true for <var>middle</var> and <var>end</var>. For example, the entry
+for the `<samp><span class="samp">'</span></samp>' in English is:
+
+     <pre class="example">          ' -*-
+     </pre>
+     <p>To include more than one middle character just list them one after
+another on the same line.  For example, to make both the `<samp><span class="samp">'</span></samp>'
+and the `<samp><span class="samp">-</span></samp>' a middle character, use the following line in the
+language data file:
+
+     <pre class="example">          special ' -*- - -*-
+     </pre>
+     <p>However, please be aware that adding special characters can have
+unintended consequences due to limitations of Aspell.  For example if
+the `<samp><span class="samp">-</span></samp>' was accepted as a middle character, then <em>every</em>
+word with a `<samp><span class="samp">-</span></samp>' in it would be flagged as a spelling error unless
+that exact word is in the dictionary, even if both parts are in the
+dictionary.  Also, having a `<samp><span class="samp">.</span></samp>' as an end character will cause
+the `<samp><span class="samp">.</span></samp>' to be part of any misspelled words.  Which can get very
+annoying if you misspell a word at the end of a sentence.
+
+     <br><dt><samp><span class="option">soundslike</span></samp><dd>
+The name of the soundslike data for the language.  The data is
+expected to be in the file <samp><var>name</var><span class="file">_phonet.dat</span></samp>.
+
+     <p>If <var>name</var> is `<samp><span class="samp">simpile</span></samp>' then a very simple soundslike is
+used.  This is not as powerful as full phonetic soundslike but it
+can be computed a lot faster.  (see <a href="The-Simple-Soundslike.html#The-Simple-Soundslike">The Simple Soundslike</a>)
+
+     <p>If the soundslike name is `<samp><span class="samp">none</span></samp>', or this option is not specified,
+then no soundslike will be used.  The effective soundslike is the word
+converted to all lowercase and possibly with accents stripped
+depending on the <samp><span class="option">store-as</span></samp> option.  For languages with
+phonetic spelling the difference will not be very noticeable. 
+However, for languages with non-phonetic spelling there will be a
+noticeable difference.  The difference you notice will depend on the
+quality of the soundslike data file.  If you do not notice much of a
+difference for a language with non-phonetic spelling that is a good
+indication that the soundslike data is not rough enough&mdash;or the words
+you are trying are not that badly misspelled.
+
+     <br><dt><samp><span class="option">invisible-soundslike</span></samp><dd>
+Avoid storing the soundslike information with the word.  Instead it is
+computed as needed.  This option defaults to true if the soundslike is
+`<samp><span class="samp">none</span></samp>' or `<samp><span class="samp">simpile</span></samp>', and false when a phonetic soundslike is
+used.
+
+     <br><dt><samp><span class="option">repl-table</span></samp><dd>
+See <a href="Replacement-Tables.html#Replacement-Tables">Replacement Tables</a>.
+
+     <br><dt><samp><span class="option">keyboard</span></samp><dd>
+The base name of the keyboard definition file to use.  For more
+information see <a href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>.
+
+     <br><dt><samp><span class="option">sug-split-char</span></samp><dd>
+A list of characters which specifies which characters to insert between
+two words when a word is split.  This is a list option.
+
+     <br><dt><samp><span class="option">affix</span></samp><dt><samp><span class="option">affix-compress</span></samp><dt><samp><span class="option">partially-expand</span></samp><dd>
+See <a href="Affix-Compression.html#Affix-Compression">Affix Compression</a>.
+
+     <br><dt><samp><span class="option">store-as</span></samp><dd>
+How the words are indexed in the dictionary.  If "stripped" then the
+word is indexed in a lower case and de-accented form.  If "lower", then
+the word is indexed in a lower case form but with accent info still
+intact.  This just controls how the word is indexed, not how it is
+stored.  The default is "stripped" unless affix compression is used.
+
+     <!-- @item ignore-accents -->
+<!-- @item affix-char -->
+<!-- Unimplemented -->
+<!-- @item flag-char -->
+<!-- Unimplemented -->
+<br><dt><samp><span class="option">norm-required</span></samp><dd>
+Should be set to true if your language makes use of private use
+characters or when Normalization Form C is not the same as
+full composition.
+
+     <br><dt><samp><span class="option">normalize</span></samp>
+<br><dt><samp><span class="option">norm-form</span></samp><dd>
+</dl>
+
+   <p>Additional options includes options to control how run-together words
+are handled the same way as they are in the normal configuration
+files.  for more information, please <a href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/The-Options.html b/manual/aspell.html/The-Options.html
new file mode 100644 (file)
index 0000000..cded162
--- /dev/null
@@ -0,0 +1,405 @@
+<html lang="en">
+<head>
+<title>The Options - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link rel="prev" href="Specifying-Options.html#Specifying-Options" title="Specifying Options">
+<link rel="next" href="Dumping-Configuration-Values.html#Dumping-Configuration-Values" title="Dumping Configuration Values">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="The-Options"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Dumping-Configuration-Values.html#Dumping-Configuration-Values">Dumping Configuration Values</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Specifying-Options.html#Specifying-Options">Specifying Options</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">4.2 The Options</h3>
+
+<p>The following is a list of available options broken down by category. 
+Each entry has the following format:
+
+   <blockquote>
+          <dl>
+<dt><var>option</var><b>[,</b><var>single-letter-abbreviation</var><b>]</b><dd><i>(</i><var>type</var><i>)</i> <var>description</var>
+</dl>
+   </blockquote>
+
+   <p>Where single letter options are specified as they would appear at the
+command line, ie with the preceding dash.  Boolean single letter
+options are specified in the following format:
+
+   <blockquote>
+-&lt;abbreviation to enable&gt;|-&lt;abbreviation to disable&gt;
+</blockquote>
+
+   <p><var>option</var> is one of the following: <em>boolean</em>, <em>string</em>,
+<em>file</em>, <em>dir</em>, <em>integer</em>, or <em>list</em>.
+
+   <p><em>String</em>, <em>file</em>, <em>dir</em>, and <em>integer</em> types are all
+value options which can only take a specific type of value.
+
+<h4 class="subsection">4.2.1 Dictionary Options</h4>
+
+<p>The following options may be used to control which dictionaries to use
+and how they behave (for more information see <a href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>):
+
+     <dl>
+<dt><b>master,-d</b><dd><i>(string)</i>
+Base name of the dictionary to use.  If this option is specified then
+Aspell will either use this dictionary or die.
+
+     <br><dt><b>dict-dir</b><dd><i>(dir)</i>
+Location of the main word list.
+
+     <br><dt><b>lang</b><dd><i>(string)</i>
+Language to use.  It follows the same format of the <samp><span class="env">LANG</span></samp>
+environment variable on most systems.  It consists of the two letter
+<acronym>ISO 639</acronym> language code and an optional two letter
+<acronym>ISO 3166</acronym> country code after a dash or underscore.  The
+default value is based on the value of the <samp><span class="env">LC_MESSAGES</span></samp> locale.
+
+     <br><dt><b>size</b><dd><i>(string)</i>
+The preferred size of the word list.  This consists of a
+two char digit code describing the size of the list, with typical
+values of: 10=tiny, 20=really small, 30=small, 40=med-small, 50=med,
+60=med-large, 70=large, 80=huge, 90=insane.
+
+     <br><dt><b>variety</b><dd><i>(list)</i>
+Any extra information to distinguish two different words lists that
+have the same lang and size.
+
+     <br><dt><b>word-list-path</b><dd><i>(list)</i>
+Search path for word list information files.
+
+     <!-- @item module-search-order (@i{list}) -->
+<!-- list of available modules, modules that come first on this list have a -->
+<!-- higher priority. Currently there is only one speller module. -->
+<br><dt><b>personal,-p</b><dd><i>(file)</i>
+Personal word list file name.
+
+     <br><dt><b>repl</b><dd><i>(file)</i>
+Replacements list file name.
+
+     <br><dt><b>extra-dicts</b><dd><i>(list)</i>
+Extra dictionaries to use.
+
+     <br><dt><b>dict-alias</b><dd><i>(list)</i>
+create dictionary aliases.  Each entry has the form `<samp><var>from</var>
+<var>to</var></samp>'.  Will override any system dictionaries that are present.
+
+   </dl>
+
+<h4 class="subsection">4.2.2 Encoding Options</h4>
+
+<p>These options control the encoding the document is expected to be in and
+how it is displayed.
+
+     <dl>
+<dt><b>encoding</b><dd><i>(string)</i>
+The encoding the input text is in.  Valid values include, but not
+limited to, `<samp><span class="samp">iso-8859-*</span></samp>', `<samp><span class="samp">utf-8</span></samp>', `<samp><span class="samp">ucs-2</span></samp>',
+`<samp><span class="samp">ucs-4</span></samp>'.  When using the Aspell utility the default encoding is
+based on the current locale.  Thus if your locale currently uses the
+`<samp><span class="samp">utf-8</span></samp>' encoding than everything will be in <acronym>UTF-8</acronym>.  The
+`<samp><span class="samp">ucs-2</span></samp>' and `<samp><span class="samp">ucs-4</span></samp>' encodings are intended to be used by other
+programs using the Aspell library and is not supported by the Aspell
+utility.
+
+     <br><dt><b>normalize</b><dd><i>(boolean)</i>
+Perform Unicode normalization.  Enabled by default.
+
+     <br><dt><b>norm-strict</b><dd><i>(boolean)</i>
+Avoid lossy conversions when normalizing.  Lossy conversions includes
+compatibility mappings such as splitting the letter `<samp><span class="samp">OE</span></samp>' (U+152)
+into `<samp><span class="samp">O</span></samp>' and `<samp><span class="samp">E</span></samp>' (when the combined letter is not available),
+and mappings which will remove accents.  Disabled by default except when
+creating dictionaries.
+
+     <br><dt><b>norm-form</b><dd><i>(string)</i>
+The normalization form the output should be in.  This option primarily
+effects the normalization form of the suggestions as when spell
+checkering as the actual text is unchanged unless there is an error. 
+Valid values are `<samp><span class="samp">none</span></samp>', `<samp><span class="samp">nfd</span></samp>' for fully decomposition
+(Normalization Form D), `<samp><span class="samp">nfc</span></samp>' for Normalization Form C, or
+`<samp><span class="samp">comp</span></samp>' for fully composed.  `<samp><span class="samp">comp</span></samp>' is like `<samp><span class="samp">nfc</span></samp>' except
+that <em>full</em> composition is used rather than <em>canonical</em>
+composition.  The <samp><span class="option">normalize</span></samp> option must be enabled for this
+option to be used.
+
+     <br><dt><b>norm-required</b><dd><i>(boolean)</i>
+Set to true when the current language requires Unicode normalization. 
+This is generally the case when private use characters are used
+internally by Aspell or when Normalization Form C is not the same as
+full composition.
+
+   </dl>
+
+<h4 class="subsection">4.2.3 Checker Options</h4>
+
+<p>These options control the behavior of Aspell when checking
+documents.
+
+     <dl>
+<dt><b>ignore,-W</b><dd><i>(integer)</i>
+Ignore words with N characters or less
+
+     <br><dt><b>ignore-repl</b><dd><i>(boolean)</i>
+Ignore commands to store replacement pairs.
+
+     <br><dt><b>save-repl</b><dd><i>(boolean)</i>
+Save the replacement word list on save all.
+
+     <br><dt><b>keyboard</b><dd><i>(file)</i>
+The base name of the keyboard definition file to use (see <a href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>)
+
+     <br><dt><b>sug-mode</b><dd><i>(mode)</i>
+Suggestion mode = `<samp><span class="samp">ultra</span></samp>' | `<samp><span class="samp">fast</span></samp>' | `<samp><span class="samp">normal</span></samp>' | `<samp><span class="samp">slow</span></samp>' |
+`<samp><span class="samp">bad-spellers</span></samp>' (see <a href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>)
+
+     <br><dt><b>ignore-case</b><dd><i>(boolean)</i>
+Ignore case when checking words.
+
+     <br><dt><b>ignore-accents</b><dd><i>(boolean)</i>
+Ignore accents when checking words &ndash; <em>currently ignored</em>.
+
+   </dl>
+
+<h4 class="subsection">4.2.4 Filter Options</h4>
+
+<p>These options modify the behavior of the Aspell filter interface in
+general (for more information see see <a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>).
+
+     <dl>
+<dt><b>filter</b><dd><i>(list)</i>
+filters to use
+
+     <br><dt><b>filter-path</b><dd><i>(list)</i>
+Where to look when loading filter and filter modes.
+
+     <br><dt><b>mode</b><dd><i>(string)</i>
+Sets the filter mode.  Possible values include, but not limited to,
+`<samp><span class="samp">none</span></samp>', `<samp><span class="samp">url</span></samp>', `<samp><span class="samp">email</span></samp>', `<samp><span class="samp">sgml</span></samp>', or `<samp><span class="samp">tex</span></samp>'.  (The
+shortcut options <samp><span class="option">-e</span></samp> may be used for email, <samp><span class="option">-H</span></samp> for
+HTML, or <samp><span class="option">-t</span></samp> for TeX).
+
+   </dl>
+
+   <p>These options belong to filters packaged along with Aspell standard
+distribution.  These options may be prefixed by the keyword
+<code>f-</code> in order to explicitly indicate that they are options
+recognized by a filter and not by Aspell itself.
+
+<h5 class="subsubsection">4.2.4.1 email</h5>
+
+<p>This filter hides quoting characters and email preamble and other
+parts of an email which need not to be spell checked.
+
+     <dl>
+<dt><b>email-quote</b><dd><i>(list)</i>
+Email quote characters.
+
+     <br><dt><b>email-margin</b><dd><i>(integer)</i>
+The number of characters that can appear before the quote character
+</dl>
+
+<h5 class="subsubsection">4.2.4.2 html</h5>
+
+<p>This filter converts an HTML source file into a format which eases
+spell checking of HTML texts by Aspell.
+
+     <dl>
+<dt><b>html-check</b><dd><i>(list)</i>
+HTML attributes to always check, such as alt= (alternate text).
+
+     <br><dt><b>html-skip</b><dd><i>(list)</i>
+HTML tags to always skip the contents of, such as &lt;script&gt;. 
+</dl>
+
+<h5 class="subsubsection">4.2.4.3 sgml</h5>
+
+<p>This filter is identical to the HTML filter except that its options has
+different default values which are currently the empty list.
+
+<h5 class="subsubsection">4.2.4.4 tex/latex</h5>
+
+<p>This filter hides all LaTeX commands and corresponding parameters not
+being readable text in LaTeX output from Aspell.
+
+     <dl>
+<dt><b>tex-command</b><dd><i>(list)</i>
+TeX commands
+
+     <br><dt><b>tex-check-comments</b><dd><i>(boolean)</i>
+check TeX comments
+
+     <!-- @item tex-multi-byte -->
+<!-- (@i{list}) TeX multi byte letter en|decoding -->
+</dl>
+
+<h5 class="subsubsection">4.2.4.5 texinfo</h5>
+
+<p>This filter hides all Texinfo commands from Aspell.  It can also hide
+Texinfo parameters and environments not corresponding to readable text.
+
+     <dl>
+<dt><b>texinfo-ignore</b><dd><i>(list)</i> Texinfo command to ignore the parameters of.
+
+     <br><dt><b>texinfo-ignore-env</b><dd><i>(list)</i> Texinfo environments to ignore.
+
+   </dl>
+
+<h5 class="subsubsection">4.2.4.6 context</h5>
+
+<!-- FIXME: Shorten -->
+<p>This filter can be used to spell check source
+codes, HTML sources and other texts which consist of different
+contexts.  These contexts must be separated by pairs of unique
+delimiters.  The different contexts may not be dependent upon each
+other except for initial context which is assumed if not any other
+context applies.
+
+     <dl>
+<dt><b>context-visible-first</b><dd><i>(boolean)</i> Switches the context which should be visible to Aspell. 
+Per default the initial context is assumed to be invisible as one
+would expect when spell checking source files of programs where
+relevant parts are contained in string constants and comments but not
+in the remaining code.  If set to true the initial context is visible
+while the delimited ones are hidden.
+
+     <br><dt><b>add|rem-context-delimiters</b><dd><i>(list)</i> Add or remove pairs of delimiters.  This allows you to
+specify the character, or sequences of characters, which should be
+used to switch contexts and therefore have to be escaped by `<samp><span class="samp">\</span></samp>' if
+they should appear literally.  The two delimiting chars belonging to
+one pair have to be separated by a space character.  If multiple pairs
+are specified by one <samp><span class="option">add|rem-context-delimiters</span></samp> call the
+different pairs have to be separated by a literal comma.  Per default
+the delimiters are set to C/C++ comment and string constant
+delimiters.  If the end of line delimits a context than this has to be
+indicated by the literal `<samp><span class="samp">\0</span></samp>' string. 
+</dl>
+
+<h4 class="subsection">4.2.5 Run-together Word Options</h4>
+
+<p>These may be used to control the behavior of run-together words (for
+more information see <a href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>):
+     <dl>
+<dt><b>run-together,-C|-B</b><dd><i>(boolean)</i>
+consider run-together words valid
+<br><dt><b>run-together-limit</b><dd><i>(integer)</i>
+maximum number of words that can be strung together
+
+     <br><dt><b>run-together-min</b><dd><i>(integer)</i>
+minimal length of interior words
+</dl>
+
+<h4 class="subsection">4.2.6 Miscellaneous Options</h4>
+
+<p>Miscellaneous other options that don't fall under any other category
+     <dl>
+<dt><b>conf</b><dd><i>(file)</i>
+Main configuration file.  This file overrides Aspell's global defaults.
+
+     <br><dt><b>conf-dir</b><dd><i>(dir)</i>
+location of main configuration file
+
+     <br><dt><b>data-dir</b><dd><i>(dir)</i>
+location of language data files
+
+     <br><dt><b>local-data-dir</b><dd><i>(dir)</i>
+alternative location of language data files.  This directory is
+searched before <samp><span class="option">data-dir</span></samp>.  It defaults to the same directory
+the actual main word list is in (which is not necessarily
+<samp><span class="option">dict-dir</span></samp>)
+
+     <br><dt><b>home-dir</b><dd><i>(dir)</i>
+location for personal files
+
+     <br><dt><b>per-conf</b><dd><i>(file)</i>
+personal configuration file.  This file overrides options found in
+the global <samp><span class="option">conf</span></samp> file
+
+     <br><dt><b>keyboard</b><dd><i>(file)</i>
+use this keyboard layout for suggesting possible words.  These spelling
+errors happen if a user accidently presses a key next to the intended
+correct key.  The default is keyboard standard.  If you are creating
+documents, you may want to set it according to your particular type of
+keyboard.  If spellchecking documents created elsewhere, you might
+want to set this to the keyboard type for that locale.  If you are not
+sure, just leave this as standard
+
+     <br><dt><b>prefix</b><dd><i>(dir)</i>
+prefix directory
+
+     <br><dt><b>set-prefix</b><dd><i>(boolean)</i>
+set the prefix based on executable location (only works on WIN32 and
+when compiled with <samp><span class="option">--enable-win32-relocatable</span></samp>)
+</dl>
+
+<h4 class="subsection">4.2.7 Aspell Utility Options</h4>
+
+     <dl>
+<dt><b>backup,-b|-x</b><dd><i>(boolean)</i>
+Create a backup file by appending <samp><span class="file">.bak</span></samp> to the file name.  This
+applies when the command is <samp><span class="command">check</span></samp> and the backup file is
+only created if any spelling modifications take place.
+
+     <br><dt><b>time</b><dd><i>(boolean)</i>
+Time load time and suggest time in <samp><span class="command">pipe</span></samp> mode.
+
+     <br><dt><b>byte-offsets</b><dd><i>(boolean)</i>
+Use byte offsets instead of character offsets in <samp><span class="command">pipe</span></samp> mode.
+
+     <br><dt><b>reverse</b><dd><i>(boolean)</i>
+Reverse the order of the suggestions list in <samp><span class="command">pipe</span></samp> mode.
+
+     <br><dt><b>keymapping</b><dd><i>(string)</i>
+the keymapping to use.  Either <samp><span class="option">aspell</span></samp> for the default mapping
+or <samp><span class="option">ispell</span></samp> to use the same mapping that the Ispell utility
+uses.
+
+     <br><dt><b>guess</b><dd><i>(boolean)</i>
+make possible root/affix combinations not in the dictionary in
+<samp><span class="command">pipe</span></samp> mode.
+
+     <br><dt><b>suggest</b><dd><i>(boolean)</i>
+Suggest possible replacements in <samp><span class="command">pipe</span></samp> mode.  If false Aspell
+will simply report the misspelling and make no attempt at suggestions
+or possible corrections. 
+</dl>
+
+   </body></html>
+
diff --git a/manual/aspell.html/The-Simple-Soundslike.html b/manual/aspell.html/The-Simple-Soundslike.html
new file mode 100644 (file)
index 0000000..5cc3f7a
--- /dev/null
@@ -0,0 +1,79 @@
+<html lang="en">
+<head>
+<title>The Simple Soundslike - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link rel="prev" href="Phonetic-Code.html#Phonetic-Code" title="Phonetic Code">
+<link rel="next" href="Replacement-Tables.html#Replacement-Tables" title="Replacement Tables">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="The-Simple-Soundslike"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Replacement-Tables.html#Replacement-Tables">Replacement Tables</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Phonetic-Code.html#Phonetic-Code">Phonetic Code</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<hr>
+</div>
+
+<h3 class="section">7.4 The Simple Soundslike</h3>
+
+<p>The simple soundslike goes something like this:
+
+<pre class="example">     sl0[0] = lookup0(word[0])
+     for (i = 1; i &lt; size; i++)
+       sl0[i] = lookup(word[i]);
+     s = 0;
+     for (i = 0; i &lt; size; i++)
+       sl.append(al0[i]) unless sl0[i] == 0 || sl0[i] == sl0[i-1];
+</pre>
+   <p>Basically each character can be converted to another character or deleted. 
+A separate lookup table is used for the first character.  If the same
+soundslike letter is repeated, the duplicate is removed.
+
+   <p>By default all accents are removed, and all vowels are deleted unless
+they appear at the start of the word in which case they are converted
+to a `<samp><span class="samp">*</span></samp>'.  The exact behavior can be customized via the character
+data file.
+
+   <p>The simplified soundslike has the advantage that it is very fast to
+compute and thus does not need to be stored with a word.  Also, when
+affix compression is used and the <samp><span class="option">partially-expand</span></samp> is given
+the results will be identical to the results when affix compression is
+not used.
+
+   <p>Of course it is not nearly as powerful as the phonetic soundslike.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Through-A-Pipe.html b/manual/aspell.html/Through-A-Pipe.html
new file mode 100644 (file)
index 0000000..469c23d
--- /dev/null
@@ -0,0 +1,168 @@
+<html lang="en">
+<head>
+<title>Through A Pipe - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell" title="Writing programs to use Aspell">
+<link rel="prev" href="Through-the-C-API.html#Through-the-C-API" title="Through the C API">
+<link rel="next" href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs" title="Notes on Storing Replacement Pairs">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Through-A-Pipe"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">Notes on Storing Replacement Pairs</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Through-the-C-API.html#Through-the-C-API">Through the C API</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">6.2 Through A Pipe</h3>
+
+<p>When given the <samp><span class="command">pipe</span></samp> or <samp><span class="command">-a</span></samp> command, Aspell goes
+into a pipe mode that is compatible with <samp><span class="command">ispell -a</span></samp>.  Aspell
+also defines its own set of extensions to Ispell pipe mode.
+
+<h4 class="subsection">6.2.1 Format of the Data Stream</h4>
+
+<p>In this mode, Aspell prints a one-line version identification message,
+and then begins reading lines of input.  For each input line, a single
+line is written to the standard output for each word checked for
+spelling on the line.  If the word was found in the main dictionary,
+or your personal dictionary, then the line contains only a `<samp><span class="samp">*</span></samp>'.
+
+   <p>If the word is not in the dictionary, but there are suggestions, then
+the line contains an `<samp><span class="samp">&amp;</span></samp>', a space, the misspelled word, a space,
+the number of near misses, the number of characters between the
+beginning of the line and the beginning of the misspelled word, a
+colon, another space, and a list of the suggestions separated by
+commas and spaces.
+
+   <p>If you set the option <samp><span class="command">run-together</span></samp> and Aspell thinks this word
+is a combination of two words in the dictionary, then it prints a single
+`<samp><span class="samp">-</span></samp>' in one line.
+
+   <p>Finally, if the word does not appear in the dictionary, and there are
+no suggestions, then the line contains a `<samp><span class="samp">#</span></samp>', a space, the
+misspelled word, a space, and the character offset from the beginning
+of the line.  Each sentence of text input is terminated with an
+additional blank line, indicating that Aspell has completed processing
+the input line.
+
+   <p>These output lines can be summarized as follows:
+
+<pre class="example">     <strong>OK</strong>: *
+     <strong>Suggestions</strong>: &amp; <i>original</i> <i>count</i> <i>offset</i>: <i>miss</i>, <i>miss</i>, ...
+     <strong>None</strong>: # <i>original</i> <i>offset</i>
+</pre>
+   <p>When in the <samp><span class="option">-a</span></samp> mode, Aspell will also accept lines of single
+words prefixed with any of `<samp><span class="samp">*</span></samp>', `<samp><span class="samp">&amp;</span></samp>', `<samp><span class="samp">@</span></samp>',
+`<samp><span class="samp">+</span></samp>', `<samp><span class="samp">-</span></samp>', `<samp><span class="samp">~</span></samp>', `<samp><span class="samp">#</span></samp>', `<samp><span class="samp">!</span></samp>', `<samp><span class="samp">%</span></samp>', or
+`<samp><span class="samp">^</span></samp>'.  A line starting with `<samp><span class="samp">*</span></samp>' tells Aspell to insert the
+word into the user's dictionary.  A line starting with `<samp><span class="samp">&amp;</span></samp>' tells
+Aspell to insert an all-lowercase version of the word into the user's
+dictionary.  A line starting with `<samp><span class="samp">@</span></samp>' causes Aspell to accept
+this word in the future.  A line starting with `<samp><span class="samp">+</span></samp>', followed
+immediately by a valid mode will cause Aspell to parse future input
+according the syntax of that formatter.  A line consisting solely of a
+`<samp><span class="samp">+</span></samp>' will place Aspell in TeX/LaTeX mode (similar to the
+<samp><span class="option">-t</span></samp> option) and `<samp><span class="samp">-</span></samp>' returns Aspell to its default mode
+(which is Nroff unless otherwise specified). 
+(but these commands are obsolete).  A line `<samp><span class="samp">~</span></samp>', is ignored for
+Ispell compatibility.  A line prefixed with `<samp><span class="samp">#</span></samp>' will cause the
+personal dictionaries to be saved.  A line prefixed with `<samp><span class="samp">!</span></samp>'
+will turn on terse mode (see below), and a line prefixed with
+`<samp><span class="samp">%</span></samp>' will return Aspell to normal (non-terse) mode.  Any input
+following the prefix characters `<samp><span class="samp">+</span></samp>', `<samp><span class="samp">-</span></samp>', `<samp><span class="samp">#</span></samp>',
+`<samp><span class="samp">!</span></samp>', `<samp><span class="samp">~</span></samp>', or `<samp><span class="samp">%</span></samp>' is ignored, as is any input
+following.  To allow spell-checking of lines beginning with these
+characters, a line starting with `<samp><span class="samp">^</span></samp>' has that character removed
+before it is passed to the spell-checking code.  It is recommended
+that programmatic interfaces prefix every data line with an uparrow to
+protect themselves against future changes in Aspell.
+
+   <p>To summarize these:
+
+   <p><table summary=""><tr align="left"><td valign="top" width="10%"><kbd>*</kbd><var>word</var>
+ </td><td valign="top" width="90%">Add a word to the personal dictionary
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>&amp;</kbd><var>word</var>
+ </td><td valign="top" width="90%">Insert the all-lowercase version of the word in the personal dictionary
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>@</kbd><var>word</var>
+ </td><td valign="top" width="90%">Accept the word, but leave it out of the dictionary
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>#</kbd>
+ </td><td valign="top" width="90%">Save the current personal dictionary
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>~</kbd> </td><td valign="top" width="90%">Ignored for Ispell compatibility. 
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>+</kbd> </td><td valign="top" width="90%">Enter TeX mode. 
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>+</kbd><var>mode</var> </td><td valign="top" width="90%">Enter the mode specified by <var>mode</var>. 
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>-</kbd> </td><td valign="top" width="90%">Enter the default mode. 
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>!</kbd> </td><td valign="top" width="90%">Enter terse mode
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>%</kbd> </td><td valign="top" width="90%">Exit terse mode
+<br></td></tr><tr align="left"><td valign="top" width="10%"><kbd>^</kbd> </td><td valign="top" width="90%">Spell-check the rest of the line
+   <br></td></tr></table>
+
+   <p>In terse mode, Aspell will not print lines beginning with `<samp><span class="samp">*</span></samp>',
+which indicate correct words.  This significantly improves running
+speed when the driving program is going to ignore correct words
+anyway.
+
+   <p>In addition to the above commands which are designed for Ispell
+compatibility Aspell also supports its own extensions.  All Aspell
+extensions follow the following format.
+
+<pre class="example">     $$<var>command</var> [<var>data</var>]
+</pre>
+   <p>Where <var>data</var> may or may not be required depending on the
+particular command.  Aspell currently supports the following commands:
+
+   <p><table summary=""><tr align="left"><td valign="top" width="33%"><code>cs </code><var>option</var><code>,</code><var>value</var> </td><td valign="top" width="67%">Change a configuration option. 
+<br></td></tr><tr align="left"><td valign="top" width="33%"><code>cr </code><var>option</var> </td><td valign="top" width="67%">Prints the value of a configuration option. 
+<br></td></tr><tr align="left"><td valign="top" width="33%"><code>pp</code>
+ </td><td valign="top" width="67%">Returns a list of all words in the current personal wordlist. 
+<br></td></tr><tr align="left"><td valign="top" width="33%"><code>ps</code>
+ </td><td valign="top" width="67%">Returns a list of all words in the current session dictionary. 
+<br></td></tr><tr align="left"><td valign="top" width="33%"><code>l</code> </td><td valign="top" width="67%">Returns the current language name. 
+<br></td></tr><tr align="left"><td valign="top" width="33%"><code>ra </code><var>mis</var><code>,</code><var>cor</var> </td><td valign="top" width="67%">Add the word pair to the
+ replacement dictionary for later use. Returns nothing.
+   <br></td></tr></table>
+
+   <p>Anything returned is returned on its own line.  All lists returned
+have the following format
+
+<pre class="example">     <i>num of items</i>: <i>item1</i>, <i>item2</i>, <i>etc</i>
+</pre>
+   <!-- FIXME: Add note about byte-offset option. -->
+<p><em>(Part of the preceding section was directly copied out of the
+Ispell manual)</em>
+
+   </body></html>
+
diff --git a/manual/aspell.html/Through-the-C-API.html b/manual/aspell.html/Through-the-C-API.html
new file mode 100644 (file)
index 0000000..e7cebef
--- /dev/null
@@ -0,0 +1,220 @@
+<html lang="en">
+<head>
+<title>Through the C API - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell" title="Writing programs to use Aspell">
+<link rel="next" href="Through-A-Pipe.html#Through-A-Pipe" title="Through A Pipe">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Through-the-C-API"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Through-A-Pipe.html#Through-A-Pipe">Through A Pipe</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>
+<hr>
+</div>
+
+<h3 class="section">6.1 Through the C API</h3>
+
+<p>The Aspell library contains two main classes and several helper
+classes.  The two main classes are <code>AspellConfig</code> and
+<code>AspellSpeller</code>. The <code>AspellConfig</code> class is used to set
+initial defaults and to change spell checker specific options.  The
+<code>AspellSpeller</code> class does most of the real work.  The
+<code>C API</code> is responsible for managing the dictionaries, checking
+if a word is in the dictionary, and coming up with suggestions among
+other things. There are many helper classes the important ones are
+<code>AspellWordList</code>, <code>AspellMutableWordList</code>,
+<code>Aspell*Enumeration</code>.  The <code>AspellWordList</code> classes is used
+for accessing the suggestion list, as well as the personal and
+suggestion word list currently in use.  The
+<code>AspellMutableWordList</code> is used to manage the personal, and
+perhaps other, word lists.  The <code>Aspell*Enumeration</code> classes are
+used for iterating through a list.
+
+<h4 class="subsection">6.1.1 Usage</h4>
+
+<p>To use Aspell your application should include <samp><span class="file">aspell.h</span></samp>.  In
+order to ensure that all the necessary libraries are linked in libtool
+should be used to perform the linking.  When using libtool simply
+linking with <code>-laspell</code> should be all that is necessary.  When
+using shared libraries you might be able to simply link
+<code>-laspell</code>, but this is not recommended.  This version of Aspell
+uses the CVS version of libtool however released versions of libtool
+should also work.
+
+   <p>When your application first starts you should get a new configuration
+class with the command:
+
+<pre class="smallexample">     AspellConfig * spell_config = new_aspell_config();
+</pre>
+   <p class="noindent">which will create a new <code>AspellConfig</code> class.  It is allocated
+with <samp><span class="command">new</span></samp> and it is your responsibility to delete it with
+<code>delete_aspell_config</code>.  Once you have the config class you
+should set some variables.  The most important one is the language
+variable.  To do so use the command:
+
+<pre class="smallexample">     aspell_config_replace(spell_config, "lang", "en_US");
+</pre>
+   <p class="noindent">which will set the default language to use to American English.  The
+language is expected to be the standard two letter ISO 639 language
+code, with an optional two letter ISO 3166 country code after an
+underscore.  You can set the preferred size via the <samp><span class="option">size</span></samp>
+option, any extra info via the <samp><span class="option">variety</span></samp> option, and the
+encoding via the <samp><span class="option">encoding</span></samp> option.  Other things you might
+want to set is the preferred spell checker to use, the search path for
+dictionaries, and the like &mdash; see <a href="The-Options.html#The-Options">The Options</a>, for a list of
+all available options.
+
+   <p>Whenever a new document is created a new <code>AspellSpeller</code> class
+should also be created.  There should be one speller class per
+document.  To create a new speller class use the
+<code>new_aspell_speller</code> and then cast it up using
+<code>to_aspell_speller</code> like so:
+
+<pre class="smallexample">     AspellCanHaveError * possible_err = new_aspell_speller(spell_config);
+     AspellSpeller * spell_checker = 0;
+     if (aspell_error_number(possible_err) != 0)
+       puts(aspell_error_message(possible_err));
+     else
+       spell_checker = to_aspell_speller(possible_err);
+</pre>
+   <p class="noindent">which will create a new <code>AspellSpeller</code> class using the defaults
+found in <code>spell_config</code>.  To find out which dictionary is
+selected the <samp><span class="option">lang</span></samp>, <samp><span class="option">size</span></samp>, and <samp><span class="option">variety</span></samp> options
+may be examined.  To find out the exact name of the dictionary the
+<samp><span class="option">master</span></samp> option may be examined as well as the
+<samp><span class="option">master-flags</span></samp> options to see if there were any special flags
+that were passed on to the module.  The <samp><span class="option">module</span></samp> option way
+also be examined to figure out which speller module was selected, but
+since there is only one this option will always be the same.
+
+   <p>If for some reason you want to use different defaults simply clone
+<code>spell_config</code> and change the setting like so:
+
+<pre class="smallexample">     AspellConfig * spell_config2 = aspell_config_clone(spell_config);
+     aspell_config_replace(spell_config2, "lang","nl");
+     possible_err = new_aspell_speller(spell_config2);
+     delete_aspell_config(spell_config2);
+</pre>
+   <p>Once the speller class is created you can use the <code>check</code> method
+to see if a word in the document is correct like so:
+
+<pre class="smallexample">     int correct = aspell_speller_check(spell_checker, <var>word</var>, <var>size</var>);
+</pre>
+   <p class="noindent"><var>word</var> is expected to be a <code>const char *</code> character
+string.  If the encoding is set to be <code>ucs-2</code> or
+<code>ucs-4</code> <var>word</var> is expected to be a cast
+from either <code>const u16int *</code> or <code>const u32int *</code>
+respectively.  <code>u16int</code> and <code>u32int</code> are generally
+<code>unsigned short</code> and <code>unsigned int</code> respectively. 
+<var>size</var> is the length of the string or <code>-1</code> if the string
+is null terminated.  If the string is a cast from <code>const u16int
+*</code> or <code>const u32int *</code> then <i>size</i> is the amount of
+space in bytes the string takes up after being cast to <code>const
+char *</code> and not the true size of the string.  <code>sspell_speller_check</code>
+will return <code>0</code> if it is not found and non-zero otherwise.
+
+   <p>If the word is not correct, then the <code>suggest</code> method can be used
+to come up with likely replacements.
+
+<pre class="smallexample">     AspellWordList * suggestions = aspell_speller_suggest(spell_checker,
+                                                           <var>word</var>, <var>size</var>);
+     AspellStringEnumeration * elements = aspell_word_list_elements(suggestions);
+     const char * word;
+     while ( (word = aspell_string_enumeration_next(aspell_elements)) != NULL )
+     {
+       // add to suggestion list
+     }
+     delete_aspell_string_enumeration(elements);
+</pre>
+   <p>Notice how <code>elements</code> is deleted but <code>suggestions</code> is not. 
+The value returned by <code>suggestions</code> is only valid to the next
+call to <code>suggest</code>.  Once a replacement is made the
+<code>store_repl</code> method should be used to communicate the replacement
+pair back to the spell checker (for the reason, see <a href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">Notes on Storing Replacement Pairs</a>).  Its usage is as follows:
+
+<pre class="smallexample">     aspell_speller_store_repl(spell_checker, <var>misspelled_word</var>, <var>size</var>,
+                               <var>correctly_spelled_word</var>, <var>size</var>);
+</pre>
+   <p>If the user decided to add the word to the session or personal
+dictionary the the word can be be added using the
+<code>add_to_session</code> or <code>add_to_personal</code> methods respectively
+like so:
+
+<pre class="smallexample">     aspell_speller_add_to_session|personal(spell_checker, <i>word</i>, <i>size</i>);
+</pre>
+   <p>It is better to let the spell checker manage these words rather than
+doing it yourself so that the words have a chance of appearing in the
+suggestion list.
+
+   <p>Finally, when the document is closed the <code>AspellSpeller</code> class
+should be deleted like so:
+
+<pre class="smallexample">     delete_aspell_speller(spell_checker);
+</pre>
+   <h4 class="subsection">6.1.2 API Reference</h4>
+
+<p>Methods that return a boolean result generally return <code>false</code> on
+error and <code>true</code> otherwise.  To find out what went wrong use the
+<code>error_number</code> and <code>error_message</code> methods.  Unless
+otherwise stated methods that return a <code>const char *</code> will return
+<code>NULL</code> on error.  In general, the character string returned is
+only valid until the next method which returns a <code>const char *</code>
+is called.
+
+   <p>For the details of the various classes please see the header files. 
+In the future I will generate class references using some automated
+tool.
+
+<h4 class="subsection">6.1.3 Examples</h4>
+
+<p>Two simple examples are included in the examples directory.  The
+<code>example-c</code> program demonstrates most of the Aspell library
+functionality and the <code>list-dicts</code> lists the available
+dictionaries.
+
+<h4 class="subsection">6.1.4 Notes About Thread Safety</h4>
+
+<p>Aspell should be thread safe, when used properly, as long as the
+underlying compiler, C and C++ library is thread safe.  Aspell
+objects, including the AspellSpeller class, should not be used by
+multiple threads unless they are protected by locks or it is only
+accessed by read-only methods.  A method is read-only only if a
+<code>const</code> object is passed in.  Many methods that seam to be
+read-only are not because they may store state information in the
+object.
+
+   </body></html>
+
diff --git a/manual/aspell.html/To-Do.html b/manual/aspell.html/To-Do.html
new file mode 100644 (file)
index 0000000..4aeec03
--- /dev/null
@@ -0,0 +1,58 @@
+<html lang="en">
+<head>
+<title>To Do - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="next" href="Installing.html#Installing" title="Installing">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="To-Do"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Installing.html#Installing">Installing</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="appendix">Appendix D To Do</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="Important-Items.html#Important-Items">Important Items</a>
+<li><a accesskey="2" href="Other-Items.html#Other-Items">Other Items</a>
+<li><a accesskey="3" href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>
+</ul>
+
+</body></html>
+
diff --git a/manual/aspell.html/Unicode-Normalization.html b/manual/aspell.html/Unicode-Normalization.html
new file mode 100644 (file)
index 0000000..0c31f29
--- /dev/null
@@ -0,0 +1,76 @@
+<html lang="en">
+<head>
+<title>Unicode Normalization - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="prev" href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them" title="Words With Symbols in Them">
+<link rel="next" href="German-Sharp-S.html#German-Sharp-S" title="German Sharp S">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Unicode-Normalization"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="German-Sharp-S.html#German-Sharp-S">German Sharp S</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">Words With Symbols in Them</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">C.3 Unicode Normalization</h3>
+
+<p>Because Unicode contains a large number of precomposed characters there
+are multiple ways a character can be represented.  For example letter
+&ouml; can either be represented as
+
+<pre class="example">     U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+<br>or<br>
+     U+0061 LATIN SMALL LETTER O + U+0308 COMBINING DIAERESIS
+</pre>
+   <p>By performing normalization first, Aspell will only see one of these
+representations.  The exact form of normalization depends on the
+language.  Give the choice of:
+
+     <ol type=1 start=1>
+<li>Precomposed character
+<li>Base letter + combining character(s)
+<li>Base letter only
+        </ol>
+
+<p class="noindent">if the precomposed character is in the target character set, then (1),
+if both base and combining character is present, then (2), otherwise (3).
+
+   <p>Unicode Normalization is now implemented in Aspell 0.60.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Unsupported.html b/manual/aspell.html/Unsupported.html
new file mode 100644 (file)
index 0000000..b75219a
--- /dev/null
@@ -0,0 +1,125 @@
+<html lang="en">
+<head>
+<title>Unsupported - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support" title="Languages Which Aspell can Support">
+<link rel="prev" href="Supported.html#Supported" title="Supported">
+<link rel="next" href="Multiple-Scripts.html#Multiple-Scripts" title="Multiple Scripts">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Unsupported"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Multiple-Scripts.html#Multiple-Scripts">Multiple Scripts</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Supported.html#Supported">Supported</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">B.2 Unsupported</h3>
+
+<p>These languages, when written in the given script, are currently
+unsupported by Aspell for one reason or another.
+
+   <p><table summary=""><tr align="left"><td valign="top"><b>Code</b> </td><td valign="top"><b>Language Name</b> </td><td valign="top"><b>Script</b>
+<br></td></tr><tr align="left"><td valign="top">ja </td><td valign="top">Japanese </td><td valign="top">Japanese
+<br></td></tr><tr align="left"><td valign="top">km </td><td valign="top">Khmer </td><td valign="top">Khmer
+<br></td></tr><tr align="left"><td valign="top">ko </td><td valign="top">Korean </td><td valign="top">Han, Hangul
+<br></td></tr><tr align="left"><td valign="top">lo </td><td valign="top">Lao </td><td valign="top">Lao
+<br></td></tr><tr align="left"><td valign="top">th </td><td valign="top">Thai </td><td valign="top">Thai
+<br></td></tr><tr align="left"><td valign="top">zh </td><td valign="top">Chinese </td><td valign="top">Han
+
+   <br></td></tr></table>
+
+<h4 class="appendixsubsec">B.2.1 The Thai, Khmer, and Lao Scripts</h4>
+
+<p>The Thai, Khmer, and Lao scripts presents a different problem for
+Aspell.  The problem is not that there are more than 210 unique symbols,
+but that there are no spaces between words.  This means that there is no
+easy way to split a sentence into individual words.  However, it is
+still possible to spell check these scripts, it is just a lot more
+difficult.  I will be happy to work with someone who is interested in
+adding Thai, Khmer, or Lao support to Aspell, but it is not likely
+something I will do on my own in the foreseeable future.
+
+<h4 class="appendixsubsec">B.2.2 Languages which use H&agrave;nzi Characters</h4>
+
+<p>H&agrave;nzi Characters are used to write Chinese, Japanese, Korean, and were
+once used to write Vietnamese.  Each h&agrave;nzi character represents a
+syllable of a spoken word and also has a meaning.  Since there are
+around 3,000 of them in common usage it is unlikely that Aspell will
+ever be able to support spell checking languages written using h&agrave;nzi
+until full Unicode support is implemented.  However, I am not even sure
+if these languages need spell checking since h&agrave;nzi characters are
+generally not entered in directly.  Furthermore even if Aspell could
+spell check h&agrave;nzi the existing suggestion strategy will not work well
+at all, and thus a completely new strategy will need to be developed. 
+However, if it is the case that h&agrave;nzi needs to be spell checked and
+you know something about the issues involved please fell free to contact
+me.
+
+<h4 class="appendixsubsec">B.2.3 Japanese</h4>
+
+<p>Modern Japanese is written in a mixture of <dfn>hiragana</dfn>,
+<dfn>katakana</dfn>, <dfn>kanji</dfn>, and sometimes <dfn>romaji</dfn>.  <dfn>Hiragana</dfn>
+and <dfn>katakana</dfn> are both syllabaries unique to Japan, <dfn>kanji</dfn> is
+a modified form of h&agrave;nzi, and <dfn>romaji</dfn> uses the Latin alphabet. 
+With some work, Aspell should be able to check the non-kanji part of
+Japanese text.  However, based on my limited understanding of Japanese
+hiragana is often used at the end of kanji.  Thus if Aspell was to
+simply separate out the hiragana from kanji it would end up with a lot
+of word endings which are not proper words and will thus be flagged as
+misspellings.  However, this can be fairly easily rectified as text is
+tokenized into words before it is converted into Aspell's internal
+encoding.  In fact, some Japanese text is written in entirely in one
+script.  For example books for children and foreigners are sometimes
+written entirely in hiragana.  Thus, Aspell, in its current state, could
+prove at least somewhat useful for spell checking Japanese.
+
+<h4 class="appendixsubsec">B.2.4 Hangul</h4>
+
+<p>Korean is generally written in hangul or a mixture of han and hangul.  In
+Hangul letters individual letters, known as jamo, are grouped together
+in syllable blocks.  Unicode allows Hangul to be stored in one of three
+ways, (A) Individual jamo letters (Hangul Compatibility Jamo, U+3130 -
+U+318F), (D) decomposed jamo (Hangul Jamo, U+1100 - U+11FF), and (C)
+precoposed sylable blocks (Hangul Syllables, U+AC00 - U+D7AF).  In order
+for Aspell to work with Hangul it needs to be form A.  Unfortunately the
+existing Normalization code in Aspell will not be able to adequately
+deal with converting Hangul from form D and C to form A and back again. 
+However, once this code is written, Aspell should be able to spell check
+Hangul without any problem.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Upgrading-from-Aspell-0_002e50.html b/manual/aspell.html/Upgrading-from-Aspell-0_002e50.html
new file mode 100644 (file)
index 0000000..6c5c6b7
--- /dev/null
@@ -0,0 +1,104 @@
+<html lang="en">
+<head>
+<title>Upgrading from Aspell 0.50 - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Loadable-Filter-Notes.html#Loadable-Filter-Notes" title="Loadable Filter Notes">
+<link rel="next" href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12" title="Upgrading from Aspell .33/Pspell .12">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Upgrading-from-Aspell-0.50"></a>
+<a name="Upgrading-from-Aspell-0_002e50"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12">Upgrading from Aspell .33/Pspell .12</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Loadable-Filter-Notes.html#Loadable-Filter-Notes">Loadable Filter Notes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.5 Upgrading from Aspell 0.50</h3>
+
+<p>The dictionary format has changed so dictionaries will need to be
+recompiled.
+
+   <p>All data, by default, is now included in <samp><var>libdir</var><span class="file">/aspell-0.60</span></samp> so
+that multiple versions of Aspell can more peacefully coexist.  This
+included both the dictionaries and the language data files which were
+stored in <samp><var>sharedir</var><span class="file">/aspell</span></samp> before Aspell 0.60.
+
+   <p>The format of the character data files has changed.  The new character
+data files are installed with Aspell so you should not have to worry
+about it unless you made a custom one.
+
+   <p>The dictionary option <samp><span class="option">strip-accents</span></samp> has been removed.  For
+this reason the old English dictionary (up to 0.51) will no longer
+work.  A new English dictionary is now available which avoids using
+this option.  In addition the <samp><span class="option">ignore-accents</span></samp> option is
+currently unimplemented.
+
+   <p>The flag <samp><span class="option">-l</span></samp> is now a shortcut for <samp><span class="option">--lang</span></samp>, instead of
+<samp><span class="option">--list</span></samp> as it was with Aspell 0.50.
+
+   <p><a name="Binary-Compatibility"></a>
+
+<h4 class="appendixsubsec">E.5.1 Binary Compatibility</h4>
+
+<p>The Aspell 0.60 library is binary compatible with the Aspell 0.50
+library.  For this reason I chose <em>not</em> to increment the major
+version number (so-name) of the shared library by default which means
+programs that were compiled for Aspell 0.50 will also work for Aspell
+0.60.  However, this means that having both Aspell 0.50 and Aspell 0.60
+installed at the same time can be pragmatic.  If you wish to allow both
+Aspell 0.50 and 0.60 to be installed at the same time then you can use
+the configure option <samp><span class="option">--incremented-soname</span></samp> which will increment
+so-name.  You should only use this option if you know what you are
+doing.  It is up to you to somehow ensure that both the Aspell 0.50 and
+0.60 executables can coexist.
+
+   <p>If after incrementing the so-name you wish to allow programs compiled
+for Aspell 0.50 to use Aspell 0.60 instead (thus implying that Aspell
+0.50 is not installed) then you can use a special compatibility library
+which can be found in the <samp><span class="file">lib5</span></samp> directory.  This directory will
+not be entered when building or installing Aspell so you must manually
+build and install this library.  You should build it after the rest of
+Aspell is built.  The order in which this library is installed, with
+relation to the rest of Aspell, is also important.  If it is installed
+<em>after</em> the rest of Aspell then new programs will link to the old
+library (which will work for Aspell 0.50 or 0.60) when built, if
+installed <em>before</em>, new programs will link with the new library
+(Aspell 0.60 only).
+
+   </body></html>
+
diff --git a/manual/aspell.html/Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html b/manual/aspell.html/Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html
new file mode 100644 (file)
index 0000000..3bcf206
--- /dev/null
@@ -0,0 +1,102 @@
+<html lang="en">
+<head>
+<title>Upgrading from Aspell .33/Pspell .12 - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50" title="Upgrading from Aspell 0.50">
+<link rel="next" href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot" title="Upgrading from a Pre-0.50 snapshot">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Upgrading-from-Aspell-.33%2fPspell-.12"></a>
+<a name="Upgrading-from-Aspell-_002e33_002fPspell-_002e12"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot">Upgrading from a Pre-0.50 snapshot</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">Upgrading from Aspell 0.50</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.6 Upgrading from Aspell .33/Pspell .12</h3>
+
+<p>Aspell has undergone an extremely large number of changes since the
+previous Aspell/Pspell release.  For one thing Pspell has been merged
+with Aspell so there in no longer two separate libraries you have to
+worry about.
+
+   <p>Because of the massive changes between Aspell/Pspell and Aspell 0.50
+you may want to clean out the old files before installing the the new
+Aspell.  To do so do a `<samp><span class="samp">make uninstall</span></samp>' in the original Aspell
+and Pspell source directories.
+
+   <p>The way dictionaries are handled has also changed.  This includes a
+change in the naming conventions of both language names and
+dictionaries.  Due to the language name change, your old personal
+dictionaries will not be recognized.  However, you can import the old
+dictionaries by running the <samp><span class="command">aspell-import</span></samp> script.  This also
+means that dictionaries designed to work with older versions of Aspell
+are not likely to function correctly.  Fortunately new dictionary
+packages are available for most languages.  You can find them off of
+the Aspell home page at <a href="http://aspell.net">http://aspell.net</a>.
+
+   <p>The Pspell ABI is now part of Aspell except that the name of
+everything has changed due to the renaming of Pspell to Aspell.  In
+particular please note the following name changes:
+
+<pre class="example">     pspell -&gt; aspell
+     manager -&gt; speller
+     emulation -&gt; enumeration
+     master_word_list -&gt; main_word_list
+</pre>
+   <p>Please also note that the name of the <samp><span class="option">language-tag</span></samp> option has
+changed to <samp><span class="option">lang</span></samp>.  However, for backward compatibility the
+<samp><span class="option">language-tag</span></samp> option will still work.
+
+   <p>However, you should also be able to build applications that require
+Pspell with the new Aspell as a backward compatibility header file is
+provided.
+
+   <p>Due to a change in the way dictionaries are handled, scanning for
+<samp><span class="file">.pwli</span></samp> files in order to find out which dictionaries are
+available will no longer work.  This means that programs that relied
+on this technique may have problems finding dictionaries. 
+Fortunately, GNU Aspell now provided a uniform way to list all
+installed dictionaries via the c API.  See the file
+<samp><span class="file">list-dicts.c</span></samp> in the <samp><span class="file">examples/</span></samp> directory for an example
+of how to do this.  Unfortunately there isn't any simple way to find
+out which dictionaries are installed which will work with both the old
+Aspell/Pspell and the new GNU Aspell.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Upgrading-from-a-Pre_002d0_002e50-snapshot.html b/manual/aspell.html/Upgrading-from-a-Pre_002d0_002e50-snapshot.html
new file mode 100644 (file)
index 0000000..3860f26
--- /dev/null
@@ -0,0 +1,60 @@
+<html lang="en">
+<head>
+<title>Upgrading from a Pre-0.50 snapshot - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12" title="Upgrading from Aspell .33/Pspell .12">
+<link rel="next" href="WIN32-Notes.html#WIN32-Notes" title="WIN32 Notes">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Upgrading-from-a-Pre-0.50-snapshot"></a>
+<a name="Upgrading-from-a-Pre_002d0_002e50-snapshot"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="WIN32-Notes.html#WIN32-Notes">WIN32 Notes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12">Upgrading from Aspell .33/Pspell .12</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.7 Upgrading from a Pre-0.50 snapshot</h3>
+
+<p>At the last minute I decided to merge the <samp><span class="file">speller-util</span></samp> program
+into the main <samp><span class="file">aspell</span></samp> program.  You may wish to remove that
+<samp><span class="file">speller-util</span></samp> program to avoid confusion.  This also means that
+dictionaries designed to work with the snapshot will no longer work
+with the official release.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Using-Aspell-as-a-Replacement-for-Ispell.html b/manual/aspell.html/Using-Aspell-as-a-Replacement-for-Ispell.html
new file mode 100644 (file)
index 0000000..6d1965b
--- /dev/null
@@ -0,0 +1,186 @@
+<html lang="en">
+<head>
+<title>Using Aspell as a Replacement for Ispell - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Basic-Usage.html#Basic-Usage" title="Basic Usage">
+<link rel="prev" href="Spellchecking-Individual-Files.html#Spellchecking-Individual-Files" title="Spellchecking Individual Files">
+<link rel="next" href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications" title="Using Aspell with other Applications">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Using-Aspell-as-a-Replacement-for-Ispell"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">Using Aspell with other Applications</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Spellchecking-Individual-Files.html#Spellchecking-Individual-Files">Spellchecking Individual Files</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>
+<hr>
+</div>
+
+<h3 class="section">3.2 Using Aspell as a Replacement for Ispell</h3>
+
+<p>As of GNU Aspell 0.60.1 Aspell should be able to completely replace
+Ispell for most applications.  The Ispell compatibility script should
+work for most applications which expect Ispell.  However there are
+some differences which you should be aware of.
+
+<h4 class="subsection">3.2.1 As a Drop In Replacement</h4>
+
+<p>Aspell can be used as a drop in replacement for Ispell for programs
+that use Ispell through a pipe such as Emacs and LyX.  It can also be
+used with programs that simply call the <samp><span class="command">ispell</span></samp> command and
+expect the original file to be overwritten with the corrected version.
+
+   <p>If you do not have Ispell installed on your system and have installed
+the Ispell compatibility script then you should not need to do anything
+as most applications that expect Ispell will work as expected
+with Aspell via the Ispell compatibility script.
+
+   <p>Otherwise, the recommended way to use Aspell as a replacement for
+Ispell is to change the <samp><span class="command">ispell</span></samp> command from within the
+program being used.  If the program uses <samp><span class="command">ispell</span></samp> in pipe mode
+simply change <samp><span class="command">ispell</span></samp> to <samp><span class="command">aspell</span></samp>.  If the program
+calls the <samp><span class="command">ispell</span></samp> command to check the file, then change
+<samp><span class="command">ispell</span></samp> with <samp><span class="command">aspell check</span></samp>.
+
+   <p>If that is impossible then the <samp><span class="command">run-with-aspell</span></samp> script can be
+used.  This script modifies the patch so that programs see the Ispell
+compatibility script instead of the actual true <samp><span class="command">ispell</span></samp>
+command.  The format of the script is:
+
+<pre class="example">     run-with-aspell <var>command</var>
+</pre>
+   <p class="noindent">where <var>command</var> is the name of the program with any optional
+arguments.
+
+   <p>The old method of mapping Ispell to Aspell is discouraged because it
+can create compatibility problems with programs that actually require
+Ispell such as Ispell's own scripts.
+
+   <p><a name="Differences-From-Ispell"></a>
+
+<h4 class="subsection">3.2.2 Differences From Ispell</h4>
+
+<p>Nevertheless, Aspell is not Ispell, nor is it meant to completely
+emulate the behavior of Ispell.  The <samp><span class="command">aspell</span></samp> command is not
+identical to the <samp><span class="command">ispell</span></samp> command when not used in &ldquo;pipe&rdquo;
+mode.  If an application expects the <samp><span class="command">ispell</span></samp> command, then
+the Ispell compatibility script should be used instead.
+
+<h5 class="subsubsection">3.2.2.1 Functionality of the Ispell Compatibility Script</h5>
+
+<p>The Ispell compatibility script provides the following Ispell
+functionally.
+
+     <ul>
+<li>The ability to check a file when called without any mode parameters.
+
+     <li>The pipe or -a mode.
+
+     <li>The list or -l mode.
+
+     <li>The version or -v mode.  A single line is returned which, while not
+being identical to the line Ispell returns, is sufficient to fool most
+programs.
+
+     <li>The munch or -c mode.
+
+     <li>The expand or -e mode.
+
+     <li>The ability to dump the affix file when called with '-D'.  However the
+format of the affix file is different.  Furthermore, not all languages
+have an affix file.
+
+   </ul>
+
+   <p>However the Ispell script is currently unable to emulate
+the '-A' pipe mode.  This is different from the normal pipe mode in
+that the special <code>&amp;Include_File&amp;</code> command is recognized.
+
+<h5 class="subsubsection">3.2.2.2 Recognized Options</h5>
+
+<p>Aspell, and thus the Ispell compatibility script, recognizes most of
+the options that Ispell uses except for the '-S', '-w' and '-T'
+options.  The Aspell command will simply ignore these options if it
+sees them.
+
+<h5 class="subsubsection">3.2.2.3 Check Mode Compatibility</h5>
+
+<p>The interface used by Aspell when checking individual files is
+slightly different than Ispell's.  In particular the default
+keymappings are not the same as the ones Ispell uses.  However Aspell
+supports using the Ispell keymappings via the <samp><span class="option">keymapping</span></samp>
+option.  To use the Ispell keymappings set the <samp><span class="option">kepmapping</span></samp>
+option to <code>ispell</code>.  This can be done on the command line by
+adding using the command:
+
+<pre class="example">       aspell check --keymapping=ispell ...
+<br>or with the Ispell compatibility script<br>
+       ispell --keymapping=ispell ...
+</pre>
+   <p>The Ispell keymapping can always be used when the Ispell compatibly
+script is called by uncommenting the indicated line in the
+<samp><span class="command">ispell</span></samp> script.
+
+<h5 class="subsubsection">3.2.2.4 Pipe Mode Compatibility</h5>
+
+<p>The Aspell pipe mode should be identical to the Ispell pipe mode except
+if the line starts with a '$$' as that will trigger special Aspell
+only commands or if the line starts with a '~' which is ignored by Aspell.
+
+<h5 class="subsubsection">3.2.2.5 Other Differences</h5>
+
+<p>The compiled dictionary format is completely different than Ispell's. 
+Furthermore the format of the language data files' are different than
+Ispell's affix file.  However, all known Ispell dictionaries were
+converted to Aspell format, except for Albanian (sq) as I was unable
+to find the source word list.
+
+   <p>The naming and format of the personal dictionary is also different. 
+However, Ispell personal dictionaries can be imported using the
+<samp><span class="command">aspell-import</span></samp> script.  See <a href="Using-aspell_002dimport.html#Using-aspell_002dimport">Using aspell-import</a>.  The
+Ispell personal dictionary is simply a list of words while the Aspell
+one is a list of words with a header line.  Thus it is also fairly
+easy to convert between the two.  See <a href="Format-of-the-Personal-Dictionary.html#Format-of-the-Personal-Dictionary">Format of the Personal Dictionary</a>.
+
+<h5 class="subsubsection">3.2.2.6 Missing Functionally</h5>
+
+<p>The only major area where Ispell is superior to Aspell is in the
+handling of multi character letters such as old ASCII encoding of
+accented characters.
+
+   <p>However, Aspell can handle UTF-8 documents far better than Ispell
+can.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Using-Aspell-with-other-Applications.html b/manual/aspell.html/Using-Aspell-with-other-Applications.html
new file mode 100644 (file)
index 0000000..231d955
--- /dev/null
@@ -0,0 +1,130 @@
+<html lang="en">
+<head>
+<title>Using Aspell with other Applications - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Basic-Usage.html#Basic-Usage" title="Basic Usage">
+<link rel="prev" href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell" title="Using Aspell as a Replacement for Ispell">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Using-Aspell-with-other-Applications"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">Using Aspell as a Replacement for Ispell</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>
+<hr>
+</div>
+
+<h3 class="section">3.3 Using Aspell with other Applications</h3>
+
+<h4 class="subsection">3.3.1 With Emacs and XEmacs</h4>
+
+<p>The easiest way to use Aspell with Emacs or XEmacs is to add this
+line:
+
+<pre class="verbatim">
+(setq-default ispell-program-name "aspell")
+</pre>
+
+   <p>to the end of your <samp><span class="file">.emacs</span></samp> file.
+
+   <p>For some reason version 3.0 of ispell.el (the lisp program that
+(x)emacs uses) wants to reverse the suggestion list.  To fix this add
+this line:
+
+<pre class="verbatim">
+(setq-default ispell-extra-args '("--reverse"))
+</pre>
+
+   <p>after the previous line in your .emacs file and it should solve the problem.
+
+   <p>Ispell.el, version 3.1 (December 1, 1998) and better, has the list
+reversing problem fixed.  You can find it at
+<a href="http://www.kdstevens.com/~stevens/ispell-page.html">http://www.kdstevens.com/~stevens/ispell-page.html</a>.
+
+<h4 class="subsection">3.3.2 With LyX</h4>
+
+<p>Version 1.0 of LyX provides support for Aspell's learning from user's
+mistakes feature.
+
+   <p>To use Aspell with LyX 1.0 either change the <samp><span class="option">spell_command</span></samp>
+option in the <samp><span class="file">.lyxrc</span></samp> file or use the <samp><span class="command">run-with-aspell</span></samp>
+utility.
+
+<h4 class="subsection">3.3.3 With VIM</h4>
+
+<!-- @emph{(The following section was written by ``R.  Marc'', rmarc at -->
+<!-- copacetic net.)} -->
+<p>To use Aspell in VIM you simply need to add the following line to your
+<samp><span class="file">.vimrc</span></samp> file:
+
+<pre class="verbatim">
+map ^T :w!&lt;CR>:!aspell check %&lt;CR>:e! %&lt;CR>
+</pre>
+
+   <p>I use <kbd>Ctrl-T</kbd> since that's the way you spell check in
+<samp><span class="command">pico</span></samp>.  In order to add a control character to your
+<code>.vimrc</code> you must type <kbd>Ctrl-v</kbd> first.  In this case
+<kbd>Ctrl-v Ctrl-t</kbd>.
+
+   <p>A more useful way to use Aspell, IMHO, is in combination with Newsbody
+(<a href="http://www.image.dk/~byrial/newsbody/">http://www.image.dk/~byrial/newsbody/</a>) which is how I use it
+since VIM is my editor for my mailer and my news reader.
+<pre class="verbatim">
+map ^T\\1\\2&lt;CR>:e! %&lt;CR>
+map \\1 :w!&lt;CR>
+map \\2 :!newsbody -qs -n % -p aspell check \\%f&lt;CR>
+</pre>
+
+<h4 class="subsection">3.3.4 With Pine</h4>
+
+<p>To use Aspell in Pine simply change the option <samp><span class="option">speller</span></samp> to
+
+<pre class="example">     aspell --mode=email check
+</pre>
+   <p>To change the <samp><span class="option">speller</span></samp> option go to the main menu.  Type
+<kbd>S</kbd> for <em>setup</em>, <kbd>C</kbd> for <em>config</em>, then <kbd>W</kbd> for
+<em>where is</em>.  Type in <kbd>speller</kbd> as the word to find.  The
+speller option should be highlighted now.  Hit enter, type in the
+above line, and hit enter again.  Then type <kbd>E</kbd> for <em>exit
+setup</em> and <kbd>Y</kbd> to save the change.
+
+   <p>If you have a strong desire to check other people's comments change
+<samp><span class="option">speller</span></samp> to
+
+<pre class="example">     aspell check
+</pre>
+   <p class="noindent">instead which will avoid switching Aspell into email mode.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Using-Multi-Dictionaries.html b/manual/aspell.html/Using-Multi-Dictionaries.html
new file mode 100644 (file)
index 0000000..a378e6d
--- /dev/null
@@ -0,0 +1,73 @@
+<html lang="en">
+<head>
+<title>Using Multi Dictionaries - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries" title="Format of the Personal and Replacement Dictionaries">
+<link rel="next" href="Dictionary-Naming.html#Dictionary-Naming" title="Dictionary Naming">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Using-Multi-Dictionaries"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">Format of the Personal and Replacement Dictionaries</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.8 Using Multi Dictionaries</h3>
+
+<p>As with previous versions of Aspell you can specify the main
+dictionary to use via the <samp><span class="option">-d</span></samp> or <samp><span class="option">--master</span></samp> option. 
+However as of <acronym>Aspell .32</acronym> you can now also:
+
+     <ol type=1 start=1>
+<li>Specify more than word list to use with the
+<samp><span class="option">extra-dicts</span></samp> option.
+
+     <li>Specify special <em>multi</em> dictionaries.
+        </ol>
+
+   <p>The <samp><span class="option">extra-dicts</span></samp> is a list option.  To add a dictionary use
+<samp><span class="option">add-extra-dicts</span></samp> or to remove a dictionary from the list
+use <samp><span class="option">rem-extra-dicts</span></samp>.
+
+   <p>A <em>multi</em> dictionary is a special file which is basically a list
+of dictionary files to use.  A <em>multi</em> dictionary must end in
+<samp><span class="file">.multi</span></samp> and has roughly the same format as a configuration file
+with the only accepted key being <samp><span class="option">add</span></samp>.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Using-aspell_002dimport.html b/manual/aspell.html/Using-aspell_002dimport.html
new file mode 100644 (file)
index 0000000..2f85034
--- /dev/null
@@ -0,0 +1,68 @@
+<html lang="en">
+<head>
+<title>Using aspell-import - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="next" href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary" title="How Aspell Selects an Appropriate Dictionary">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Using-aspell-import"></a>
+<a name="Using-aspell_002dimport"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.1 Using <samp><span class="command">aspell-import</span></samp></h3>
+
+<p>The <samp><span class="command">aspell-import</span></samp> Perl script will look for old personal
+dictionaries and will import them into GNU Aspell.  It will look for
+both Ispell and Aspell ones.  To use it, just run it from the command
+prompt.  If you get an error about <samp><span class="file">/usr/bin/perl</span></samp> not being
+found, then instead try <samp><span class="command">perl </span><var>bindir</var><span class="command">/aspell-import</span></samp>.  When
+running the script if you get a message like:
+
+<pre class="verbatim">
+Error: No word lists can be found for the language "de".
+</pre>
+
+   <p>This means that you have not installed support for the given language,
+in this case <code>de</code> for German.  To rectify the situation download
+and install a dictionary designed to work with GNU Aspell 0.50 or
+better.
+
+   </body></html>
+
diff --git a/manual/aspell.html/WIN32-Notes.html b/manual/aspell.html/WIN32-Notes.html
new file mode 100644 (file)
index 0000000..5d99297
--- /dev/null
@@ -0,0 +1,208 @@
+<html lang="en">
+<head>
+<title>WIN32 Notes - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Installing.html#Installing" title="Installing">
+<link rel="prev" href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot" title="Upgrading from a Pre-0.50 snapshot">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="WIN32-Notes"></a>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot">Upgrading from a Pre-0.50 snapshot</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Installing.html#Installing">Installing</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">E.8 WIN32 Notes</h3>
+
+<h4 class="appendixsubsec">E.8.1 Getting the WIN32 version</h4>
+
+<p>The latest version of the native Aspell/WIN32 port, including
+binaries, can be found at <a href="http://aspell.net/win32">http://aspell.net/win32</a>.  This page
+has, unfortunately, not been updated for Aspell 0.60.  If you are
+interested in updated the native port please let me know.
+
+<h4 class="appendixsubsec">E.8.2 Building the WIN32 version</h4>
+
+<p>There are two basically different ways of building Aspell using GCC
+for WIN32: You can either use the Cygwin compiler, which will produce
+binaries that depend on the POSIX layer in <samp><span class="file">cygwin1.dll</span></samp>.  The
+other way is using MinGW GCC, those binaries use the native C runtime
+from Microsoft (MSVCRT.DLL).
+
+<!-- FIXME: Is the following true? -->
+<!-- If you intend to use or link against the -->
+<!-- Aspell libraries using a native WIN32 compiler (e.g.  MS Visual C++), -->
+<!-- you will need the MinGW built ones to avoid problems caused by the -->
+<!-- different runtime libraries. -->
+<h5 class="appendixsubsubsec">E.8.2.1 Building Aspell using Cygwin</h5>
+
+<p>This works exactly like on other POSIX
+compatible systems using the `<samp><span class="samp">./configure &amp;&amp; make &amp;&amp; make install</span></samp>'
+cycle.  Some versions of Cygwin GCC will fail to link, this is caused
+by an incorrect <samp><span class="file">libstdc++.la</span></samp> in the <samp><span class="file">/lib</span></samp> directory. 
+After removing or renaming this file, the build progress should work
+(GCC-2.95 and GCC-3.x should work).
+
+<h5 class="appendixsubsubsec">E.8.2.2 Building Aspell using MinGW</h5>
+
+<p>There are several different ways to build Aspell using MinGW.  The
+easiest way is to use a Cygwin compiler but instruct it to build a
+native binary rather than a Cygwin one.  To do this configure with:
+
+<pre class="example">     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin'
+</pre>
+   <p>You may also want to add the option
+<samp><span class="option">--enable-win32-relocatable</span></samp> to use more windows friendly
+directories.  See <a href="Win32_002dDirectories.html#Win32_002dDirectories">Win32-Directories</a>.  In this case configure with:
+
+<pre class="smallexample">     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin' --enable-win32-relocatable
+</pre>
+   <p>It should also be possible to build Aspell using the MSYS environment. 
+But this has not been very well tested.  If building with MSYS
+<em>do not</em> add `<samp><span class="samp">CFLAGS ...</span></samp>' to configure.
+
+<h5 class="appendixsubsubsec">E.8.2.3 Building Aspell without using Cygwin or MSYS</h5>
+
+<p>It is also possible to build Aspell without Cygwin of MinGW by using
+the files in the <samp><span class="file">win32/</span></samp> subdirectory.  However, these files
+have not been updated to work with Aspell 0.60.  Thus the following
+instructions will not work without some effort.  If you do get Aspell
+to compile this way please send me the updated files so that I can
+include them with the next release.
+
+   <p>To compile Aspell with the MinGW
+compiler, you will need at least GCC-3.2 (as shipped with MinGW-2.0.3)
+and some GNU tools like <samp><span class="command">rm</span></samp> and <samp><span class="command">cp</span></samp>.  The origin of
+those tools doesn't matter, it has shown to work with any tools from
+MinGW/MSys, Cygwin or Linux.  To build Aspell, move into the
+<samp><span class="file">win32</span></samp> subdirectory and type `<samp><span class="samp">make</span></samp>'.  You can enable some
+additional build options by either commenting out the definitions at
+the head of the Makefile or passing those values as environment
+variables or at the <samp><span class="command">make</span></samp> command line.  Following options
+are supported:
+
+     <dl>
+<dt><samp><span class="option">DEBUGVERSION</span></samp><dd>If set to "1", the binaries will include debugging information
+(resulting in a much bigger size).
+
+     <br><dt><samp><span class="option">CURSESDIR</span></samp><dd>Enter the path to the pdcurses library here, in order to get a nicer
+console interface (see below).
+
+     <br><dt><samp><span class="option">MSVCLIB</span></samp><dd>Enter the filename of MS <samp><span class="file">lib.exe</span></samp> here, if you want to build
+libraries that can be imported from MS Visual C++.
+
+     <br><dt><samp><span class="option">WIN32_RELOCATABLE</span></samp><dd>If set to "1", Aspell will detect the prefix from the path where the
+DLL resides (see below for further details).
+
+     <br><dt><samp><span class="option">TARGET</span></samp><dd>Sets a prefix to be used for cross compilation (e.g. 
+<samp><span class="file">/usr/local/bin/i586-mingw32msvc-</span></samp> to cross compile from Linux). 
+</dl>
+
+   <p>There are also a MinGW compilers available for Cygwin and Linux, both
+versions are able to compile Aspell using the prebuilt
+<samp><span class="file">Makefile</span></samp>.  While the Cygwin port automatically detects the
+correct compiler, the Linux version depends on setting the
+<samp><span class="env">TARGET</span></samp> variable in the <samp><span class="file">Makefile</span></samp> (or environment) to the
+correct compiler prefix.
+
+   <p>Other compilers may work.  There is a patch for MS Visual C++ 6.0
+available at <a href="ftp://ftp.gnu.org/gnu/aspell">ftp://ftp.gnu.org/gnu/aspell</a>, but it needs a lot
+of changes to the Aspell sources.  It has also been reported that the
+Intel C++ compiler can be used for compilation.
+
+<h4 class="appendixsubsec">E.8.3 (PD)Curses</h4>
+
+<p>In order to get the nice full screen interface when spell checking
+files, a curses implementation that does not require Cygwin is
+required.  The PDCurses (<a href="http://pdcurses.sourceforge.net">http://pdcurses.sourceforge.net</a>)
+implementation is known to work, other implementations may work
+however they have not been tested.  See the previous section for
+information on specifying the location of the curses library and
+include file.
+
+   <p>Curses notes:
+
+     <ul>
+<li>PDcurses built with MinGW needs to be compiled with
+<samp><span class="option">-DPDC_STATIC_BUILD</span></samp> to avoid duplicate declaration of
+<samp><span class="file">DllMain</span></samp> when compiling <samp><span class="file">aspell.exe</span></samp>.
+
+     <li>The curses enabled version can cause trouble in some shells (MSys
+<samp><span class="command">rxvt</span></samp>, <samp><span class="command">emacs</span></samp>) and will produce errors like
+`<samp><span class="samp">initscr() LINES=1 COLS=1: too small</span></samp>'.  Use a non-curses version
+for those purposes. 
+</ul>
+
+   <p><a name="Win32_002dDirectories"></a>
+
+<h4 class="appendixsubsec">E.8.4 Directories</h4>
+
+<p>If Aspell is configured with <samp><span class="option">--enable-win32-relocatable</span></samp> or
+compiled with <samp><span class="option">WIN32_RELOCATABLE=1</span></samp> when using a Makefile, it
+can be run from any directory: it will set <samp><var>prefix</var></samp>
+according to its install location (assuming it resides in
+<samp><var>prefix</var><span class="file">\\bin</span></samp>).  Your personal wordlists will be saved in
+the <samp><var>prefix</var></samp> directory with their names changed from
+<samp><span class="file">.aspell.</span><var>lang</var><span class="file">.*</span></samp> to <samp><var>lang</var><span class="file">.*</span></samp> (you can override
+the path by setting the <samp><span class="env">HOME</span></samp> environment variable).
+
+<h4 class="appendixsubsec">E.8.5 Installer</h4>
+
+<p>The installer registers the DLLs as shared libraries, you should
+increase the reference counter to avoid the libraries being
+uninstalled if your application still depends on them (and decrease it
+again when uninstalling your program).  The reference counters are
+located under:
+<pre class="example">     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
+</pre>
+   <p>The install location and version numbers are stored under
+
+<pre class="example">     HKLM\SOFTWARE\Aspell
+</pre>
+   <h4 class="appendixsubsec">E.8.6 WIN32 consoles</h4>
+
+<p>The console uses a different encoding than GUI applications, changing
+this to to a Windows encoding (e.g.  1252) is not supported on
+Win9x/Me.  On WinNT (and later) those codepages can be set by first
+changing the console font to `<samp><span class="samp">lucida console</span></samp>', then changing the
+codepage using `<samp><span class="samp">chcp 1252</span></samp>'.
+
+   <p>Some alternative shells (e.g. MSys' <samp><span class="command">rxvt</span></samp> or Cygwin's
+<samp><span class="command">bash</span></samp>) do a codepage conversion (if correctly set up), so
+running Aspell inside those shells might be a workaround for Win9x.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Win32_002dDirectories.html b/manual/aspell.html/Win32_002dDirectories.html
new file mode 100644 (file)
index 0000000..a03a582
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=WIN32-Notes.html#Win32%2dDirectories">
diff --git a/manual/aspell.html/Word-skipping-by-context.html b/manual/aspell.html/Word-skipping-by-context.html
new file mode 100644 (file)
index 0000000..d2bc9bb
--- /dev/null
@@ -0,0 +1,95 @@
+<html lang="en">
+<head>
+<title>Word skipping by context - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Notes-on-Various-Items.html#Notes-on-Various-Items" title="Notes on Various Items">
+<link rel="next" href="Hidden-Markov-Model.html#Hidden-Markov-Model" title="Hidden Markov Model">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Word-skipping-by-context"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Hidden-Markov-Model.html#Hidden-Markov-Model">Hidden Markov Model</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>
+<hr>
+</div>
+
+<h4 class="appendixsubsec">D.3.1 Word skipping by context</h4>
+
+<p>This was posted on the Aspell mailing list on January 1, 1999:
+
+   <p>I had an idea on a great general way to determine if a word should be
+skipped.  Determine the words to skip based on the symbols that
+(almost) always surround the word.
+
+   <p>For example when asked to check the following C++ code:
+<pre class="example">     cout &lt;&lt; "My age is: " &lt;&lt; num &lt;&lt; endl;
+     cout &lt;&lt; "Next year I will be " &lt;&lt; num + 1 &lt;&lt; endl;
+</pre>
+   <p><code>cout</code>, <code>num</code>, and <code>endl</code> will all be skipped. 
+<code>cout</code> will be skipped because it is always preceded by a
+`<samp><span class="samp">&lt;&lt;</span></samp>'.  <code>num</code> will be skipped because it is always preceded
+by a `<samp><span class="samp">&lt;&lt;</span></samp>'.  And <code>endl</code> will be skipped because it is always
+between a `<samp><span class="samp">&lt;&lt;</span></samp>' and a `<samp><span class="samp">;</span></samp>'.
+
+   <p>Given the following HTML code.
+<pre class="example">     &lt;table width=50% cellspacing=0 cellpadding=1&gt;
+     &lt;tr&gt;&lt;td&gt;One&lt;td&gt;Two&lt;td&gt;Three
+     &lt;tr&gt;&lt;td&gt;1&lt;td&gt;2&lt;td&gt;3
+     &lt;/table&gt;
+     
+     &lt;table cellspacing=0 cellpadding=1&gt;
+     &lt;/table&gt;
+</pre>
+   <p><code>table</code>, <code>width</code> <code>cellspacing</code>, <code>cellpadding</code>,
+<code>tr</code>, <code>td</code> will all be skipped because they are always
+enclosed in `<samp><span class="samp">&lt;&gt;</span></samp>'.  Now of course <code>table</code> and
+<code>width</code> would be marked as correct anyway however there is no
+harm in skipping them.
+
+   <p>So I was wondering if anyone on this list has any experience in
+writing this sort of context recognition code or could give me some
+pointers in the right direction.
+
+   <p>This sort of word skipping will be very powerful if done right.  I
+imagine that it could replace specific spell checker modes for TeX,
+Nroff, SGML etc because it will automatically be able to figure out
+where it should skip words.  It could also probably do a very good job
+on programming languages code.
+
+   <p>If you are interested in helping me out with this or just have general
+comments about the idea please let me know.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Words-With-Symbols-in-Them.html b/manual/aspell.html/Words-With-Symbols-in-Them.html
new file mode 100644 (file)
index 0000000..e2df3a6
--- /dev/null
@@ -0,0 +1,109 @@
+<html lang="en">
+<head>
+<title>Words With Symbols in Them - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Language-Related-Issues.html#Language-Related-Issues" title="Language Related Issues">
+<link rel="prev" href="Compound-Words.html#Compound-Words" title="Compound Words">
+<link rel="next" href="Unicode-Normalization.html#Unicode-Normalization" title="Unicode Normalization">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Words-With-Symbols-in-Them"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Unicode-Normalization.html#Unicode-Normalization">Unicode Normalization</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Compound-Words.html#Compound-Words">Compound Words</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<hr>
+</div>
+
+<h3 class="appendixsec">C.2 Words With Spaces or Other Symbols in Them</h3>
+
+<p>Many languages, including English, have words with non-letter symbols in
+them.  For example the apostrophe.  These symbols generally appear in
+the middle of a word, but they can also appear at the end, such as in an
+abbreviation.  If a symbol can <em>only</em> appear as part of a word then
+Aspell can treat it as if it were a letter.
+
+   <p>However, the problem is most of these symbols have other uses.  For
+example, the apostrophe is often used as a single quote and the
+abbreviations marker is also used as a period.  Thus, Aspell cannot
+blindly treat them as if they were letters.
+
+   <p>Aspell currently handles the case where the symbol can only appear in
+the middle of the word fairly well.  It simply assumes that if there is
+a letter both before and after the symbol than it is part of the word. 
+This works most of the time but it is not fool proof.  For example,
+suppose the user forgot to leave a space after the period:
+
+<pre class="display">       <small class="dots">...</small> and the dog went up the tree.Then the cat <small class="dots">...</small>
+</pre>
+   <p class="noindent">Aspell would think &ldquo;tree.Then&rdquo; is one word.  A better solution
+might be to then try to check &ldquo;tree&rdquo; and &ldquo;Then&rdquo; separately. 
+But what if one of them is not in the dictionary?  Should Aspell assume
+&ldquo;tree.Then&rdquo; is one word?
+
+   <p>The case where the symbol can appear at the beginning or end of the word
+is more difficult to deal with.  The symbol may or may not actually be
+part of the word.  Aspell currently handles this case by first trying to
+spell check the word with the symbol and if that fails, try it without. 
+The problem is, if the word is misspelled, should Aspell assume the
+symbol belongs with the word or not?  Currently Aspell assumes it does,
+which is not always the correct thing to do.
+
+   <p>Numbers in words present a different challenge to Aspell.  If Aspell
+treats numbers as letters then every possible number a user might write
+in a document must be specified in the dictionary.  This could easily
+be solved by having special code to assume all numbers are correctly
+spelled.  Yet, what about something like &ldquo;4th&rdquo;.  Since the &ldquo;th&rdquo;
+suffix can appear after any number we are left with the same
+problem.  The solution would be to have a special symbol for &ldquo;any
+number&rdquo;.
+
+   <p>Words with spaces in them, such as foreign phrases, are even more
+trouble to deal with.  The basic problem is that when tokenizing a
+string there is no good way to keep phrases together. One solution is to
+use trial and error.  If a word is not in the dictionary try grouping it
+with the previous or next word and see if the combined word is in the
+dictionary.  But what if the combined word is not, should the misspelled
+word be grouped when looking for suggestions?  One solution is to also
+store each part of the phrase in the dictionary, but tag it as part of a
+phrase and not an independent word.
+
+   <p>To further complicate things, most applications that use spell checkers
+are accustom to parsing the document themselves and sending it to the
+spell checker a word at a time.  In order to support words with spaces in
+them a more complicated interface will be required.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Working-With-Affix-Info-in-Word-Lists.html b/manual/aspell.html/Working-With-Affix-Info-in-Word-Lists.html
new file mode 100644 (file)
index 0000000..07e9afd
--- /dev/null
@@ -0,0 +1,133 @@
+<html lang="en">
+<head>
+<title>Working With Affix Info in Word Lists - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="up" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="prev" href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List" title="Creating an Individual Word List">
+<link rel="next" href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries" title="Format of the Personal and Replacement Dictionaries">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Working-With-Affix-Info-in-Word-Lists"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">Format of the Personal and Replacement Dictionaries</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">Creating an Individual Word List</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<hr>
+</div>
+
+<h3 class="section">5.6 Working With Affix Info in Word Lists</h3>
+
+<h4 class="subsection">5.6.1 The Munch Command</h4>
+
+<p>The <samp><span class="command">munch</span></samp> command takes a list of words from standard input
+and outputs a list of possible root words and affixes.  The root may,
+however, be invalid as it does not check them against the existing
+dictionary.  For example the command:
+<pre class="example">     echo brother | aspell -l en munch
+<br>produces<br>
+     brother broth/R brothe/R
+</pre>
+   <h4 class="subsection">5.6.2 The Expand Command</h4>
+
+<p>The <samp><span class="command">expand</span></samp> command is the reverse of <samp><span class="command">munch</span></samp>, it
+expands affix flags to produce a list of words.  For example:
+<pre class="example">     echo both/R | aspell -l en expand
+<br>produces<br>
+     both bother
+</pre>
+   <p>The formal usage is:
+<pre class="example">     aspell expand [<var>level</var>] [<var>limit</var>]
+</pre>
+   <p class="noindent">Where <var>level</var> is the expansion level.  Valid values are between 1
+and 3.  Level 1 is the default if not otherwise specified.  Level 2
+causes the original root/affix to be included, for example:
+<pre class="example">     both/R both bother
+</pre>
+   <p class="noindent">Level 3 causes multiple lines to be printed, one for each generated
+word, with the original root/affix combination followed by the word it
+creates:
+<pre class="example">     both/R both
+     both/R bother
+</pre>
+   <p class="noindent">Levels larger than 3 may also be supported, but should not be used as
+they may eventually be removed.
+
+   <p>If a <var>limit</var> parameter is given then only expansions which affect
+the first <var>limit</var> letters will be expanded.  If a base word is not
+completely expanded for a given affix flag that flag will be left on
+the word.  Note that prefixes are always expanded.
+
+<h4 class="subsection">5.6.3 The Munch-list Command</h4>
+
+<p>The <samp><span class="command">munch-list</span></samp> command will reduce the size of word list via
+affix compression.  It will reduce a list of words to a minimal (or
+close to it) set of roots and affixes that will match the same list of
+words.  The list of words is read from standard input and the result,
+the &ldquo;munched&rdquo; list, is written to standard out.  It's usage is:
+
+<pre class="example">     aspell munch-list [keep] [single|multi] [simple] &lt; <var>infile</var> &gt; <var>outfile</var>
+</pre>
+   <p class="noindent">where <samp><span class="option">simple</span></samp>, <samp><span class="option">single</span></samp>, <samp><span class="option">multi</span></samp>, and
+<samp><span class="option">keep</span></samp> are literal values.
+
+   <p>The default algorithm used should give near optimum results.  In some
+cases the set of words returned is, provably, the minimum number
+possible.  In the typical case the number of words returned is within
+1% of the optimum number.
+
+   <p>By default Aspell will remove redundant affix flags.  The <samp><span class="option">keep</span></samp>
+flag will avoid removing them, which can be useful if you want to
+include all possible expansions for each base word.
+
+   <p>When cross products are involved it may be beneficial to list a base
+word more than once.  Unfortunately, the current version of Aspell can
+not correctly handle multiple base words in a dictionary.  Therefore,
+the current default behavior is to only include the one with the most
+expansions.  All of them can be included via the <samp><span class="option">multi</span></samp> flag. 
+Once Aspell is able to handle multiple base words the default will be
+to include them all.  The <samp><span class="option">single</span></samp> flag can be used to only
+include one of them.
+
+   <p>The <samp><span class="option">simple</span></samp> flag will select an alternate faster algorithm. 
+This algorithm is very similar to the <samp><span class="command">munch</span></samp> command
+distributed with MySpell (the Open Office spell checker), however, it
+doesn't give nearly as good results.  It does okay for the English
+word list but not for some other languages such as German; the normal
+algorithm reduced a list of 312,002 German words to 79,420 base words
+while the simple algorithm only reduced it to 115,927 words.  This
+algorithm may disappear in a future version of Aspell.
+
+   </body></html>
+
diff --git a/manual/aspell.html/Working-With-Dictionaries.html b/manual/aspell.html/Working-With-Dictionaries.html
new file mode 100644 (file)
index 0000000..d1939c3
--- /dev/null
@@ -0,0 +1,65 @@
+<html lang="en">
+<head>
+<title>Working With Dictionaries - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Customizing-Aspell.html#Customizing-Aspell" title="Customizing Aspell">
+<link rel="next" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell" title="Writing programs to use Aspell">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Working-With-Dictionaries"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">5 Working With Dictionaries</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="Using-aspell_002dimport.html#Using-aspell_002dimport">Using aspell-import</a>
+<li><a accesskey="2" href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>
+<li><a accesskey="3" href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries">Listing Available Dictionaries</a>
+<li><a accesskey="4" href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List">Dumping the Contents of the Word List</a>
+<li><a accesskey="5" href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">Creating an Individual Word List</a>
+<li><a accesskey="6" href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">Working With Affix Info in Word Lists</a>
+<li><a accesskey="7" href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">Format of the Personal and Replacement Dictionaries</a>
+<li><a accesskey="8" href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries">Using Multi Dictionaries</a>
+<li><a accesskey="9" href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>
+<li><a href="AWLI-files.html#AWLI-files">AWLI files</a>
+</ul>
+
+</body></html>
+
diff --git a/manual/aspell.html/Writing-programs-to-use-Aspell.html b/manual/aspell.html/Writing-programs-to-use-Aspell.html
new file mode 100644 (file)
index 0000000..8e056ff
--- /dev/null
@@ -0,0 +1,63 @@
+<html lang="en">
+<head>
+<title>Writing programs to use Aspell - GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="index.html#Top">
+<link rel="prev" href="Working-With-Dictionaries.html#Working-With-Dictionaries" title="Working With Dictionaries">
+<link rel="next" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages" title="Adding Support For Other Languages">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000--2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<div class="node">
+<p>
+<a name="Writing-programs-to-use-Aspell"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
+<hr>
+</div>
+
+<h2 class="chapter">6 Writing programs to use Aspell</h2>
+
+<p>There are two main ways to use Aspell from within your application. 
+Through the external C API or through a pipe.  The internal
+Aspell API can be used directly but that is not recommended as the
+actual Aspell API is constantly changing.
+
+<ul class="menu">
+<li><a accesskey="1" href="Through-the-C-API.html#Through-the-C-API">Through the C API</a>
+<li><a accesskey="2" href="Through-A-Pipe.html#Through-A-Pipe">Through A Pipe</a>
+<li><a accesskey="3" href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">Notes on Storing Replacement Pairs</a>
+</ul>
+
+   </body></html>
+
diff --git a/manual/aspell.html/data_002dencoding.html b/manual/aspell.html/data_002dencoding.html
new file mode 100644 (file)
index 0000000..d7f9b15
--- /dev/null
@@ -0,0 +1 @@
+<meta http-equiv="refresh" content="0; url=The-Language-Data-File.html#data%2dencoding">
diff --git a/manual/aspell.html/index.html b/manual/aspell.html/index.html
new file mode 100644 (file)
index 0000000..c6c1bcf
--- /dev/null
@@ -0,0 +1,480 @@
+<html lang="en">
+<head>
+<title>GNU Aspell 0.60.6.1</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="description" content="Aspell 0.60.6.1 spell checker user's manual.">
+<meta name="generator" content="makeinfo 4.8">
+<link title="Top" rel="start" href="#Top">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright (C) 2000-2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+--></style>
+</head>
+<body>
+<h1 class="settitle">GNU Aspell 0.60.6.1</h1>
+   <div class="contents">
+<h2>Table of Contents</h2>
+<ul>
+<li><a name="toc_Top" href="index.html#Top">GNU Aspell 0.60.6.1</a>
+<li><a name="toc_Introduction" href="Introduction.html#Introduction">1 Introduction</a>
+<ul>
+<li><a href="Introduction.html#Introduction">1.1 Comparison to other spell checker engines</a>
+<ul>
+<li><a href="Introduction.html#Introduction">1.1.1 Comparison to Ispell</a>
+<ul>
+<li><a href="Introduction.html#Introduction">1.1.1.1 Features that only Aspell has</a>
+<li><a href="Introduction.html#Introduction">1.1.1.2 Things that, currently, only Ispell has</a>
+</li></ul>
+</li></ul>
+</li></ul>
+<li><a name="toc_Support" href="Support.html#Support">2 Support</a>
+<li><a name="toc_Basic-Usage" href="Basic-Usage.html#Basic-Usage">3 Basic Usage</a>
+<ul>
+<li><a href="Spellchecking-Individual-Files.html#Spellchecking-Individual-Files">3.1 Spellchecking Individual Files</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2 Using Aspell as a Replacement for Ispell</a>
+<ul>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.1 As a Drop In Replacement</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2 Differences From Ispell</a>
+<ul>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.1 Functionality of the Ispell Compatibility Script</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.2 Recognized Options</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.3 Check Mode Compatibility</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.4 Pipe Mode Compatibility</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.5 Other Differences</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">3.2.2.6 Missing Functionally</a>
+</li></ul>
+</li></ul>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">3.3 Using Aspell with other Applications</a>
+<ul>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">3.3.1 With Emacs and XEmacs</a>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">3.3.2 With LyX</a>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">3.3.3 With VIM</a>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">3.3.4 With Pine</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Customizing-Aspell" href="Customizing-Aspell.html#Customizing-Aspell">4 Customizing Aspell</a>
+<ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1 Specifying Options</a>
+<ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.1 At the Command Line</a>
+<ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.1.1 Value options</a>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.1.2 Boolean options</a>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.1.3 List options</a>
+</li></ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.2 Via a Configuration File</a>
+<ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.2.1 Value options</a>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.2.2 Boolean options</a>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.2.3 List options</a>
+</li></ul>
+<li><a href="Specifying-Options.html#Specifying-Options">4.1.3 Setting Options via an Environment Variable</a>
+</li></ul>
+<li><a href="The-Options.html#The-Options">4.2 The Options</a>
+<ul>
+<li><a href="The-Options.html#The-Options">4.2.1 Dictionary Options</a>
+<li><a href="The-Options.html#The-Options">4.2.2 Encoding Options</a>
+<li><a href="The-Options.html#The-Options">4.2.3 Checker Options</a>
+<li><a href="The-Options.html#The-Options">4.2.4 Filter Options</a>
+<ul>
+<li><a href="The-Options.html#The-Options">4.2.4.1 email</a>
+<li><a href="The-Options.html#The-Options">4.2.4.2 html</a>
+<li><a href="The-Options.html#The-Options">4.2.4.3 sgml</a>
+<li><a href="The-Options.html#The-Options">4.2.4.4 tex/latex</a>
+<li><a href="The-Options.html#The-Options">4.2.4.5 texinfo</a>
+<li><a href="The-Options.html#The-Options">4.2.4.6 context</a>
+</li></ul>
+<li><a href="The-Options.html#The-Options">4.2.5 Run-together Word Options</a>
+<li><a href="The-Options.html#The-Options">4.2.6 Miscellaneous Options</a>
+<li><a href="The-Options.html#The-Options">4.2.7 Aspell Utility Options</a>
+</li></ul>
+<li><a href="Dumping-Configuration-Values.html#Dumping-Configuration-Values">4.3 Dumping Configuration Values</a>
+<li><a href="Notes-on-Various-Options.html#Notes-on-Various-Options">4.4 Notes on Various Options</a>
+<ul>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1 Notes on Various Filters and Filter Modes</a>
+<ul>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.1 None Filter Mode</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.2 URL Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.3 Email Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.4 SGML Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.5 HTML Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.6 TeX/LaTeX Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.7 Texinfo Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.8 Nroff Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.9 Context Filter</a>
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">4.4.1.10 Ccpp Filter Mode</a>
+</li></ul>
+<li><a href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option">4.4.2 Notes on the Prefix Option</a>
+<li><a href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">4.4.3 Notes on Typo-Analysis and the Keyboard Definition File</a>
+<li><a href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">4.4.4 Notes on the Different Suggestion Modes</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Working-With-Dictionaries" href="Working-With-Dictionaries.html#Working-With-Dictionaries">5 Working With Dictionaries</a>
+<ul>
+<li><a href="Using-aspell_002dimport.html#Using-aspell_002dimport">5.1 Using <samp><span class="command">aspell-import</span></samp></a>
+<li><a href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">5.2 How Aspell Selects an Appropriate Dictionary</a>
+<li><a href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries">5.3 Listing Available Dictionaries</a>
+<li><a href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List">5.4 Dumping the Contents of the Word List</a>
+<li><a href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">5.5 Creating an Individual Word List</a>
+<ul>
+<li><a href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">5.5.1 Format of the Replacement Word List</a>
+</li></ul>
+<li><a href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">5.6 Working With Affix Info in Word Lists</a>
+<ul>
+<li><a href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">5.6.1 The Munch Command</a>
+<li><a href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">5.6.2 The Expand Command</a>
+<li><a href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">5.6.3 The Munch-list Command</a>
+</li></ul>
+<li><a href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">5.7 Format of the Personal and Replacement Dictionaries</a>
+<ul>
+<li><a href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">5.7.1 Format of the Personal Dictionary</a>
+<li><a href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">5.7.2 Format of the Personal Replacement Dictionary</a>
+</li></ul>
+<li><a href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries">5.8 Using Multi Dictionaries</a>
+<li><a href="Dictionary-Naming.html#Dictionary-Naming">5.9 Dictionary Naming</a>
+<li><a href="AWLI-files.html#AWLI-files">5.10 AWLI files</a>
+</li></ul>
+<li><a name="toc_Writing-programs-to-use-Aspell" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">6 Writing programs to use Aspell</a>
+<ul>
+<li><a href="Through-the-C-API.html#Through-the-C-API">6.1 Through the C API</a>
+<ul>
+<li><a href="Through-the-C-API.html#Through-the-C-API">6.1.1 Usage</a>
+<li><a href="Through-the-C-API.html#Through-the-C-API">6.1.2 API Reference</a>
+<li><a href="Through-the-C-API.html#Through-the-C-API">6.1.3 Examples</a>
+<li><a href="Through-the-C-API.html#Through-the-C-API">6.1.4 Notes About Thread Safety</a>
+</li></ul>
+<li><a href="Through-A-Pipe.html#Through-A-Pipe">6.2 Through A Pipe</a>
+<ul>
+<li><a href="Through-A-Pipe.html#Through-A-Pipe">6.2.1 Format of the Data Stream</a>
+</li></ul>
+<li><a href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">6.3 Notes on Storing Replacement Pairs</a>
+</li></ul>
+<li><a name="toc_Adding-Support-For-Other-Languages" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">7 Adding Support For Other Languages</a>
+<ul>
+<li><a href="The-Language-Data-File.html#The-Language-Data-File">7.1 The Language Data File</a>
+<li><a href="Compiling-the-Word-List.html#Compiling-the-Word-List">7.2 Compiling the Word List</a>
+<li><a href="Phonetic-Code.html#Phonetic-Code">7.3 Phonetic Code</a>
+<ul>
+<li><a href="Phonetic-Code.html#Phonetic-Code">7.3.1 Syntax of the transformation array</a>
+<li><a href="Phonetic-Code.html#Phonetic-Code">7.3.2 How do I start finally?</a>
+<ul>
+<li><a href="Phonetic-Code.html#Phonetic-Code">7.3.2.1 Things that come in handy</a>
+<li><a href="Phonetic-Code.html#Phonetic-Code">7.3.2.2 What the phonetic code should do</a>
+</li></ul>
+</li></ul>
+<li><a href="The-Simple-Soundslike.html#The-Simple-Soundslike">7.4 The Simple Soundslike</a>
+<li><a href="Replacement-Tables.html#Replacement-Tables">7.5 Replacement Tables</a>
+<li><a href="Affix-Compression.html#Affix-Compression">7.6 Affix Compression</a>
+<ul>
+<li><a href="Affix-Compression.html#Affix-Compression">7.6.1 Format of the Affix File</a>
+<li><a href="Affix-Compression.html#Affix-Compression">7.6.2 When Compared With Ispell</a>
+<li><a href="Affix-Compression.html#Affix-Compression">7.6.3 Specifying Affix Flags</a>
+</li></ul>
+<li><a href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">7.7 Controlling the Behavior of Run-together Words</a>
+<li><a href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">7.8 Creating A New Character Set</a>
+<li><a href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package">7.9 Creating An Official Dictionary Package</a>
+</li></ul>
+<li><a name="toc_Implementation-Notes" href="Implementation-Notes.html#Implementation-Notes">Appendix A Implementation Notes</a>
+<ul>
+<li><a href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">A.1 Aspell Suggestion Strategy</a>
+<li><a href="Notes-on-8_002dbit-Characters.html#Notes-on-8_002dbit-Characters">A.2 Notes on 8-bit Characters</a>
+</li></ul>
+<li><a name="toc_Languages-Which-Aspell-can-Support" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Appendix B Languages Which Aspell can Support</a>
+<ul>
+<li><a href="Supported.html#Supported">B.1 Supported</a>
+<ul>
+<li><a href="Supported.html#Supported">B.1.1 Notes on Latin Languages</a>
+<li><a href="Supported.html#Supported">B.1.2 Syllabic</a>
+<ul>
+<li><a href="Supported.html#Supported">B.1.2.1 The Ethiopic Syllabary</a>
+<li><a href="Supported.html#Supported">B.1.2.2 The Yi Syllabary</a>
+<li><a href="Supported.html#Supported">B.1.2.3 The Ojibwe Syllabary</a>
+</li></ul>
+</li></ul>
+<li><a href="Unsupported.html#Unsupported">B.2 Unsupported</a>
+<ul>
+<li><a href="Unsupported.html#Unsupported">B.2.1 The Thai, Khmer, and Lao Scripts</a>
+<li><a href="Unsupported.html#Unsupported">B.2.2 Languages which use H&agrave;nzi Characters</a>
+<li><a href="Unsupported.html#Unsupported">B.2.3 Japanese</a>
+<li><a href="Unsupported.html#Unsupported">B.2.4 Hangul</a>
+</li></ul>
+<li><a href="Multiple-Scripts.html#Multiple-Scripts">B.3 Languages Written in Multiple Scripts</a>
+<li><a href="Planned-Dictionaries.html#Planned-Dictionaries">B.4 Notes on Planned Dictionaries</a>
+<li><a href="References.html#References">B.5 References</a>
+</li></ul>
+<li><a name="toc_Language-Related-Issues" href="Language-Related-Issues.html#Language-Related-Issues">Appendix C Language Related Issues</a>
+<ul>
+<li><a href="Compound-Words.html#Compound-Words">C.1 Compound Words</a>
+<ul>
+<li><a href="Compound-Words.html#Compound-Words">C.1.1 To Implement</a>
+</li></ul>
+<li><a href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">C.2 Words With Spaces or Other Symbols in Them</a>
+<li><a href="Unicode-Normalization.html#Unicode-Normalization">C.3 Unicode Normalization</a>
+<li><a href="German-Sharp-S.html#German-Sharp-S">C.4 German Sharp S</a>
+<li><a href="Context-Sensitive-Spelling.html#Context-Sensitive-Spelling">C.5 Context Sensitive Spelling</a>
+</li></ul>
+<li><a name="toc_To-Do" href="To-Do.html#To-Do">Appendix D To Do</a>
+<ul>
+<li><a href="Important-Items.html#Important-Items">D.1 Important Items</a>
+<ul>
+<li><a href="Important-Items.html#Important-Items">D.1.1 Things that need to be done</a>
+<li><a href="Important-Items.html#Important-Items">D.1.2 Things I would like to get done</a>
+</li></ul>
+<li><a href="Other-Items.html#Other-Items">D.2 Other Items</a>
+<li><a href="Notes-on-Various-Items.html#Notes-on-Various-Items">D.3 Notes on Various Items</a>
+<ul>
+<li><a href="Word-skipping-by-context.html#Word-skipping-by-context">D.3.1 Word skipping by context</a>
+<li><a href="Hidden-Markov-Model.html#Hidden-Markov-Model">D.3.2 Hidden Markov Model</a>
+<li><a href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary">D.3.3 Email the Personal Dictionary</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Installing" href="Installing.html#Installing">Appendix E Installing</a>
+<ul>
+<li><a href="Generic-Install-Instructions.html#Generic-Install-Instructions">E.1 Generic Install Instructions</a>
+<li><a href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022">E.2 HTML Manuals and <samp><span class="command">make clean</span></samp></a>
+<li><a href="Curses-Notes.html#Curses-Notes">E.3 Curses Notes</a>
+<ul>
+<li><a href="Curses-Notes.html#Curses-Notes">E.3.1 Unicode Support</a>
+</li></ul>
+<li><a href="Loadable-Filter-Notes.html#Loadable-Filter-Notes">E.4 Loadable Filter Notes</a>
+<li><a href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">E.5 Upgrading from Aspell 0.50</a>
+<ul>
+<li><a href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">E.5.1 Binary Compatibility</a>
+</li></ul>
+<li><a href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12">E.6 Upgrading from Aspell .33/Pspell .12</a>
+<li><a href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot">E.7 Upgrading from a Pre-0.50 snapshot</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8 WIN32 Notes</a>
+<ul>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.1 Getting the WIN32 version</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.2 Building the WIN32 version</a>
+<ul>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.2.1 Building Aspell using Cygwin</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.2.2 Building Aspell using MinGW</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.2.3 Building Aspell without using Cygwin or MSYS</a>
+</li></ul>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.3 (PD)Curses</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.4 Directories</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.5 Installer</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">E.8.6 WIN32 consoles</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_ChangeLog" href="ChangeLog.html#ChangeLog">Appendix F ChangeLog</a>
+<li><a name="toc_Authors" href="Authors.html#Authors">Appendix G Authors</a>
+<li><a name="toc_Copying" href="Copying.html#Copying">Appendix H Copying</a>
+<ul>
+<li><a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">H.1 GNU Free Documentation License</a>
+<ul>
+<li><a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">H.1.1 ADDENDUM: How to use this License for your documents</a>
+</li></ul>
+<li><a href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">H.2 GNU Lesser General Public License</a>
+<ul>
+<li><a href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">H.2.1 Preamble</a>
+<li><a href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">H.2.2 How to Apply These Terms to Your New Libraries</a>
+</li></ul>
+</li></ul>
+</li></ul>
+</div>
+
+
+
+<div class="node">
+<p>
+<a name="Top"></a>
+Next:&nbsp;<a rel="next" accesskey="n" href="Introduction.html#Introduction">Introduction</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="../index.html#dir">(dir)</a>
+<hr>
+</div>
+
+<h2 class="unnumbered">GNU Aspell 0.60.6.1</h2>
+
+<p>This is the user's manual for Aspell
+
+   <p>GNU Aspell is a spell checker designed to eventually replace Ispell. 
+It can either be used as a library or as an independent spell checker.
+
+<ul class="menu">
+<li><a accesskey="1" href="Introduction.html#Introduction">Introduction</a>
+<li><a accesskey="2" href="Support.html#Support">Support</a>
+<li><a accesskey="3" href="Basic-Usage.html#Basic-Usage">Basic Usage</a>
+<li><a accesskey="4" href="Customizing-Aspell.html#Customizing-Aspell">Customizing Aspell</a>
+<li><a accesskey="5" href="Working-With-Dictionaries.html#Working-With-Dictionaries">Working With Dictionaries</a>
+<li><a accesskey="6" href="Writing-programs-to-use-Aspell.html#Writing-programs-to-use-Aspell">Writing programs to use Aspell</a>
+<li><a accesskey="7" href="Adding-Support-For-Other-Languages.html#Adding-Support-For-Other-Languages">Adding Support For Other Languages</a>
+<li><a accesskey="8" href="Implementation-Notes.html#Implementation-Notes">Implementation Notes</a>
+<li><a accesskey="9" href="Languages-Which-Aspell-can-Support.html#Languages-Which-Aspell-can-Support">Languages Which Aspell can Support</a>
+<li><a href="Language-Related-Issues.html#Language-Related-Issues">Language Related Issues</a>
+<li><a href="To-Do.html#To-Do">To Do</a>
+<li><a href="Installing.html#Installing">Installing</a>
+<li><a href="ChangeLog.html#ChangeLog">ChangeLog</a>
+<li><a href="Authors.html#Authors">Authors</a>
+<li><a href="Copying.html#Copying">Copying</a>
+
+</li></ul>
+<p>--- The Detailed Node Listing ---
+
+<p>Basic Usage
+
+</p>
+<ul class="menu">
+<li><a href="Spellchecking-Individual-Files.html#Spellchecking-Individual-Files">Spellchecking Individual Files</a>
+<li><a href="Using-Aspell-as-a-Replacement-for-Ispell.html#Using-Aspell-as-a-Replacement-for-Ispell">Using Aspell as a Replacement for Ispell</a>
+<li><a href="Using-Aspell-with-other-Applications.html#Using-Aspell-with-other-Applications">Using Aspell with other Applications</a>
+
+</li></ul>
+<p>Customizing Aspell
+
+</p>
+<ul class="menu">
+<li><a href="Specifying-Options.html#Specifying-Options">Specifying Options</a>
+<li><a href="The-Options.html#The-Options">The Options</a>
+<li><a href="Dumping-Configuration-Values.html#Dumping-Configuration-Values">Dumping Configuration Values</a>
+<li><a href="Notes-on-Various-Options.html#Notes-on-Various-Options">Notes on Various Options</a>
+
+</li></ul>
+<p>Notes on Various Options
+
+</p>
+<ul class="menu">
+<li><a href="Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes">Notes on Various Filters and Filter Modes</a>
+<li><a href="Notes-on-the-Prefix-Option.html#Notes-on-the-Prefix-Option">Notes on the Prefix Option</a>
+<li><a href="Notes-on-Typo_002dAnalysis.html#Notes-on-Typo_002dAnalysis">Notes on Typo-Analysis</a>
+<li><a href="Notes-on-the-Different-Suggestion-Modes.html#Notes-on-the-Different-Suggestion-Modes">Notes on the Different Suggestion Modes</a>
+
+</li></ul>
+<p>Working With Dictionaries
+
+</p>
+<ul class="menu">
+<li><a href="Using-aspell_002dimport.html#Using-aspell_002dimport">Using aspell-import</a>
+<li><a href="How-Aspell-Selects-an-Appropriate-Dictionary.html#How-Aspell-Selects-an-Appropriate-Dictionary">How Aspell Selects an Appropriate Dictionary</a>
+<li><a href="Listing-Available-Dictionaries.html#Listing-Available-Dictionaries">Listing Available Dictionaries</a>
+<li><a href="Dumping-the-Contents-of-the-Word-List.html#Dumping-the-Contents-of-the-Word-List">Dumping the Contents of the Word List</a>
+<li><a href="Creating-an-Individual-Word-List.html#Creating-an-Individual-Word-List">Creating an Individual Word List</a>
+<li><a href="Working-With-Affix-Info-in-Word-Lists.html#Working-With-Affix-Info-in-Word-Lists">Working With Affix Info in Word Lists</a>
+<li><a href="Format-of-the-Personal-and-Replacement-Dictionaries.html#Format-of-the-Personal-and-Replacement-Dictionaries">Format of the Personal and Replacement Dictionaries</a>
+<li><a href="Using-Multi-Dictionaries.html#Using-Multi-Dictionaries">Using Multi Dictionaries</a>
+<li><a href="Dictionary-Naming.html#Dictionary-Naming">Dictionary Naming</a>
+<li><a href="AWLI-files.html#AWLI-files">AWLI files</a>
+
+</li></ul>
+<p>Writing programs to use Aspell
+
+</p>
+<ul class="menu">
+<li><a href="Through-the-C-API.html#Through-the-C-API">Through the C API</a>
+<li><a href="Through-A-Pipe.html#Through-A-Pipe">Through A Pipe</a>
+<li><a href="Notes-on-Storing-Replacement-Pairs.html#Notes-on-Storing-Replacement-Pairs">Notes on Storing Replacement Pairs</a>
+
+</li></ul>
+<p>Adding Support For Other Languages
+
+</p>
+<ul class="menu">
+<li><a href="The-Language-Data-File.html#The-Language-Data-File">The Language Data File</a>
+<li><a href="Compiling-the-Word-List.html#Compiling-the-Word-List">Compiling the Word List</a>
+<li><a href="Phonetic-Code.html#Phonetic-Code">Phonetic Code</a>
+<li><a href="The-Simple-Soundslike.html#The-Simple-Soundslike">The Simple Soundslike</a>
+<li><a href="Replacement-Tables.html#Replacement-Tables">Replacement Tables</a>
+<li><a href="Affix-Compression.html#Affix-Compression">Affix Compression</a>
+<li><a href="Controlling-the-Behavior-of-Run_002dtogether-Words.html#Controlling-the-Behavior-of-Run_002dtogether-Words">Controlling the Behavior of Run-together Words</a>
+<li><a href="Creating-A-New-Character-Set.html#Creating-A-New-Character-Set">Creating A New Character Set</a>
+<li><a href="Creating-An-Official-Dictionary-Package.html#Creating-An-Official-Dictionary-Package">Creating An Official Dictionary Package</a>
+
+</li></ul>
+<p>Implementation Notes
+
+</p>
+<ul class="menu">
+<li><a href="Aspell-Suggestion-Strategy.html#Aspell-Suggestion-Strategy">Aspell Suggestion Strategy</a>
+<li><a href="Notes-on-8_002dbit-Characters.html#Notes-on-8_002dbit-Characters">Notes on 8-bit Characters</a>
+
+</li></ul>
+<p>Languages Which Aspell can Support
+
+</p>
+<ul class="menu">
+<li><a href="Supported.html#Supported">Supported</a>
+<li><a href="Unsupported.html#Unsupported">Unsupported</a>
+<li><a href="Multiple-Scripts.html#Multiple-Scripts">Multiple Scripts</a>
+<li><a href="Planned-Dictionaries.html#Planned-Dictionaries">Planned Dictionaries</a>
+<li><a href="References.html#References">References</a>
+
+</li></ul>
+<p>Language Related Issues
+
+</p>
+<ul class="menu">
+<li><a href="Compound-Words.html#Compound-Words">Compound Words</a>
+<li><a href="Words-With-Symbols-in-Them.html#Words-With-Symbols-in-Them">Words With Symbols in Them</a>
+<li><a href="Unicode-Normalization.html#Unicode-Normalization">Unicode Normalization</a>
+<li><a href="German-Sharp-S.html#German-Sharp-S">German Sharp S</a>
+<li><a href="Context-Sensitive-Spelling.html#Context-Sensitive-Spelling">Context Sensitive Spelling</a>
+
+</li></ul>
+<p>To Do
+
+</p>
+<ul class="menu">
+<li><a href="Important-Items.html#Important-Items">Important Items</a>
+<li><a href="Other-Items.html#Other-Items">Other Items</a>
+<li><a href="Notes-on-Various-Items.html#Notes-on-Various-Items">Notes on Various Items</a>
+
+</li></ul>
+<p>Notes on Various Items
+
+</p>
+<ul class="menu">
+<li><a href="Word-skipping-by-context.html#Word-skipping-by-context">Word skipping by context</a>
+<li><a href="Hidden-Markov-Model.html#Hidden-Markov-Model">Hidden Markov Model</a>
+<li><a href="Email-the-Personal-Dictionary.html#Email-the-Personal-Dictionary">Email the Personal Dictionary</a>
+
+</li></ul>
+<p>Installing
+
+</p>
+<ul class="menu">
+<li><a href="Generic-Install-Instructions.html#Generic-Install-Instructions">Generic Install Instructions</a>
+<li><a href="HTML-Manuals-and-_0022make-clean_0022.html#HTML-Manuals-and-_0022make-clean_0022">HTML Manuals and "make clean"</a>
+<li><a href="Curses-Notes.html#Curses-Notes">Curses Notes</a>
+<li><a href="Loadable-Filter-Notes.html#Loadable-Filter-Notes">Loadable Filter Notes</a>
+<li><a href="Upgrading-from-Aspell-0_002e50.html#Upgrading-from-Aspell-0_002e50">Upgrading from Aspell 0.50</a>
+<li><a href="Upgrading-from-Aspell-_002e33_002fPspell-_002e12.html#Upgrading-from-Aspell-_002e33_002fPspell-_002e12">Upgrading from Aspell .33/Pspell .12</a>
+<li><a href="Upgrading-from-a-Pre_002d0_002e50-snapshot.html#Upgrading-from-a-Pre_002d0_002e50-snapshot">Upgrading from a Pre-0.50 snapshot</a>
+<li><a href="WIN32-Notes.html#WIN32-Notes">WIN32 Notes</a>
+
+</li></ul>
+<p>Copying
+
+</p>
+<ul class="menu">
+<li><a href="GNU-Free-Documentation-License.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>
+<li><a href="GNU-Lesser-General-Public-License.html#GNU-Lesser-General-Public-License">GNU Lesser General Public License</a>
+
+   </ul>
+
+   </body></html>
+
diff --git a/manual/aspell.info b/manual/aspell.info
new file mode 100644 (file)
index 0000000..c3f3fa4
--- /dev/null
@@ -0,0 +1,6981 @@
+This is aspell.info, produced by makeinfo version 4.8 from aspell.texi.
+
+   This is the user's manual for Aspell
+
+   GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+   Copyright (C) 2000-2011 Kevin Atkinson.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, no Front-Cover Texts and
+     no Back-Cover Texts.  A copy of the license is included in the
+     section entitled "GNU Free Documentation License".
+
+INFO-DIR-SECTION GNU Packages
+START-INFO-DIR-ENTRY
+* Aspell: (aspell).        GNU Aspell spelling checker
+END-INFO-DIR-ENTRY
+
+\1f
+File: aspell.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+GNU Aspell 0.60.6.1
+*******************
+
+This is the user's manual for Aspell
+
+   GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+* Menu:
+
+* Introduction::
+* Support::
+* Basic Usage::
+* Customizing Aspell::
+* Working With Dictionaries::
+* Writing programs to use Aspell::
+* Adding Support For Other Languages::
+* Implementation Notes::
+* Languages Which Aspell can Support::
+* Language Related Issues::
+* To Do::
+* Installing::
+* ChangeLog::
+* Authors::
+* Copying::
+
+ --- The Detailed Node Listing ---
+
+Basic Usage
+
+* Spellchecking Individual Files::
+* Using Aspell as a Replacement for Ispell::
+* Using Aspell with other Applications::
+
+Customizing Aspell
+
+* Specifying Options::
+* The Options::
+* Dumping Configuration Values::
+* Notes on Various Options::
+
+Notes on Various Options
+
+* Notes on Various Filters and Filter Modes::
+* Notes on the Prefix Option::
+* Notes on Typo-Analysis::
+* Notes on the Different Suggestion Modes::
+
+Working With Dictionaries
+
+* Using aspell-import::
+* How Aspell Selects an Appropriate Dictionary::
+* Listing Available Dictionaries::
+* Dumping the Contents of the Word List::
+* Creating an Individual Word List::
+* Working With Affix Info in Word Lists::
+* Format of the Personal and Replacement Dictionaries::
+* Using Multi Dictionaries::
+* Dictionary Naming::
+* AWLI files::
+
+Writing programs to use Aspell
+
+* Through the C API::
+* Through A Pipe::
+* Notes on Storing Replacement Pairs::
+
+Adding Support For Other Languages
+
+* The Language Data File::
+* Compiling the Word List::
+* Phonetic Code::
+* The Simple Soundslike::
+* Replacement Tables::
+* Affix Compression::
+* Controlling the Behavior of Run-together Words::
+* Creating A New Character Set::
+* Creating An Official Dictionary Package::
+
+Implementation Notes
+
+* Aspell Suggestion Strategy::
+* Notes on 8-bit Characters::
+
+Languages Which Aspell can Support
+
+* Supported::
+* Unsupported::
+* Multiple Scripts::
+* Planned Dictionaries::
+* References::
+
+Language Related Issues
+
+* Compound Words::
+* Words With Symbols in Them::
+* Unicode Normalization::
+* German Sharp S::
+* Context Sensitive Spelling::
+
+To Do
+
+* Important Items::
+* Other Items::
+* Notes on Various Items::
+
+Notes on Various Items
+
+* Word skipping by context::
+* Hidden Markov Model::
+* Email the Personal Dictionary::
+
+Installing
+
+* Generic Install Instructions::
+* HTML Manuals and "make clean"::
+* Curses Notes::
+* Loadable Filter Notes::
+* Upgrading from Aspell 0.50::
+* Upgrading from Aspell .33/Pspell .12::
+* Upgrading from a Pre-0.50 snapshot::
+* WIN32 Notes::
+
+Copying
+
+* GNU Free Documentation License::
+* GNU Lesser General Public License::
+
+\1f
+File: aspell.info,  Node: Introduction,  Next: Support,  Prev: Top,  Up: Top
+
+1 Introduction
+**************
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.  It
+can either be used as a library or as an independent spell checker.  Its
+main feature is that it does a much better job of suggesting possible
+replacements for a misspelled word than just about any other spell
+checker out there for the English language.  Unlike Ispell, Aspell can
+also easily check documents in UTF-8 without having to use a special
+dictionary.  Aspell will also do its best to respect the current locale
+setting.  Other advantages over Ispell include support for using
+multiple dictionaries at once and intelligently handling personal
+dictionaries when more than one Aspell process is open at once.
+
+   The latest version of Aspell can always be found at
+`http://aspell.net'
+
+1.1 Comparison to other spell checker engines
+=============================================
+
+                         Aspell   Ispell   Netscape   Microsoft
+                                           4.0        Word 97
+Open Source              x        x                   
+Suggestion               88-98    54       55-70?     71
+Intelligence                                          
+Personal part            x        x        x          
+of Suggestions                                        
+Alternate Dictionaries   x        x        ?          ?
+International Support    x        x        ?          ?
+
+   The Suggestion Intelligence is based on a small test kernel of
+misspelled/correct word pairs.  Go to `http://aspell.net/test' for more
+info and how you can help contribute to the test kernel.  The current
+scores for Aspell are 88 in _fast_ mode, 93 in _normal_ mode, and 98 in
+_bad spellers_ mode: for more information about the various suggestion
+modes *Note Notes on the Different Suggestion Modes::.
+
+   If you have any other information you would like to add to this chart
+please contact me at <kevina@gnu.org>.
+
+1.1.1 Comparison to Ispell
+--------------------------
+
+1.1.1.1 Features that only Aspell has
+.....................................
+
+   * Is an actual library that other programs can link to instead of
+     having to use it through a pipe.
+
+   * Does a much better job of suggesting possible replacements for a
+     misspelled word than Ispell does or for that matter many other
+     spell checkers I have seen.  If you know a spell checker that does
+     a better job please let me know.
+
+   * Can learn from user's misspellings.
+
+   * Can easily check documents in UTF-8 without having to use a special
+     dictionary.
+
+   * Has support for using multiple dictionaries at once.
+
+   * Is multiprocess intelligent.  When a personal dictionary (or
+     replacement list) is saved, it will now first update the list
+     against the dictionary on disk in case another process modified it.
+
+   * Can share the memory used in the main word list between processes.
+
+   * A better, more complete word list for the English language.  Word
+     lists are provided for American, British, and Canadian spelling.
+     Special care has been taken to only include one spelling for each
+     word in any particular word list.  The word list included in
+     Ispell by contrast only included support for American and British
+     and also tends to included multiple spellings for a word which can
+     mask some spelling errors.
+
+1.1.1.2 Things that, currently, only Ispell has
+...............................................
+
+   * Lower memory footprint
+
+   * Ability to deal with arbitrary multi-character letters such as old
+     ASCII encodings of accented letters.
+
+   * Perhaps better support for spell checking (La)TeX files.
+
+
+   For a detailed description of how Aspell differs from Ispell, *Note
+Differences From Ispell::.
+
+\1f
+File: aspell.info,  Node: Support,  Next: Basic Usage,  Prev: Introduction,  Up: Top
+
+2 Support
+*********
+
+Support for Aspell can be found on the Aspell mailing lists.
+Instructions for joining the various mailing lists (and an archive of
+them) can be found off the Aspell home page at `http://aspell.net'.
+
+   Bug reports should be submitted via the Sourceforge Tracker at
+`http://sourceforge.net/tracker/?group_id=245' rather than being posted
+to the mailing lists.
+
+\1f
+File: aspell.info,  Node: Basic Usage,  Next: Customizing Aspell,  Prev: Support,  Up: Top
+
+3 Basic Usage
+*************
+
+For a quick reference on the Aspell utility use the command `aspell
+--help'.
+
+* Menu:
+
+* Spellchecking Individual Files::
+* Using Aspell as a Replacement for Ispell::
+* Using Aspell with other Applications::
+
+\1f
+File: aspell.info,  Node: Spellchecking Individual Files,  Next: Using Aspell as a Replacement for Ispell,  Up: Basic Usage
+
+3.1 Spellchecking Individual Files
+==================================
+
+To use Aspell to spellcheck a file use:
+
+     aspell check [OPTIONS] FILENAME
+
+at the command line where `FILENAME' is the file you want to check and
+`OPTIONS' is any number of optional options.  Some of the more useful
+ones include:
+
+-mode=MODE
+     the mode to use when checking files.  The available modes are
+     `none', `url', `email', `sgml', `tex', `texinfo', `nroff', among
+     others.  For more information on the various modes see *Note Notes
+     on Various Filters and Filter Modes::.
+
+-dont-backup
+     don't create a backup file.  Normally, if there are any corrections
+     the Aspell utility will append `.bak' to the existing file name
+     and then create a new file with corrections made during spell
+     checking.
+
+-sug-mode=MODE
+     the suggestion mode to use where mode is one of `ultra', `fast',
+     `normal', or `bad-spellers'.  For more information on these modes
+     see *Note Notes on the Different Suggestion Modes::.
+
+-lang=NAME/-l NAME
+     the language the document is written in.  The default depends on
+     the current locale.
+
+-encoding=NAME
+     encoding the document is expected to be in.  The default depends
+     on the current locale.
+
+-master=NAME/-d NAME
+     the main dictionary to use.
+
+-keymapping=NAME
+     the keymapping to use.  Either `aspell' for the default mapping or
+     `ispell' to use the same mapping that the Ispell utility uses.
+
+   For more information on the available options, please see *Note
+Customizing Aspell::.
+
+   For example to check the file `foo.txt':
+
+     aspell check foo.txt
+
+and to check the file `foo.txt' using the `bad-spellers' suggestion
+mode and the American English dictionary:
+
+     aspell check --sug-mode=bad-spellers -d en_US foo.txt
+
+   If the `mode' option is not given, then Aspell will use the
+extension of the file to determine the current mode.  If the extension
+is `.tex', then `tex' mode will be used, if the extension is `.html',
+`.htm', `.php', or `.sgml' it will check the file in `sgml' mode,
+otherwise it will use `url' mode.
+
+   For more information on the various modes that can be used, see
+*Note Notes on Various Filters and Filter Modes::.
+
+   If Aspell was compiled with curses support and the `TERM'
+environment variable is set to a capable terminal type then Aspell will
+use a nice full screen interface, otherwise it will use a simpler
+"dumb" terminal interface where the misspelled word is surrounded by
+two '*'.  In either case the interface should be self explanatory.
+
+   If Aspell is compiled with a version of the curses library that
+support wide characters then Aspell can also check UTF-8 text.
+Furthermore, the document will be displayed in the encoding defined by
+the current locale.  This encoding does not necessarily have to be the
+same encoding that the document is in.  This means that is is possible
+to check an 8-bit encoding such as ISO-8859-1 on an UTF-8 terminal.  To
+do so simply set the `encoding' option to `iso-8859-1'.  Furthermore it
+is also possible to check an UTF-8 document on an 8-bit terminal
+provided that the document can be successfully converted into that
+encoding.
+
+\1f
+File: aspell.info,  Node: Using Aspell as a Replacement for Ispell,  Next: Using Aspell with other Applications,  Prev: Spellchecking Individual Files,  Up: Basic Usage
+
+3.2 Using Aspell as a Replacement for Ispell
+============================================
+
+As of GNU Aspell 0.60.1 Aspell should be able to completely replace
+Ispell for most applications.  The Ispell compatibility script should
+work for most applications which expect Ispell.  However there are some
+differences which you should be aware of.
+
+3.2.1 As a Drop In Replacement
+------------------------------
+
+Aspell can be used as a drop in replacement for Ispell for programs
+that use Ispell through a pipe such as Emacs and LyX.  It can also be
+used with programs that simply call the `ispell' command and expect the
+original file to be overwritten with the corrected version.
+
+   If you do not have Ispell installed on your system and have installed
+the Ispell compatibility script then you should not need to do anything
+as most applications that expect Ispell will work as expected with
+Aspell via the Ispell compatibility script.
+
+   Otherwise, the recommended way to use Aspell as a replacement for
+Ispell is to change the `ispell' command from within the program being
+used.  If the program uses `ispell' in pipe mode simply change `ispell'
+to `aspell'.  If the program calls the `ispell' command to check the
+file, then change `ispell' with `aspell check'.
+
+   If that is impossible then the `run-with-aspell' script can be used.
+This script modifies the patch so that programs see the Ispell
+compatibility script instead of the actual true `ispell' command.  The
+format of the script is:
+
+     run-with-aspell COMMAND
+
+where COMMAND is the name of the program with any optional arguments.
+
+   The old method of mapping Ispell to Aspell is discouraged because it
+can create compatibility problems with programs that actually require
+Ispell such as Ispell's own scripts.
+
+3.2.2 Differences From Ispell
+-----------------------------
+
+Nevertheless, Aspell is not Ispell, nor is it meant to completely
+emulate the behavior of Ispell.  The `aspell' command is not identical
+to the `ispell' command when not used in "pipe" mode.  If an
+application expects the `ispell' command, then the Ispell compatibility
+script should be used instead.
+
+3.2.2.1 Functionality of the Ispell Compatibility Script
+........................................................
+
+The Ispell compatibility script provides the following Ispell
+functionally.
+
+   * The ability to check a file when called without any mode
+     parameters.
+
+   * The pipe or -a mode.
+
+   * The list or -l mode.
+
+   * The version or -v mode.  A single line is returned which, while not
+     being identical to the line Ispell returns, is sufficient to fool
+     most programs.
+
+   * The munch or -c mode.
+
+   * The expand or -e mode.
+
+   * The ability to dump the affix file when called with '-D'.  However
+     the format of the affix file is different.  Furthermore, not all
+     languages have an affix file.
+
+
+   However the Ispell script is currently unable to emulate the '-A'
+pipe mode.  This is different from the normal pipe mode in that the
+special `&Include_File&' command is recognized.
+
+3.2.2.2 Recognized Options
+..........................
+
+Aspell, and thus the Ispell compatibility script, recognizes most of
+the options that Ispell uses except for the '-S', '-w' and '-T'
+options.  The Aspell command will simply ignore these options if it
+sees them.
+
+3.2.2.3 Check Mode Compatibility
+................................
+
+The interface used by Aspell when checking individual files is slightly
+different than Ispell's.  In particular the default keymappings are not
+the same as the ones Ispell uses.  However Aspell supports using the
+Ispell keymappings via the `keymapping' option.  To use the Ispell
+keymappings set the `kepmapping' option to `ispell'.  This can be done
+on the command line by adding using the command:
+
+       aspell check --keymapping=ispell ...
+or with the Ispell compatibility script
+       ispell --keymapping=ispell ...
+
+   The Ispell keymapping can always be used when the Ispell compatibly
+script is called by uncommenting the indicated line in the `ispell'
+script.
+
+3.2.2.4 Pipe Mode Compatibility
+...............................
+
+The Aspell pipe mode should be identical to the Ispell pipe mode except
+if the line starts with a '$$' as that will trigger special Aspell only
+commands or if the line starts with a '~' which is ignored by Aspell.
+
+3.2.2.5 Other Differences
+.........................
+
+The compiled dictionary format is completely different than Ispell's.
+Furthermore the format of the language data files' are different than
+Ispell's affix file.  However, all known Ispell dictionaries were
+converted to Aspell format, except for Albanian (sq) as I was unable to
+find the source word list.
+
+   The naming and format of the personal dictionary is also different.
+However, Ispell personal dictionaries can be imported using the
+`aspell-import' script.  *Note Using aspell-import::.  The Ispell
+personal dictionary is simply a list of words while the Aspell one is a
+list of words with a header line.  Thus it is also fairly easy to
+convert between the two.  *Note Format of the Personal Dictionary::.
+
+3.2.2.6 Missing Functionally
+............................
+
+The only major area where Ispell is superior to Aspell is in the
+handling of multi character letters such as old ASCII encoding of
+accented characters.
+
+   However, Aspell can handle UTF-8 documents far better than Ispell
+can.
+
+\1f
+File: aspell.info,  Node: Using Aspell with other Applications,  Prev: Using Aspell as a Replacement for Ispell,  Up: Basic Usage
+
+3.3 Using Aspell with other Applications
+========================================
+
+3.3.1 With Emacs and XEmacs
+---------------------------
+
+The easiest way to use Aspell with Emacs or XEmacs is to add this line:
+
+
+(setq-default ispell-program-name "aspell")
+
+   to the end of your `.emacs' file.
+
+   For some reason version 3.0 of ispell.el (the lisp program that
+(x)emacs uses) wants to reverse the suggestion list.  To fix this add
+this line:
+
+
+(setq-default ispell-extra-args '("--reverse"))
+
+   after the previous line in your .emacs file and it should solve the
+problem.
+
+   Ispell.el, version 3.1 (December 1, 1998) and better, has the list
+reversing problem fixed.  You can find it at
+`http://www.kdstevens.com/~stevens/ispell-page.html'.
+
+3.3.2 With LyX
+--------------
+
+Version 1.0 of LyX provides support for Aspell's learning from user's
+mistakes feature.
+
+   To use Aspell with LyX 1.0 either change the `spell_command' option
+in the `.lyxrc' file or use the `run-with-aspell' utility.
+
+3.3.3 With VIM
+--------------
+
+To use Aspell in VIM you simply need to add the following line to your
+`.vimrc' file:
+
+
+map ^T :w!<CR>:!aspell check %<CR>:e! %<CR>
+
+   I use `Ctrl-T' since that's the way you spell check in `pico'.  In
+order to add a control character to your `.vimrc' you must type
+`Ctrl-v' first.  In this case `Ctrl-v Ctrl-t'.
+
+   A more useful way to use Aspell, IMHO, is in combination with
+Newsbody (`http://www.image.dk/~byrial/newsbody/') which is how I use it
+since VIM is my editor for my mailer and my news reader.
+
+map ^T\\1\\2<CR>:e! %<CR>
+map \\1 :w!<CR>
+map \\2 :!newsbody -qs -n % -p aspell check \\%f<CR>
+
+3.3.4 With Pine
+---------------
+
+To use Aspell in Pine simply change the option `speller' to
+
+     aspell --mode=email check
+
+   To change the `speller' option go to the main menu.  Type `S' for
+_setup_, `C' for _config_, then `W' for _where is_.  Type in `speller'
+as the word to find.  The speller option should be highlighted now.
+Hit enter, type in the above line, and hit enter again.  Then type `E'
+for _exit setup_ and `Y' to save the change.
+
+   If you have a strong desire to check other people's comments change
+`speller' to
+
+     aspell check
+
+instead which will avoid switching Aspell into email mode.
+
+\1f
+File: aspell.info,  Node: Customizing Aspell,  Next: Working With Dictionaries,  Prev: Basic Usage,  Up: Top
+
+4 Customizing Aspell
+********************
+
+The behavior of Aspell can be changed by any number of options which
+can be specified at either the command line, the environment variable
+`ASPELL_CONF', a personal configuration file, or a global configuration
+file.  Options specified on the command line override options specified
+by the environment variable.  Options specified by the environment
+variable override options specified by either of the configuration
+files.  Finally options specified by the personal configuration file
+override options specified in the global configuration file.  Options
+specified in the environment variable `ASPELL_CONF', a personal
+configuration file, or a global configuration file will take effect no
+matter how Aspell is used which includes being used by other
+applications.
+
+   Aspell has three basic types of options: "boolean", "value", and
+"list".
+
+   "Boolean" options are either enabled or disabled, "value" options
+take a specific value, and "list" options can either have entries added
+or removed from the list.
+
+* Menu:
+
+* Specifying Options::
+* The Options::
+* Dumping Configuration Values::
+* Notes on Various Options::
+
+\1f
+File: aspell.info,  Node: Specifying Options,  Next: The Options,  Up: Customizing Aspell
+
+4.1 Specifying Options
+======================
+
+4.1.1 At the Command Line
+-------------------------
+
+All options specified at the command line have the following basic
+format:
+
+     --OPTION[=VALUE]
+
+where the `=' can be replaced by whitespace.
+
+   Some options also have single letter abbreviations of the form:
+
+     LETTER [OPTIONAL_WHITESPACE VALUE]
+
+   Any non-ASCII characters are expected to be in the encoding
+specified by the current locale.
+
+   To reset an option to the default value, prefix the option with a
+`reset-' and don't specify a value.
+
+4.1.1.1 Value options
+.....................
+
+To specify a value option simply specify the option with its
+corresponding value.  For example to set the filter mode to TeX use
+`--mode=tex'.
+
+   If a value option has a single letter shortcut simply specify the
+single letter shortcut with its corresponding value.  For example to
+use a the accented version of the American English dictionary use `-d
+en_US-w_accents'.
+
+4.1.1.2 Boolean options
+.......................
+
+To enable a boolean option simply specify the option without any
+corresponding value, or prefix it with an `enable-'.  For example to
+create a backup file use `--backup'.  To disable a boolean option
+prefix the option name with a `dont-' or `disable-'.  To avoid creating
+a backup file use `--dont-backup'.  Boolean options can also be set
+directly like a value option where the value is either "true" or
+"false", for example `--backup=true'.
+
+   If a boolean option has a single letter abbreviation simply give the
+letter corresponding to either enabling or disabling the option without
+any corresponding value.  For example, to consider run-together words
+valid use `-C' or to consider them invalid use `-B'
+
+4.1.1.3 List options
+....................
+
+To add a value to the list, prefix the option name with an `add-' and
+then specify the value to add.  For example, to add the URL filter use
+`--add-filter url'.  To remove a value from a list option, prefix the
+option name with a `rem-' and then specify the value to remove.  For
+example, to remove the URL filter use `--rem-filter url'.  To remove
+all items from a list prefix the option name with a `clear-' without
+specify any value.  For example, to remove all filters use
+`--clear-filter'.
+
+   A list option can also be set directly, in which case it will be set
+to a single value.  To directly set a list option to multiple values
+prefix the option name with a `lset-' and separate each value with a
+`:'.  For example, to use the URL and TeX filter use `--lset-filter
+url:tex'.
+
+4.1.2 Via a Configuration File
+------------------------------
+
+Aspell can also accept options via a personal or global configuration
+file.  The exact files to used are specified by the options `per-conf'
+and `conf' respectively but the personal configuration file is normally
+`.aspell.conf' located in the `HOME' directory and the global one is
+normally `aspell.conf' which is located in the `etc' directory which is
+normally `/usr/etc' or `/usr/local/etc'.  To find out the particular
+values for your particular system use `aspell dump config'.
+
+   Each line of the configuration file has the format:
+
+     OPTION [VALUE]
+
+   There may be any number of spaces between the option and the value
+however it can only be spaces, i.e. there is no `=' between the option
+name and the value and there are no preceding `--' as used on the
+command line.
+
+   Comments may also be included by preceding them with a `#' as
+anything from a `#' to a newline is ignored.  Blank lines are also
+allowed.
+
+   To include a literal `#' use `\#'.  To include a literal `\' use
+`\\'.  Any other non-alpha character can also be protected by a `\' if
+necessary.
+
+   Any non-ASCII characters are expected to be in UTF-8.
+
+   To reset an option to the default value prefix the option with a
+`reset-' and don't specify a value.
+
+   Values set in the personal configuration file override those in the
+global file.  Options specified at either the command line or via an
+environment variable override those specified by either configuration
+file.
+
+     Note: Filters and corresponding options also may be assembled
+     inside a special meta filter file named `METAFILTER.flt'.  A
+     filter has to be loaded via adding a `add-filter FILTERNAME' line
+     to the meta filter file before its options may be specified.
+
+4.1.2.1 Value options
+.....................
+
+To specify a value option simply include the option followed by the
+corresponding value.  For example to set the default language to German
+use `lang german'.
+
+4.1.2.2 Boolean options
+.......................
+
+To specify a boolean option simply include the option followed by a
+`true' to enable it or a `false' to disable it.  For example to allow
+run-together words use `run-together true'.
+
+4.1.2.3 List options
+....................
+
+To add a value to the list, prefix the option name with an `add-' and
+then specify the value to add.  For example to add the URL filter use
+`add-filter url'.  To remove a value from a list option prefix the
+option name with a `rem-' and then specify the value to remove.  For
+example, to remove the URL filter use `rem-filter url'.  To remove all
+items from a list prefix the option name with a `clear-' without
+specifying any value.  For example, to remove all filters use
+`clear-filter'.
+
+   A list option can also be set directly, in which case it will be set
+to a single value.  To directly set a list option to multiple values
+prefix the option name with a `lset-' and separate each value with a
+`:'.  For example, to use the URL and TeX filter use `lset-filter
+url:tex'.  To include a literal `:' use `\:'.
+
+4.1.3 Setting Options via an Environment Variable
+-------------------------------------------------
+
+The environment variable `ASPELL_CONF' may also be used and it
+overrides any options set in the configuration file.  The format of the
+string is exactly the same as the configuration file except that
+semicolons (`;') are used instead of newlines.
+
+\1f
+File: aspell.info,  Node: The Options,  Next: Dumping Configuration Values,  Prev: Specifying Options,  Up: Customizing Aspell
+
+4.2 The Options
+===============
+
+The following is a list of available options broken down by category.
+Each entry has the following format:
+
+    OPTION[,SINGLE-LETTER-ABBREVIATION]
+          (TYPE) DESCRIPTION
+
+   Where single letter options are specified as they would appear at the
+command line, ie with the preceding dash.  Boolean single letter
+options are specified in the following format:
+
+     -<abbreviation to enable>|-<abbreviation to disable>
+
+   OPTION is one of the following: _boolean_, _string_, _file_, _dir_,
+_integer_, or _list_.
+
+   _String_, _file_, _dir_, and _integer_ types are all value options
+which can only take a specific type of value.
+
+4.2.1 Dictionary Options
+------------------------
+
+The following options may be used to control which dictionaries to use
+and how they behave (for more information see *Note How Aspell Selects
+an Appropriate Dictionary::):
+
+master,-d
+     (string) Base name of the dictionary to use.  If this option is
+     specified then Aspell will either use this dictionary or die.
+
+dict-dir
+     (dir) Location of the main word list.
+
+lang
+     (string) Language to use.  It follows the same format of the `LANG'
+     environment variable on most systems.  It consists of the two
+     letter ISO 639 language code and an optional two letter ISO 3166
+     country code after a dash or underscore.  The default value is
+     based on the value of the `LC_MESSAGES' locale.
+
+size
+     (string) The preferred size of the word list.  This consists of a
+     two char digit code describing the size of the list, with typical
+     values of: 10=tiny, 20=really small, 30=small, 40=med-small,
+     50=med, 60=med-large, 70=large, 80=huge, 90=insane.
+
+variety
+     (list) Any extra information to distinguish two different words
+     lists that have the same lang and size.
+
+word-list-path
+     (list) Search path for word list information files.
+
+personal,-p
+     (file) Personal word list file name.
+
+repl
+     (file) Replacements list file name.
+
+extra-dicts
+     (list) Extra dictionaries to use.
+
+dict-alias
+     (list) create dictionary aliases.  Each entry has the form `FROM
+     TO'.  Will override any system dictionaries that are present.
+
+
+4.2.2 Encoding Options
+----------------------
+
+These options control the encoding the document is expected to be in and
+how it is displayed.
+
+encoding
+     (string) The encoding the input text is in.  Valid values include,
+     but not limited to, `iso-8859-*', `utf-8', `ucs-2', `ucs-4'.  When
+     using the Aspell utility the default encoding is based on the
+     current locale.  Thus if your locale currently uses the `utf-8'
+     encoding than everything will be in UTF-8.  The `ucs-2' and
+     `ucs-4' encodings are intended to be used by other programs using
+     the Aspell library and is not supported by the Aspell utility.
+
+normalize
+     (boolean) Perform Unicode normalization.  Enabled by default.
+
+norm-strict
+     (boolean) Avoid lossy conversions when normalizing.  Lossy
+     conversions includes compatibility mappings such as splitting the
+     letter `OE' (U+152) into `O' and `E' (when the combined letter is
+     not available), and mappings which will remove accents.  Disabled
+     by default except when creating dictionaries.
+
+norm-form
+     (string) The normalization form the output should be in.  This
+     option primarily effects the normalization form of the suggestions
+     as when spell checkering as the actual text is unchanged unless
+     there is an error.  Valid values are `none', `nfd' for fully
+     decomposition (Normalization Form D), `nfc' for Normalization Form
+     C, or `comp' for fully composed.  `comp' is like `nfc' except that
+     _full_ composition is used rather than _canonical_ composition.
+     The `normalize' option must be enabled for this option to be used.
+
+norm-required
+     (boolean) Set to true when the current language requires Unicode
+     normalization.  This is generally the case when private use
+     characters are used internally by Aspell or when Normalization
+     Form C is not the same as full composition.
+
+
+4.2.3 Checker Options
+---------------------
+
+These options control the behavior of Aspell when checking documents.
+
+ignore,-W
+     (integer) Ignore words with N characters or less
+
+ignore-repl
+     (boolean) Ignore commands to store replacement pairs.
+
+save-repl
+     (boolean) Save the replacement word list on save all.
+
+keyboard
+     (file) The base name of the keyboard definition file to use (*note
+     Notes on Typo-Analysis::)
+
+sug-mode
+     (mode) Suggestion mode = `ultra' | `fast' | `normal' | `slow' |
+     `bad-spellers' (*note Notes on the Different Suggestion Modes::)
+
+ignore-case
+     (boolean) Ignore case when checking words.
+
+ignore-accents
+     (boolean) Ignore accents when checking words - _currently ignored_.
+
+
+4.2.4 Filter Options
+--------------------
+
+These options modify the behavior of the Aspell filter interface in
+general (for more information see *note Notes on Various Filters and
+Filter Modes::).
+
+filter
+     (list) filters to use
+
+filter-path
+     (list) Where to look when loading filter and filter modes.
+
+mode
+     (string) Sets the filter mode.  Possible values include, but not
+     limited to, `none', `url', `email', `sgml', or `tex'.  (The
+     shortcut options `-e' may be used for email, `-H' for HTML, or
+     `-t' for TeX).
+
+
+   These options belong to filters packaged along with Aspell standard
+distribution.  These options may be prefixed by the keyword `f-' in
+order to explicitly indicate that they are options recognized by a
+filter and not by Aspell itself.
+
+4.2.4.1 email
+.............
+
+This filter hides quoting characters and email preamble and other parts
+of an email which need not to be spell checked.
+
+email-quote
+     (list) Email quote characters.
+
+email-margin
+     (integer) The number of characters that can appear before the
+     quote character
+
+4.2.4.2 html
+............
+
+This filter converts an HTML source file into a format which eases
+spell checking of HTML texts by Aspell.
+
+html-check
+     (list) HTML attributes to always check, such as alt= (alternate
+     text).
+
+html-skip
+     (list) HTML tags to always skip the contents of, such as <script>.
+
+4.2.4.3 sgml
+............
+
+This filter is identical to the HTML filter except that its options has
+different default values which are currently the empty list.
+
+4.2.4.4 tex/latex
+.................
+
+This filter hides all LaTeX commands and corresponding parameters not
+being readable text in LaTeX output from Aspell.
+
+tex-command
+     (list) TeX commands
+
+tex-check-comments
+     (boolean) check TeX comments
+
+
+4.2.4.5 texinfo
+...............
+
+This filter hides all Texinfo commands from Aspell.  It can also hide
+Texinfo parameters and environments not corresponding to readable text.
+
+texinfo-ignore
+     (list) Texinfo command to ignore the parameters of.
+
+texinfo-ignore-env
+     (list) Texinfo environments to ignore.
+
+
+4.2.4.6 context
+...............
+
+This filter can be used to spell check source codes, HTML sources and
+other texts which consist of different contexts.  These contexts must
+be separated by pairs of unique delimiters.  The different contexts may
+not be dependent upon each other except for initial context which is
+assumed if not any other context applies.
+
+context-visible-first
+     (boolean) Switches the context which should be visible to Aspell.
+     Per default the initial context is assumed to be invisible as one
+     would expect when spell checking source files of programs where
+     relevant parts are contained in string constants and comments but
+     not in the remaining code.  If set to true the initial context is
+     visible while the delimited ones are hidden.
+
+add|rem-context-delimiters
+     (list) Add or remove pairs of delimiters.  This allows you to
+     specify the character, or sequences of characters, which should be
+     used to switch contexts and therefore have to be escaped by `\' if
+     they should appear literally.  The two delimiting chars belonging
+     to one pair have to be separated by a space character.  If
+     multiple pairs are specified by one `add|rem-context-delimiters'
+     call the different pairs have to be separated by a literal comma.
+     Per default the delimiters are set to C/C++ comment and string
+     constant delimiters.  If the end of line delimits a context than
+     this has to be indicated by the literal `\0' string.
+
+4.2.5 Run-together Word Options
+-------------------------------
+
+These may be used to control the behavior of run-together words (for
+more information *note Controlling the Behavior of Run-together
+Words::):
+run-together,-C|-B
+     (boolean) consider run-together words valid
+
+run-together-limit
+     (integer) maximum number of words that can be strung together
+
+run-together-min
+     (integer) minimal length of interior words
+
+4.2.6 Miscellaneous Options
+---------------------------
+
+Miscellaneous other options that don't fall under any other category
+conf
+     (file) Main configuration file.  This file overrides Aspell's
+     global defaults.
+
+conf-dir
+     (dir) location of main configuration file
+
+data-dir
+     (dir) location of language data files
+
+local-data-dir
+     (dir) alternative location of language data files.  This directory
+     is searched before `data-dir'.  It defaults to the same directory
+     the actual main word list is in (which is not necessarily
+     `dict-dir')
+
+home-dir
+     (dir) location for personal files
+
+per-conf
+     (file) personal configuration file.  This file overrides options
+     found in the global `conf' file
+
+keyboard
+     (file) use this keyboard layout for suggesting possible words.
+     These spelling errors happen if a user accidently presses a key
+     next to the intended correct key.  The default is keyboard
+     standard.  If you are creating documents, you may want to set it
+     according to your particular type of keyboard.  If spellchecking
+     documents created elsewhere, you might want to set this to the
+     keyboard type for that locale.  If you are not sure, just leave
+     this as standard
+
+prefix
+     (dir) prefix directory
+
+set-prefix
+     (boolean) set the prefix based on executable location (only works
+     on WIN32 and when compiled with `--enable-win32-relocatable')
+
+4.2.7 Aspell Utility Options
+----------------------------
+
+backup,-b|-x
+     (boolean) Create a backup file by appending `.bak' to the file
+     name.  This applies when the command is `check' and the backup
+     file is only created if any spelling modifications take place.
+
+time
+     (boolean) Time load time and suggest time in `pipe' mode.
+
+byte-offsets
+     (boolean) Use byte offsets instead of character offsets in `pipe'
+     mode.
+
+reverse
+     (boolean) Reverse the order of the suggestions list in `pipe' mode.
+
+keymapping
+     (string) the keymapping to use.  Either `aspell' for the default
+     mapping or `ispell' to use the same mapping that the Ispell utility
+     uses.
+
+guess
+     (boolean) make possible root/affix combinations not in the
+     dictionary in `pipe' mode.
+
+suggest
+     (boolean) Suggest possible replacements in `pipe' mode.  If false
+     Aspell will simply report the misspelling and make no attempt at
+     suggestions or possible corrections.
+
+\1f
+File: aspell.info,  Node: Dumping Configuration Values,  Next: Notes on Various Options,  Prev: The Options,  Up: Customizing Aspell
+
+4.3 Dumping Configuration Values
+================================
+
+To find out the current value of all the options use the command
+`aspell dump config'.  This will dump the current Aspell configuration
+to standard output.  The format of the contents dumped is such that it
+can be used as either the global or your personal configuration file.
+
+   To find out the current value of a particular option use `aspell
+config OPTION'.  This will print out the value of OPTION to `stdout'
+and nothing else.
+
+\1f
+File: aspell.info,  Node: Notes on Various Options,  Prev: Dumping Configuration Values,  Up: Customizing Aspell
+
+4.4 Notes on Various Options
+============================
+
+* Menu:
+
+* Notes on Various Filters and Filter Modes::
+* Notes on the Prefix Option::
+* Notes on Typo-Analysis::
+* Notes on the Different Suggestion Modes::
+
+\1f
+File: aspell.info,  Node: Notes on Various Filters and Filter Modes,  Next: Notes on the Prefix Option,  Up: Notes on Various Options
+
+4.4.1 Notes on Various Filters and Filter Modes
+-----------------------------------------------
+
+Aspell now has filter support.  You can either select from individual
+filters or choose a filter mode.  To select a filter mode use the
+`mode' option.  You may choose from `none', `url', `email', `sgml',
+`ccpp', `tex' and any other available on your system.  The default mode
+is `url'.  Individual filters can be added with the option `add-filter'
+and removed with the `rem-filter' option.  The currently available
+filters are `url', `email', `sgml' and `tex', `latex' (alias for
+`tex'), `nroff', `context', as well as a bunch of filters which
+translate the text from one format to another.
+
+   To check which filters are available use `aspell dump filters'.  To
+check which filter modes are available use `aspell dump modes'.  The
+`aspell help' command will also list all available filter and filter
+modes.
+
+4.4.1.1 None Filter Mode
+........................
+
+The `none' mode is exactly what it says.  It turns off all filters.
+
+4.4.1.2 URL Filter
+..................
+
+The `url' filter/mode skips over URLs, host names, and email addresses.
+Because this filter is almost always useful and rarely does any harm
+it is enabled in all modes except `none'.  To turn it off either select
+the `none' mode or use `rem-filter' option _after_ the desired mode is
+selected.
+
+4.4.1.3 Email Filter
+....................
+
+The `email' filter mode skips over quoted text.  It currently does not
+support skipping over headers however a future version should.  In the
+meantime I suggest you use Aspell with Newsbody which can be found at
+`http://home.worldonline.dk/~byrial/newsbody/'.  The option
+`email-skip' controls the number of characters that can appear before
+the email quote character, the default is 10.  The option
+`add|rem-email-quote' controls the characters that are considered quote
+characters, the defaults are `>' and `|'.
+
+4.4.1.4 SGML Filter
+...................
+
+The SGML filter allows you to spell check SGML, HTML, XHTML, and XML
+files. In most cases everything within a tag `<tag attrib=value
+attrib2="a whole sentence">' will be skipped by the spell checker. The
+SGML/HTML/XML that Aspell supports is a slight superset of most DTDs
+(Document Type Definitions) and can spell check the often non-conforming
+HTML found on the web.
+
+   Two configuration options, `sgml-skip' and `sgml-check', allow you
+to control what is spell checked. The tag and attribute names specified
+are case insensitive.
+
+sgml-skip
+     This is a list of tags whose contents will also be skipped by the
+     spell checker.  For example, if you wish to leave a misspelling in
+     a document and not have them flagged as misspellings, you could
+     surround them with a <nospellcheck> tag:
+            <TD><FONT size=2><NOSPELLCHECK>leviosa</NOSPELLCHECK>
+            is what Mr. Potter said</FONT></TD>
+     And put that word in the skip config directive:
+          add-sgml-skip nospellcheck
+
+sgml-check
+     This is a list of attributes whose values you do want spell
+     checked. By default, 'alt' (<img> alternate text) is a member of
+     the check list since it is text that is seen by a web page viewer.
+     You may also want 'value' to be on the check list since that is
+     the text put on buttons:
+          add-sgml-check value
+     In this case `<input type=button value="Donr">' will be flagged as
+     a misspelling.
+
+   This filter will also translate SGML characters of the form
+`&#num;'.  Other SGML characters such as `&amp;' will simply be skipped
+over so that the word `amp', for example, will not be spell checked.
+Eventually full support for properly translating SGML characters will
+be added.
+
+4.4.1.5 HTML Filter
+...................
+
+The `html' filter is like the SGML Filter Mode but specialized for
+HTML.  By default, 'script' and 'style' are members of the skip list in
+HTML mode.
+
+4.4.1.6 TeX/LaTeX Filter
+........................
+
+The `tex' (all lowercase) filter mode skips over TeX commands and
+parameters and/or options to certain commands.  It also skips over TeX
+comments by default.  The option `[dont-]tex-check-comments' controls
+whether or not Aspell will skip over TeX comments.  The option
+`add|rem-tex-command' controls which TeX commands should have certain
+parameters and/or options also skipped over.  Commands that are not
+specified will have all their parameters and/or options checked.  The
+format for each item is
+
+     <command> <a list of p,P,o and Os>
+
+   The first item is simply the command name.  The second item controls
+which parameters to skip over.  A 'p' skips over a parameter while a
+'P' doesn't.  Similarly an 'o' will skip over an optional parameter
+while an 'O' doesn't.  The first letter on the list will apply to the
+first parameter, the second letter will apply to the second parameter
+etc.  If there are more parameters than letters Aspell will simply
+check them as normal.  For example the option
+
+     add-tex-command rule pp
+
+will skip over the first two parameters of the `rule' command while the
+option
+
+     add-tex-command foo Pop
+
+will _check_ the first parameter of the `foo' command, skip over the
+next optional parameter, if it is present, and will skip over the
+second parameter -- even if the optional parameter is not present --
+and will check any additional parameters.
+
+   A `*' at the end of the command is simply ignored.  For example the
+option
+
+     enlargethispage p
+
+will ignore the first parameter in both `enlargethispage' and
+`enlargethispage*'.
+
+   To remove a command simply use the `rem-tex-command' option.  For
+example
+
+     rem-tex-command foo
+
+will remove the command foo, if present, from the list of TeX commands.
+
+   The TeX filter mode is also available via `latex' alias name.
+
+4.4.1.7 Texinfo Filter
+......................
+
+The `texinfo' filter allows you to spell check Texinfo files.  It will
+skip over any Texinfo commands and their parameters when appropriate.
+It will also skip over some Texinfo environments such as `example'.
+The list option `texinfo-ignore' controls which commands to ignore the
+parameters of and the list option `texinfo-ignore-env' controls which
+Texinfo environments to ignore.
+
+   The Texinfo filter has special code to deal with the `@table' and
+related commands.  It will apply the formatting command to each of the
+`@item' or `@itemx' commands just like Texinfo will.  This means that
+if the formatting command is `@code' and and the `@code' command is a
+member of the `texinfo-ignore' option than the Texinfo filter will
+ignore the parameter of the `@item' command as if the parameter was also
+the parameter of the `@code' command.
+
+   The Texinfo filter will also skip over the `\input texinfo' line.
+
+4.4.1.8 Nroff Filter
+....................
+
+The `nroff' filter mode allows you to check the spelling of Nroff
+documents. The mode is enabled by giving `--add-filter=nroff' or `-n'
+command line option to `aspell'. It is also automatically enabled if
+the first three characters of the file being checked are `.\"' (a
+`nroff' comment marker) or the file name ends in a one of the following
+suffixes:
+
+   * single decimal digit from `0' to `9'
+
+   * letter `n'
+
+   * `tmac'
+
+This filter mode skips following `nroff' language elements:
+
+   * Comments
+
+   * Requests
+
+   * Names of `nroff' registers (both traditional two-letter names and
+     GNU nroff long names)
+
+   * Arguments to the following requests: `ds', `de', `nr', `do', `so'.
+
+   * Arguments to font switch (`\f') and size switch (`\s') escapes
+
+   * Arguments to extended charset escape in both traditional (`\(')
+     and extended (`\[comp1 comp2 ...]') form.
+
+4.4.1.9 Context Filter
+......................
+
+The _context_ filter allows Aspell to distinguish between visible and
+invisible contexts.  The visible ones will be spell checked and the
+invisible ones will be ignored.  The contexts are distinguished by the
+fact that the visible/invisible ones are delimited by specific and
+unique delimiter characters or character sequences.  Whether the
+delimited contexts should be visible or invisible only stated by the
+value of the `[dont-]context-visible-first' option and not by the
+delimiters.
+
+   The context delimiters are specified as pairs of delimiters via the
+`add|rem-context-delimiters' option.  The delimiters enclosing a
+specific context are specified as a space separated pair.  If more than
+one delimiter pair is specified by one call of
+`add|rem-context-delimiters' they have to be combined to a comma
+separated list.  To indicate that a context is always closed by end of
+line use `\0' sequence as closing delimiter.
+
+4.4.1.10 Ccpp Filter Mode
+.........................
+
+The `ccpp' filter mode will limit spell checking to C/C++ comments and
+string literals. Any code in between will be left alone.
+
+\1f
+File: aspell.info,  Node: Notes on the Prefix Option,  Next: Notes on Typo-Analysis,  Prev: Notes on Various Filters and Filter Modes,  Up: Notes on Various Options
+
+4.4.2 Notes on the Prefix Option
+--------------------------------
+
+The `prefix' option is there to allow Aspell to easily be relocated.
+Changing `prefix' will change all directory names relative to the new
+prefix that are not explicitly set.  For example if `prefix' was
+`/usr/local/aspell' and `dict-dir' has a default value of
+`/usr/local/aspell/dict' than changing `prefix' to `/opt/aspell' will
+also change the default value of `dict-dir' to `/opt/aspell/dict'.
+Note that modifying `prefix' will only affect the default compiled in
+values of directories.  If a directory option is explicitly given a
+value then changing the value of `prefix' has no effect on that
+directory option.
+
+\1f
+File: aspell.info,  Node: Notes on Typo-Analysis,  Next: Notes on the Different Suggestion Modes,  Prev: Notes on the Prefix Option,  Up: Notes on Various Options
+
+4.4.3 Notes on Typo-Analysis and the Keyboard Definition File
+-------------------------------------------------------------
+
+Aspell .33 and better will, in general, give a higher priority to
+certain misspellings which are likely to be due to typos such as `teh'
+instead of `the' or `hapoy' instead of `happy'.  However in order to do
+this well Aspell needs to know the layout of the keyboard via the
+keyboard definition file.  The keyboard definition file simply
+identifies the keys on the keyboard and which of them are right next to
+each other.  It has an extension of `.kbd' and all non-ASCII characters
+are expected to be in UTF-8.
+
+   To identify a key use:
+
+     key BASE OTHER ...
+   where BASE is the base character that the key types, and OTHER are
+other keys that the key can produce.  For example
+
+     key a A á Á
+
+   It generally is only necessary to list keys which type more than one
+distinct letter as Aspell can derive the rest from the language data
+file.  For example, it is not necessary to include the previously
+mentioned key.
+
+   To identify two keys as being right next to each other simply list
+the type keys right after each other.  For example the line:
+
+     as
+
+will indicate that `a' and `s' are right next to each other.  If `as'
+is listed as an entry it is not necessary to list `sa' as an entry as
+that will be done automatically.  Also by "right next to each other" I
+mean two keys that are close enough together that it is easy to type
+one instead of the other.  On most keyboards this means keys that are
+to the left or to the right of each other and _not_ keys that are below
+or above it.
+
+   The default for this option is normally `standard'.  However the
+default can be changed via the language data file.  The normal default,
+`standard', should work well for most QWERTY like keyboard layouts.  It
+may need minor adjusting for foreign keyboards.  The `dvorak' option
+can be used for a Dvorak layout.
+
+\1f
+File: aspell.info,  Node: Notes on the Different Suggestion Modes,  Prev: Notes on Typo-Analysis,  Up: Notes on Various Options
+
+4.4.4 Notes on the Different Suggestion Modes
+---------------------------------------------
+
+In order to understand what these suggestion modes do, a basic
+understanding of how Aspell works is required.  For that, see *Note
+Aspell Suggestion Strategy::.
+
+   The suggestion modes are as follows.
+
+ultra
+     This method will use the fastest method available to come up with
+     decent suggestions.  This currently means that it will look for
+     soundslikes within one edit distance.  This method will also use
+     the replacement table if one is available.  In this mode Aspell
+     gets about 87% of the words from my small test kernel of
+     misspelled words.  (Go to `http://aspell.net/test' for more info
+     on the test kernel as well as comparisons of this version of
+     Aspell with previous versions and other spell checkers.)
+
+fast
+     This method is currently identical to `ultra'.
+
+normal
+     This mode will use what ever method is necessary to return good
+     suggestions in most cases in a reasonable amount of time.  This
+     currently means it will looks for soundslikes within two edit
+     distance apart.  This mode gets 93% of the words.
+
+slow
+     Like `normal' except that "reasonable amount of time" is not a
+     consideration.  In most cases it will return the same results as
+     `normal'.  The biggest difference is that it will try an ngram
+     scan if the normal methods of finding a suggestion fail.
+
+bad-spellers
+     This method is like `slow' but is tailored more for the bad
+     speller, where as the other modes are tailored more to strike a
+     good balance between typos and true misspellings.  This mode never
+     performs typo-analysis and returns a _huge_ number of words for
+     the really bad spellers who can't seem to get the spelling
+     anything close to what it should be.  If the misspelled word looks
+     anything like the correct spelling it is bound to be found
+     _somewhere_ on the list of 100 or more suggestions.  This mode
+     gets 98% of the words.
+
+   If jump tables were not used then the `normal' option is identical
+to `fast' and the `slow' option is identical to the `normal' if jump
+tables were used.
+
+\1f
+File: aspell.info,  Node: Working With Dictionaries,  Next: Writing programs to use Aspell,  Prev: Customizing Aspell,  Up: Top
+
+5 Working With Dictionaries
+***************************
+
+* Menu:
+
+* Using aspell-import::
+* How Aspell Selects an Appropriate Dictionary::
+* Listing Available Dictionaries::
+* Dumping the Contents of the Word List::
+* Creating an Individual Word List::
+* Working With Affix Info in Word Lists::
+* Format of the Personal and Replacement Dictionaries::
+* Using Multi Dictionaries::
+* Dictionary Naming::
+* AWLI files::
+
+\1f
+File: aspell.info,  Node: Using aspell-import,  Next: How Aspell Selects an Appropriate Dictionary,  Up: Working With Dictionaries
+
+5.1 Using `aspell-import'
+=========================
+
+The `aspell-import' Perl script will look for old personal dictionaries
+and will import them into GNU Aspell.  It will look for both Ispell and
+Aspell ones.  To use it, just run it from the command prompt.  If you
+get an error about `/usr/bin/perl' not being found, then instead try
+`perl BINDIR/aspell-import'.  When running the script if you get a
+message like:
+
+
+Error: No word lists can be found for the language "de".
+
+   This means that you have not installed support for the given
+language, in this case `de' for German.  To rectify the situation
+download and install a dictionary designed to work with GNU Aspell 0.50
+or better.
+
+\1f
+File: aspell.info,  Node: How Aspell Selects an Appropriate Dictionary,  Next: Listing Available Dictionaries,  Prev: Using aspell-import,  Up: Working With Dictionaries
+
+5.2 How Aspell Selects an Appropriate Dictionary
+================================================
+
+If the `master' option is set in any fashion (via the command line, the
+`ASPELL_CONF' environment variable, or a configuration file) Aspell
+will look for a dictionary of that name.  If one could not be found, it
+will complain.
+
+   Otherwise it will use the value of the `lang' option to search for
+an appropriate dictionary.  If more than one dictionary is found for
+the given language string then it will look for a dictionary with a
+matching variety if the `variety' option is set.  If it is not set it
+will look for a dictionary without a variety.  If after matching the
+`lang' and `variety' there is still more than one dictionary available
+it will find one with the size closest to the value of the `size'
+option.  The default size is 60.  If Aspell cannot find a dictionary
+based on the `lang' option then it will give up and complain.
+
+   If the `lang' option is not explicitly set its value will be based
+on the `LC_MESSAGES' locale.  This locale is generally taken from the
+`LC_MESSAGES' environment variable or the `LANG' environment variable
+if `LC_MESSAGES' is not set.  However, if Aspell is being used as a
+library from within another program which already explicitly set the
+locale then it will use the locale of the library rather than the
+environment variables.  If Aspell cannot determine the language from
+the `LC_MESSAGES' locale than it will default to `en_US'.
+
+   The list option `dict-alias' can be used to influence which
+dictionary is selected by creating an alias from one dictionary name to
+another.  This option is most useful when there is more than one
+dictionary for a given language.  For example `add-dict-alias en_US
+en_US-w_accents' will cause Aspell to choose the accented version of
+the American English dictionary instead of the non-accented version.
+To add an alias use:
+
+     add-dict-alias NAME VAL
+
+\1f
+File: aspell.info,  Node: Listing Available Dictionaries,  Next: Dumping the Contents of the Word List,  Prev: How Aspell Selects an Appropriate Dictionary,  Up: Working With Dictionaries
+
+5.3 Listing Available Dictionaries
+==================================
+
+For a list of available dictionaries use the command `aspell dump
+dicts'.  This will form a list of dictionaries that Aspell will search
+when a dictionary is not specifically given.
+
+\1f
+File: aspell.info,  Node: Dumping the Contents of the Word List,  Next: Creating an Individual Word List,  Prev: Listing Available Dictionaries,  Up: Working With Dictionaries
+
+5.4 Dumping the Contents of the Word List
+=========================================
+
+The dump command in `aspell' will simply dump the contents of a word
+list to `stdout' in a format that can be read back in with `aspell
+create'.
+
+   If no word list is specified the command will act on the default one.
+For example the command
+
+     aspell dump personal
+
+will simply dump the contents of the current personal word list to
+`stdout'.
+
+\1f
+File: aspell.info,  Node: Creating an Individual Word List,  Next: Working With Affix Info in Word Lists,  Prev: Dumping the Contents of the Word List,  Up: Working With Dictionaries
+
+5.5 Creating an Individual Word List
+====================================
+
+To create an individual main word list from a list of words use the
+command
+
+     aspell --lang=LANG create master ./BASE < WORDLIST
+
+where BASE is the name of the word list and WORDLIST is the list of
+words separated by white space.  The name of the word list will
+automatically be converted to all lowercase.  The `./' is important
+because without it Aspell will create the word list in the normal word
+list directory.  If you are trying to create a word list in a language
+other than English check the Aspell `data-dir' (usually
+`/usr/share/aspell', use `aspell dump config' to find out what it is on
+your system) to see if a language data file exists for your language.
+If not you will need to create one.  For more information on using
+Aspell with other languages *Note Adding Support For Other Languages::.
+
+   This will create the file `BASE' in the current directory.  To use
+the new word list copy the file to the normal word list directory (use
+`aspell config' to find out what it is) and use the option
+`--master=BASE'.
+
+   During the creating of the dictionary you may get a number of
+warnings or errors about invalid words or affixes.  By default Aspell
+will skip any invalid words and remove invalid affixes.  If you rather
+that Aspell simply accepts all words given then the option
+`--dont-validate-words' can be specified.  To avoid checking if affixes
+are valid use the option `--dont-validate-affixes'.  However, rather
+than disable checking, it is preferable to clean the input word list.
+This can be done by using the command
+
+     aspell --local-data-dir=./ --lang=LANG clean < WORDLIST > RESULT
+
+which will clean the word list and output the results to RESULT.  By
+default it will remove invalid characters from the beginning and end of
+a word before resorting to skipping the word.  If you rather it just
+skip the words than add the keyword strict:
+
+     aspell --local-data-dir=./ --lang=LANG clean strict < WORDLIST > RESULT
+
+   The option `--clean-words' can be be added when creating a
+dictionary if you want Aspell to remove invalid characters from the
+beginning and end of a word like the "clean" command does. In addition
+the options `--dont-skip-invalid-words' and `--dont-clean-affixes' can
+be specified to turn the warnings into errors.
+
+   The compiled dictionary file are endian order dependent.  When a
+dictionary is loaded the endian order is checked.  Please do not
+distribute the compiled dictionaries unless you are only distributing
+them for a particular platform such as you would a binary.
+
+   Aspell is now also able to use special `multi' dictionaries.  for
+more information *Note How Aspell Selects an Appropriate Dictionary::.
+
+   A personal and replacement word list can be created in a similar
+fashion.
+
+5.5.1 Format of the Replacement Word List
+-----------------------------------------
+
+The replacement word list has each replacement pair on its own line in
+the following format
+
+     misspelled_word correction
+
+\1f
+File: aspell.info,  Node: Working With Affix Info in Word Lists,  Next: Format of the Personal and Replacement Dictionaries,  Prev: Creating an Individual Word List,  Up: Working With Dictionaries
+
+5.6 Working With Affix Info in Word Lists
+=========================================
+
+5.6.1 The Munch Command
+-----------------------
+
+The `munch' command takes a list of words from standard input and
+outputs a list of possible root words and affixes.  The root may,
+however, be invalid as it does not check them against the existing
+dictionary.  For example the command:
+     echo brother | aspell -l en munch
+produces
+     brother broth/R brothe/R
+
+5.6.2 The Expand Command
+------------------------
+
+The `expand' command is the reverse of `munch', it expands affix flags
+to produce a list of words.  For example:
+     echo both/R | aspell -l en expand
+produces
+     both bother
+
+   The formal usage is:
+     aspell expand [LEVEL] [LIMIT]
+   Where LEVEL is the expansion level.  Valid values are between 1 and
+3.  Level 1 is the default if not otherwise specified.  Level 2 causes
+the original root/affix to be included, for example:
+     both/R both bother
+   Level 3 causes multiple lines to be printed, one for each generated
+word, with the original root/affix combination followed by the word it
+creates:
+     both/R both
+     both/R bother
+   Levels larger than 3 may also be supported, but should not be used as
+they may eventually be removed.
+
+   If a LIMIT parameter is given then only expansions which affect the
+first LIMIT letters will be expanded.  If a base word is not completely
+expanded for a given affix flag that flag will be left on the word.
+Note that prefixes are always expanded.
+
+5.6.3 The Munch-list Command
+----------------------------
+
+The `munch-list' command will reduce the size of word list via affix
+compression.  It will reduce a list of words to a minimal (or close to
+it) set of roots and affixes that will match the same list of words.
+The list of words is read from standard input and the result, the
+"munched" list, is written to standard out.  It's usage is:
+
+     aspell munch-list [keep] [single|multi] [simple] < INFILE > OUTFILE
+
+where `simple', `single', `multi', and `keep' are literal values.
+
+   The default algorithm used should give near optimum results.  In some
+cases the set of words returned is, provably, the minimum number
+possible.  In the typical case the number of words returned is within
+1% of the optimum number.
+
+   By default Aspell will remove redundant affix flags.  The `keep'
+flag will avoid removing them, which can be useful if you want to
+include all possible expansions for each base word.
+
+   When cross products are involved it may be beneficial to list a base
+word more than once.  Unfortunately, the current version of Aspell can
+not correctly handle multiple base words in a dictionary.  Therefore,
+the current default behavior is to only include the one with the most
+expansions.  All of them can be included via the `multi' flag.  Once
+Aspell is able to handle multiple base words the default will be to
+include them all.  The `single' flag can be used to only include one of
+them.
+
+   The `simple' flag will select an alternate faster algorithm.  This
+algorithm is very similar to the `munch' command distributed with
+MySpell (the Open Office spell checker), however, it doesn't give
+nearly as good results.  It does okay for the English word list but not
+for some other languages such as German; the normal algorithm reduced a
+list of 312,002 German words to 79,420 base words while the simple
+algorithm only reduced it to 115,927 words.  This algorithm may
+disappear in a future version of Aspell.
+
+\1f
+File: aspell.info,  Node: Format of the Personal and Replacement Dictionaries,  Next: Using Multi Dictionaries,  Prev: Working With Affix Info in Word Lists,  Up: Working With Dictionaries
+
+5.7 Format of the Personal and Replacement Dictionaries
+=======================================================
+
+5.7.1 Format of the Personal Dictionary
+---------------------------------------
+
+The personal dictionary generally has a filename of the form:
+
+     .aspell.LANG.pws
+
+And the file itself contains two parts.  The first part is a header
+line of the form:
+
+     personal_ws-1.1 LANG NUM [ENCODING]
+
+where NUM is the number of words in the list.  This number is only used
+as a hint, and thus does not have to be accurate.  When creating a new
+dictionary it is perfectly acceptable for NUM to be 0.  The ENCODING is
+optional and specifies the encoding of the word list.  If it is left
+out the encoding is expected to be in the default encoding for the
+language as specified by the `data-encoding' option.  *Note
+data-encoding::.
+
+   The second part of simply a word list with one word per line.
+
+5.7.2 Format of the Personal Replacement Dictionary
+---------------------------------------------------
+
+The personal replacement dictionary generally has a filename of the
+form:
+
+     .aspell.LANG.prepl
+
+And the file itself contains two parts.  The first part is a header
+line of the form:
+
+     personal_repl-1.1 LANG NUM [ENCODING]
+
+where NUM is currently unused and thus always 0.  As with the personal
+dictionary the ENCODING is optional.
+
+   The second part simply a list of replacements with one replacement
+per line with each replacement pair has the following format:
+
+     MISSPELLED_WORD CORRECTION
+
+\1f
+File: aspell.info,  Node: Using Multi Dictionaries,  Next: Dictionary Naming,  Prev: Format of the Personal and Replacement Dictionaries,  Up: Working With Dictionaries
+
+5.8 Using Multi Dictionaries
+============================
+
+As with previous versions of Aspell you can specify the main dictionary
+to use via the `-d' or `--master' option.  However as of Aspell .32 you
+can now also:
+
+  1. Specify more than word list to use with the `extra-dicts' option.
+
+  2. Specify special _multi_ dictionaries.
+
+   The `extra-dicts' is a list option.  To add a dictionary use
+`add-extra-dicts' or to remove a dictionary from the list use
+`rem-extra-dicts'.
+
+   A _multi_ dictionary is a special file which is basically a list of
+dictionary files to use.  A _multi_ dictionary must end in `.multi' and
+has roughly the same format as a configuration file with the only
+accepted key being `add'.
+
+\1f
+File: aspell.info,  Node: Dictionary Naming,  Next: AWLI files,  Prev: Using Multi Dictionaries,  Up: Working With Dictionaries
+
+5.9 Dictionary Naming
+=====================
+
+In order for Aspell to be able to correctly recognize a dictionary
+based on the setting of the `LANG' environment variable the
+dictionaries need to be located somewhere Aspell can find them and they
+need to be _multi_ dictionaries.  Where Aspell looks for dictionaries
+depends on the value of the `dict-dir' and `word-list-path' option.
+
+   `dict-dir' is generally `PREFIX/lib/aspell', and `word-list-path' is
+generally empty.
+
+   Each dictionary that you expect Aspell to be able to find needs to
+have a name in the following format:
+
+     LANGUAGE[_REGION][-VARIETY][-SIZE].multi
+
+where LANGUAGE is the two letter language code, REGION is the two
+letter region code, VARIETY is any extra information to distinguish the
+word list from other ones with the same language and spelling.
+Multiple varieties can be used by separating them with a '-'.  Finally,
+SIZE is the size of the dictionary.  If no size is specified then the
+default size of 60 will be assumed.
+
+   For example:
+
+     en.multi
+     en_US.multi
+     en-medical.multi
+     en-medical-85.multi
+     en-85.multi
+     de.multi
+
+\1f
+File: aspell.info,  Node: AWLI files,  Prev: Dictionary Naming,  Up: Working With Dictionaries
+
+5.10 AWLI files
+===============
+
+In order for Aspell to find dictionaries that are located in odd places
+or not named according to *Note Dictionary Naming::, an AWLI file needs
+to be created for the dictionary and located in some place where Aspell
+can find it.
+
+   Each AWLI file has a name in the following format:
+
+     LANGUAGE[REGION][-VARIETY][-SIZE]-MODULE.awli
+
+where the names have the same meaning as in *Note Dictionary Naming::,
+and MODULE is the speller module to use, which should be set to DEFAULT
+for now since there is only one speller module.
+
+   Each `awli' file for an Aspell word list should then contain exactly
+one line which contains the full path of the main word list.
+
+\1f
+File: aspell.info,  Node: Writing programs to use Aspell,  Next: Adding Support For Other Languages,  Prev: Working With Dictionaries,  Up: Top
+
+6 Writing programs to use Aspell
+********************************
+
+There are two main ways to use Aspell from within your application.
+Through the external C API or through a pipe.  The internal Aspell API
+can be used directly but that is not recommended as the actual Aspell
+API is constantly changing.
+
+* Menu:
+
+* Through the C API::
+* Through A Pipe::
+* Notes on Storing Replacement Pairs::
+
+\1f
+File: aspell.info,  Node: Through the C API,  Next: Through A Pipe,  Up: Writing programs to use Aspell
+
+6.1 Through the C API
+=====================
+
+The Aspell library contains two main classes and several helper
+classes.  The two main classes are `AspellConfig' and `AspellSpeller'.
+The `AspellConfig' class is used to set initial defaults and to change
+spell checker specific options.  The `AspellSpeller' class does most of
+the real work.  The `C API' is responsible for managing the
+dictionaries, checking if a word is in the dictionary, and coming up
+with suggestions among other things. There are many helper classes the
+important ones are `AspellWordList', `AspellMutableWordList',
+`Aspell*Enumeration'.  The `AspellWordList' classes is used for
+accessing the suggestion list, as well as the personal and suggestion
+word list currently in use.  The `AspellMutableWordList' is used to
+manage the personal, and perhaps other, word lists.  The
+`Aspell*Enumeration' classes are used for iterating through a list.
+
+6.1.1 Usage
+-----------
+
+To use Aspell your application should include `aspell.h'.  In order to
+ensure that all the necessary libraries are linked in libtool should be
+used to perform the linking.  When using libtool simply linking with
+`-laspell' should be all that is necessary.  When using shared
+libraries you might be able to simply link `-laspell', but this is not
+recommended.  This version of Aspell uses the CVS version of libtool
+however released versions of libtool should also work.
+
+   When your application first starts you should get a new configuration
+class with the command:
+
+     AspellConfig * spell_config = new_aspell_config();
+
+which will create a new `AspellConfig' class.  It is allocated with
+`new' and it is your responsibility to delete it with
+`delete_aspell_config'.  Once you have the config class you should set
+some variables.  The most important one is the language variable.  To
+do so use the command:
+
+     aspell_config_replace(spell_config, "lang", "en_US");
+
+which will set the default language to use to American English.  The
+language is expected to be the standard two letter ISO 639 language
+code, with an optional two letter ISO 3166 country code after an
+underscore.  You can set the preferred size via the `size' option, any
+extra info via the `variety' option, and the encoding via the
+`encoding' option.  Other things you might want to set is the preferred
+spell checker to use, the search path for dictionaries, and the like --
+see *Note The Options::, for a list of all available options.
+
+   Whenever a new document is created a new `AspellSpeller' class
+should also be created.  There should be one speller class per
+document.  To create a new speller class use the `new_aspell_speller'
+and then cast it up using `to_aspell_speller' like so:
+
+     AspellCanHaveError * possible_err = new_aspell_speller(spell_config);
+     AspellSpeller * spell_checker = 0;
+     if (aspell_error_number(possible_err) != 0)
+       puts(aspell_error_message(possible_err));
+     else
+       spell_checker = to_aspell_speller(possible_err);
+
+which will create a new `AspellSpeller' class using the defaults found
+in `spell_config'.  To find out which dictionary is selected the
+`lang', `size', and `variety' options may be examined.  To find out the
+exact name of the dictionary the `master' option may be examined as
+well as the `master-flags' options to see if there were any special
+flags that were passed on to the module.  The `module' option way also
+be examined to figure out which speller module was selected, but since
+there is only one this option will always be the same.
+
+   If for some reason you want to use different defaults simply clone
+`spell_config' and change the setting like so:
+
+     AspellConfig * spell_config2 = aspell_config_clone(spell_config);
+     aspell_config_replace(spell_config2, "lang","nl");
+     possible_err = new_aspell_speller(spell_config2);
+     delete_aspell_config(spell_config2);
+
+   Once the speller class is created you can use the `check' method to
+see if a word in the document is correct like so:
+
+     int correct = aspell_speller_check(spell_checker, WORD, SIZE);
+
+WORD is expected to be a `const char *' character string.  If the
+encoding is set to be `ucs-2' or `ucs-4' WORD is expected to be a cast
+from either `const u16int *' or `const u32int *' respectively.
+`u16int' and `u32int' are generally `unsigned short' and `unsigned int'
+respectively.  SIZE is the length of the string or `-1' if the string
+is null terminated.  If the string is a cast from `const u16int *' or
+`const u32int *' then `size' is the amount of space in bytes the string
+takes up after being cast to `const char *' and not the true size of
+the string.  `sspell_speller_check' will return `0' if it is not found
+and non-zero otherwise.
+
+   If the word is not correct, then the `suggest' method can be used to
+come up with likely replacements.
+
+     AspellWordList * suggestions = aspell_speller_suggest(spell_checker,
+                                                           WORD, SIZE);
+     AspellStringEnumeration * elements = aspell_word_list_elements(suggestions);
+     const char * word;
+     while ( (word = aspell_string_enumeration_next(aspell_elements)) != NULL )
+     {
+       // add to suggestion list
+     }
+     delete_aspell_string_enumeration(elements);
+
+   Notice how `elements' is deleted but `suggestions' is not.  The
+value returned by `suggestions' is only valid to the next call to
+`suggest'.  Once a replacement is made the `store_repl' method should
+be used to communicate the replacement pair back to the spell checker
+(for the reason, *note Notes on Storing Replacement Pairs::).  Its
+usage is as follows:
+
+     aspell_speller_store_repl(spell_checker, MISSPELLED_WORD, SIZE,
+                               CORRECTLY_SPELLED_WORD, SIZE);
+
+   If the user decided to add the word to the session or personal
+dictionary the the word can be be added using the `add_to_session' or
+`add_to_personal' methods respectively like so:
+
+     aspell_speller_add_to_session|personal(spell_checker, word, size);
+
+   It is better to let the spell checker manage these words rather than
+doing it yourself so that the words have a chance of appearing in the
+suggestion list.
+
+   Finally, when the document is closed the `AspellSpeller' class
+should be deleted like so:
+
+     delete_aspell_speller(spell_checker);
+
+6.1.2 API Reference
+-------------------
+
+Methods that return a boolean result generally return `false' on error
+and `true' otherwise.  To find out what went wrong use the
+`error_number' and `error_message' methods.  Unless otherwise stated
+methods that return a `const char *' will return `NULL' on error.  In
+general, the character string returned is only valid until the next
+method which returns a `const char *' is called.
+
+   For the details of the various classes please see the header files.
+In the future I will generate class references using some automated
+tool.
+
+6.1.3 Examples
+--------------
+
+Two simple examples are included in the examples directory.  The
+`example-c' program demonstrates most of the Aspell library
+functionality and the `list-dicts' lists the available dictionaries.
+
+6.1.4 Notes About Thread Safety
+-------------------------------
+
+Aspell should be thread safe, when used properly, as long as the
+underlying compiler, C and C++ library is thread safe.  Aspell objects,
+including the AspellSpeller class, should not be used by multiple
+threads unless they are protected by locks or it is only accessed by
+read-only methods.  A method is read-only only if a `const' object is
+passed in.  Many methods that seam to be read-only are not because they
+may store state information in the object.
+
+\1f
+File: aspell.info,  Node: Through A Pipe,  Next: Notes on Storing Replacement Pairs,  Prev: Through the C API,  Up: Writing programs to use Aspell
+
+6.2 Through A Pipe
+==================
+
+When given the `pipe' or `-a' command, Aspell goes into a pipe mode
+that is compatible with `ispell -a'.  Aspell also defines its own set
+of extensions to Ispell pipe mode.
+
+6.2.1 Format of the Data Stream
+-------------------------------
+
+In this mode, Aspell prints a one-line version identification message,
+and then begins reading lines of input.  For each input line, a single
+line is written to the standard output for each word checked for
+spelling on the line.  If the word was found in the main dictionary, or
+your personal dictionary, then the line contains only a `*'.
+
+   If the word is not in the dictionary, but there are suggestions, then
+the line contains an `&', a space, the misspelled word, a space, the
+number of near misses, the number of characters between the beginning
+of the line and the beginning of the misspelled word, a colon, another
+space, and a list of the suggestions separated by commas and spaces.
+
+   If you set the option `run-together' and Aspell thinks this word is
+a combination of two words in the dictionary, then it prints a single
+`-' in one line.
+
+   Finally, if the word does not appear in the dictionary, and there are
+no suggestions, then the line contains a `#', a space, the misspelled
+word, a space, and the character offset from the beginning of the line.
+Each sentence of text input is terminated with an additional blank
+line, indicating that Aspell has completed processing the input line.
+
+   These output lines can be summarized as follows:
+
+     *OK*: *
+     *Suggestions*: & original count offset: miss, miss, ...
+     *None*: # original offset
+
+   When in the `-a' mode, Aspell will also accept lines of single words
+prefixed with any of `*', `&', `@', `+', `-', `~', `#', `!', `%', or
+`^'.  A line starting with `*' tells Aspell to insert the word into the
+user's dictionary.  A line starting with `&' tells Aspell to insert an
+all-lowercase version of the word into the user's dictionary.  A line
+starting with `@' causes Aspell to accept this word in the future.  A
+line starting with `+', followed immediately by a valid mode will cause
+Aspell to parse future input according the syntax of that formatter.  A
+line consisting solely of a `+' will place Aspell in TeX/LaTeX mode
+(similar to the `-t' option) and `-' returns Aspell to its default mode
+(which is Nroff unless otherwise specified).  (but these commands are
+obsolete).  A line `~', is ignored for Ispell compatibility.  A line
+prefixed with `#' will cause the personal dictionaries to be saved.  A
+line prefixed with `!' will turn on terse mode (see below), and a line
+prefixed with `%' will return Aspell to normal (non-terse) mode.  Any
+input following the prefix characters `+', `-', `#', `!', `~', or `%'
+is ignored, as is any input following.  To allow spell-checking of
+lines beginning with these characters, a line starting with `^' has
+that character removed before it is passed to the spell-checking code.
+It is recommended that programmatic interfaces prefix every data line
+with an uparrow to protect themselves against future changes in Aspell.
+
+   To summarize these:
+
+`*WORD' Add a word to the personal dictionary
+`&WORD' Insert the all-lowercase version of the word in the personal
+        dictionary
+`@WORD' Accept the word, but leave it out of the dictionary
+`#'     Save the current personal dictionary
+`~'     Ignored for Ispell compatibility.
+`+'     Enter TeX mode.
+`+MODE' Enter the mode specified by MODE.
+`-'     Enter the default mode.
+`!'     Enter terse mode
+`%'     Exit terse mode
+`^'     Spell-check the rest of the line
+
+   In terse mode, Aspell will not print lines beginning with `*', which
+indicate correct words.  This significantly improves running speed when
+the driving program is going to ignore correct words anyway.
+
+   In addition to the above commands which are designed for Ispell
+compatibility Aspell also supports its own extensions.  All Aspell
+extensions follow the following format.
+
+     $$COMMAND [DATA]
+
+   Where DATA may or may not be required depending on the particular
+command.  Aspell currently supports the following commands:
+
+`cs OPTION,VALUE'        Change a configuration option.
+`cr OPTION'              Prints the value of a configuration option.
+`pp'                     Returns a list of all words in the current
+                         personal wordlist.
+`ps'                     Returns a list of all words in the current
+                         session dictionary.
+`l'                      Returns the current language name.
+`ra MIS,COR'             Add the word pair to the  replacement
+                         dictionary for later use. Returns nothing.
+
+   Anything returned is returned on its own line.  All lists returned
+have the following format
+
+     num of items: item1, item2, etc
+
+   _(Part of the preceding section was directly copied out of the
+Ispell manual)_
+
+\1f
+File: aspell.info,  Node: Notes on Storing Replacement Pairs,  Prev: Through A Pipe,  Up: Writing programs to use Aspell
+
+6.3 Notes on Storing Replacement Pairs
+======================================
+
+The `store_repl' method and the `$$ra' should be used because Aspell is
+able to learn from users misspellings.  For example on the first pass a
+user misspells _beginning_ as _beging_ so Aspell suggests:
+
+     begging, begin, being, Beijing, bagging, ....
+
+However the user then tries _begning_ and Aspell suggests
+
+     beginning, beaning, begging, ...
+
+so the user selects _beginning_.  However, later on in the document the
+user misspells it as _begng_ (*not* _beging_).  Normally Aspell will
+suggest.
+
+     began, begging, begin, begun, ...
+
+However because it knows the user misspelled _beginning_ as _beging_ it
+will instead suggest:
+
+     beginning, began, begging, begin, begun ...
+
+   I myself often misspelled beginning (and still do) as something close
+to begging and too many times wind up writing sentences such as
+"begging with ...".
+
+   Please also note that replacements commands have a memory.  Which
+means if you first store the replacement pair:
+
+     sicolagest -> psycolagest
+
+then store the replacement pair
+
+     psycolagest -> psychologist
+
+The replacement pair
+
+     sicolagest -> psychologist
+
+will also get stored so that you don't have to worry about it.
+
+\1f
+File: aspell.info,  Node: Adding Support For Other Languages,  Next: Implementation Notes,  Prev: Writing programs to use Aspell,  Up: Top
+
+7 Adding Support For Other Languages
+************************************
+
+Before you consider adding support for Aspell, first make sure that
+someone else has not already done it.  A good number of dictionaries
+off the Aspell home page at `http://aspell.net'.  If your language is
+not listed above feel free to send mail to aspell-dict at gnu org for
+help in getting started.
+
+   Adding a language to Aspell is fairly straightforward.  You basically
+need to create the language data file, and compile a new word list.
+
+* Menu:
+
+* The Language Data File::
+* Compiling the Word List::
+* Phonetic Code::
+* The Simple Soundslike::
+* Replacement Tables::
+* Affix Compression::
+* Controlling the Behavior of Run-together Words::
+* Creating A New Character Set::
+* Creating An Official Dictionary Package::
+
+\1f
+File: aspell.info,  Node: The Language Data File,  Next: Compiling the Word List,  Up: Adding Support For Other Languages
+
+7.1 The Language Data File
+==========================
+
+The basic format of the language data file is the same as it is for the
+Aspell configuration file.  It is named `LANG.dat' and is located in
+the architecture independent data dir for Aspell (option `data-dir')
+which is usually `PREFIX/share/aspell'.  Use `aspell config' to find
+out where it is in your installation.  By convention the language name
+should be the two letter ISO 639 language code if it exists, if not use
+the three letter code.
+
+   The language data file has several mandatory fields, and several
+optional ones.  All fields are case sensitive and should be in all
+lower case.
+
+   The two mandatory fields are `name' and `charset'.
+
+   `name' is the name of the language and should be the same as the
+file name (without the `.dat').
+
+   `charset' is the 8-bit character set Aspell will expect the word
+lists to be formatted in.  If possible choose from one of the standard
+ones provided with Aspell.  These are `iso-8859-*', `koi8-*', or
+`viscii'.  If your language does not require any non-ascii characters
+choose `iso-8859-1'.  If one of these standard character sets is not
+suitable for your language then you can create a new one.  *Note
+Creating A New Character Set::.
+
+   The optional fields are as follows:
+
+`data-encoding'
+     The encoding the language data files are expected to be in as well
+     as the default encoding to use when saving the personal
+     dictionaries.  It can be either `utf-8' or any of the 8-bit
+     encoding that Aspell supports.  If not set, then it defaults to
+     `charset'.
+
+`special'
+     Non-letter characters that can appear in your language such as the
+     `'' and `-'. The format for the value is a list separated by
+     spaces.  Each item of the list has the following format.
+
+          <char> <begin><middle><end>
+
+     CHAR is the non-letter character in question.  BEGIN, MIDDLE, END
+     are either a `-' or a `*'.  A star for BEGIN means that the
+     character can begin a word, a `-' means it can't.  The same is
+     true for MIDDLE and END. For example, the entry for the `'' in
+     English is:
+
+          ' -*-
+
+     To include more than one middle character just list them one after
+     another on the same line.  For example, to make both the `'' and
+     the `-' a middle character, use the following line in the language
+     data file:
+
+          special ' -*- - -*-
+
+     However, please be aware that adding special characters can have
+     unintended consequences due to limitations of Aspell.  For example
+     if the `-' was accepted as a middle character, then _every_ word
+     with a `-' in it would be flagged as a spelling error unless that
+     exact word is in the dictionary, even if both parts are in the
+     dictionary.  Also, having a `.' as an end character will cause the
+     `.' to be part of any misspelled words.  Which can get very
+     annoying if you misspell a word at the end of a sentence.
+
+`soundslike'
+     The name of the soundslike data for the language.  The data is
+     expected to be in the file `NAME_phonet.dat'.
+
+     If NAME is `simpile' then a very simple soundslike is used.  This
+     is not as powerful as full phonetic soundslike but it can be
+     computed a lot faster.  (*note The Simple Soundslike::)
+
+     If the soundslike name is `none', or this option is not specified,
+     then no soundslike will be used.  The effective soundslike is the
+     word converted to all lowercase and possibly with accents stripped
+     depending on the `store-as' option.  For languages with phonetic
+     spelling the difference will not be very noticeable.  However, for
+     languages with non-phonetic spelling there will be a noticeable
+     difference.  The difference you notice will depend on the quality
+     of the soundslike data file.  If you do not notice much of a
+     difference for a language with non-phonetic spelling that is a good
+     indication that the soundslike data is not rough enough--or the
+     words you are trying are not that badly misspelled.
+
+`invisible-soundslike'
+     Avoid storing the soundslike information with the word.  Instead
+     it is computed as needed.  This option defaults to true if the
+     soundslike is `none' or `simpile', and false when a phonetic
+     soundslike is used.
+
+`repl-table'
+     *Note Replacement Tables::.
+
+`keyboard'
+     The base name of the keyboard definition file to use.  For more
+     information see *Note Notes on Typo-Analysis::.
+
+`sug-split-char'
+     A list of characters which specifies which characters to insert
+     between two words when a word is split.  This is a list option.
+
+`affix'
+`affix-compress'
+`partially-expand'
+     *Note Affix Compression::.
+
+`store-as'
+     How the words are indexed in the dictionary.  If "stripped" then
+     the word is indexed in a lower case and de-accented form.  If
+     "lower", then the word is indexed in a lower case form but with
+     accent info still intact.  This just controls how the word is
+     indexed, not how it is stored.  The default is "stripped" unless
+     affix compression is used.
+
+`norm-required'
+     Should be set to true if your language makes use of private use
+     characters or when Normalization Form C is not the same as full
+     composition.
+
+`normalize'
+
+`norm-form'
+
+   Additional options includes options to control how run-together words
+are handled the same way as they are in the normal configuration files.
+for more information, please *Note Controlling the Behavior of
+Run-together Words::.
+
+\1f
+File: aspell.info,  Node: Compiling the Word List,  Next: Phonetic Code,  Prev: The Language Data File,  Up: Adding Support For Other Languages
+
+7.2 Compiling the Word List
+===========================
+
+Once you have a working language data file installed in the right place
+you are ready to compile the main word list.  To find out what to do,
+see *Note Working With Dictionaries::.  This section also includes
+instructions for creating the AWLI file.
+
+\1f
+File: aspell.info,  Node: Phonetic Code,  Next: The Simple Soundslike,  Prev: Compiling the Word List,  Up: Adding Support For Other Languages
+
+7.3 Phonetic Code
+=================
+
+Aspell is in fact the spell checker that comes up with the best
+suggestions if it finds an unknown word.  One reason is that it does
+not just compare the word with other words in the dictionary (like
+Ispell does) but also uses phonetic comparisons with other words.
+
+   The new table driven phonetic code is very flexible and setting up
+phonetic transformation rules for other languages is not difficult but
+there can be a number of stumbling blocks -- that's why I wrote this
+section.
+
+   The main phonetic code is free of any language specific code and
+should be powerful enough to allow setting up rules for any language.
+Anything which is language specific is kept in a plain text file and
+can easily be edited.  So it's even possible to write phonetic
+transformation rules if you don't have any programming skills.  All you
+need to know is how words of the language are written and how they are
+pronounced.
+
+7.3.1 Syntax of the transformation array
+----------------------------------------
+
+In the translation array there are two strings on each line; the first
+one is the search string (or switch name) and the second one is the
+replacement string (or switch parameter).  The line
+
+     version   VERSION
+
+is also required to appear somewhere in the translation array.  The
+version string can be anything but it should be changed whenever a new
+version of the translation array is released.  This is important
+because it will keep Aspell from using a compiled dictionary with the
+wrong set of rules.  For example, if when coming up with suggestion for
+`hallo', Aspell will use the new rules to come up with the soundslike
+say `H*L*', but if `hello' is stored in the dictionary using the old
+rules as `HL' instead of `H*L*' Aspell will never be able to come up
+with `hello'.  So to solve this problem Aspell checks if the version
+strings match and aborts with an error if they don't.  Thus it is
+important to update it whenever a new version of the translation array
+is released.  This is only a problem with the main word list as the
+personal word lists are now stored as simple word lists with a single
+header line (i.e. no soundslike data).
+
+   Each non switch line represents one replacement (transformation)
+rule.  Words beginning with the same letter must be grouped together;
+the order inside this group does not depend on alphabetical issues but
+it gives priorities; the higher the rule the higher the priority.
+That's why the first rule that matches is applied.  In the following
+example:
+
+     GH   _
+     G    K
+
+`GH -> _' has higher priority than `G -> K'
+
+   `_' represents the empty string "".  If `GH -> _' came after `G ->
+K', the second rule would never match because the algorithm would stop
+searching for more rules after the first match.  The above rules
+transform any `GH' to an empty string (delete them) and transforms any
+other `G' to `K'.
+
+   At the end of the first string of a line (the search string) there
+may optionally stand a number of characters in brackets.  One (only
+one!)  of these characters must fit.  It's comparable with the `[ ]'
+brackets in regular expressions.  The rule `DG(EIY) -> J' for example
+would match any `DGE', `DGI' and `DGY' and replace them with `J'.  This
+way you can reduce several rules to one.
+
+   Before the search string, one or more dashes `-' may be placed.
+Those search strings will be matched totally but only the beginning of
+the string will be replaced.  Furthermore, for these rules no follow-up
+rule will be searched (what this is will be explained later).  The rule
+`TCH-- '-> _ will match any word containing `TCH' (like `match') but
+will only replace the first character `T' with an empty string.  The
+number of dashes determines how many characters from the end will not
+be replaced.  After the replacement, the search for transformation
+rules continues with the not replaced `CH'!
+
+   If a `<' is appended to the search string, the search for
+replacement rules will continue with the replacement string and not with
+the next character of the word.  The rule `PH< -> F' for example would
+replace `PH' with `F' and then again start to search for a replacement
+rule for `F...'.  If there would also be rules like `FO '-> `O' and `F
+-> _' then words like `PHOXYZ' would be transformed to `OXYZ' and any
+occurrences of `PH' that are not followed by an `O' will be deleted like
+`PHIXYZ -> IXYZ'.  The second replacement however is not applied if the
+priority of this rule is lower than the priority of the first rule.
+
+   Priorities are added to a rule by putting a number between 0 and 9 at
+the end of the search string, for example `ING6 -> N'.  The higher the
+number the higher is the priority.
+
+   Priorities are especially important for the previously mentioned
+follow-up rules.  Follow-up rules are searched beginning from the last
+string of the first search string.  This is a bit complicated but I
+hope this example will make it clearer:
+
+     CHS      X
+     CH       G
+
+     HAU--1   H
+
+     SCH      SH
+
+   In this example `CHS' in the word `FUCHS' would be transformed to
+`X'.  If we take the word `DURCHSCHNITT' then things look a bit
+different.  Here `CH' belongs together and `SCH' belongs together and
+both are spoken separately.  The algorithm however first finds the
+string `CHS' which may not be transformed like in the previous word
+`FUCHS'.  At this point the algorithm can find a follow-up rule.  It
+takes the last character of the first matching rule (`CHS') which is
+`S' and looks for the next match, beginning from this character.  What
+it finds is clear: It finds `SCH -> SH', which has the same priority
+(no priority means standard priority, which is 5).  If the priority is
+the same or higher the follow-up rule will be applied.  Let's take a
+look at the word `SCHAUKEL'.  In this word `SCH' belongs together and
+may not be taken apart.  After the algorithm has found `SCH '-> `SH' it
+searches for a follow-up rule for `H+'`AUKEL'.  It finds `HAU--1 -> H',
+but does not apply it because its priority is lower than the one of the
+first rule.  You see that this is a very powerful feature but it also
+can easily lead to mistakes.  If you really don't need this feature you
+can turn it off by putting the line:
+
+     followup      0
+
+at the beginning of the phonetic table file.  As mentioned, for rules
+containing a `-' no follow-up rules are searched but giving such rules
+a priority is not totally senseless because they can be follow-up rules
+and in that case the priority makes sense again.  Follow-up rules of
+follow-up rules are not searched because this is in fact not needed
+very often.
+
+   The control character `^' says that the search string only matches
+at the beginning of words so that the rule `RH -> R' will only apply to
+words like `RHESUS' but not `PERHAPS'.  You can append another `^' to
+the search string.  In that case the algorithm treats the rest of the
+word totally separately from the first matched string at the beginning.
+This is useful for prefixes whose pronunciation does not depend on the
+rest of the word and vice versa like `OVER^^' in English for example.
+
+   The same way as `^' works does `$' only apply to words that end with
+the search string.  `GN$ -> N' only matches on words like `SIGN' but
+not `SIGNUM'.  If you use `^' and `$' together, both of them must fit
+`ENOUGH^$ -> NF' will only match the word `ENOUGH' and nothing else.
+
+   Of course you can combine all of the mentioned control characters but
+they must occur in this order: `< - priority ^ $'.  All characters must
+be written in CAPITAL letters.
+
+   If absolutely no rule can be found -- might happen if you use strange
+characters for which you don't have any replacement rule -- the next
+character will simply be skipped and the search for replacement rules
+will continue with the rest of the word.
+
+   If you want double letters to be reduced to one you must set up a
+rule like `LL- -> L'.  If double letters in the resulting phonetic word
+should be allowed, you must place the line:
+
+     collapse_result     0
+
+at the beginning of your transformation table file; otherwise set the
+value to `1'.  The English rules for example strip all vowels from
+words and so the word "GOGO" would be transformed to "K" and not to
+"KK" (as desired) if `collapse_result' is set to 1.  That's why the
+English rules have `collapse_result' set to `0'.
+
+   By default, all accents are removed from a word before it is matched
+to the soundslike rules.  If you do not want this then add the line
+
+     remove_accents      0
+
+   at the beginning of your file.  The exact definition of an accent is
+language dependent and is controlled via the character set file.  If you
+set remove_accents to '0' then you should also set "store-as" to "lower"
+in the language data file (not the phonetic transformation file)
+otherwise Aspell will have problems when both the accented and the
+de-accented version of a word appearing in the dictionary; it will
+consider one of them as incorrectly spelled.
+
+7.3.2 How do I start finally?
+-----------------------------
+
+Before you start to write an array of transformation rules, you should
+be aware that you have to do some work to make sure that things you do
+will result in correct transformation rules.
+
+7.3.2.1 Things that come in handy
+.................................
+
+First of all, you need to have a large word list of the language you
+want to make phonetics for.  It should contain about as many words as
+the dictionary of the spell checker.  If you don't have such a list,
+you will probably find an Ispell dictionary at
+`http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html' which will
+help you.  You can then make affix expansion via `ispell -e' and then
+pipe it through `tr " " "\n"' to put one word on each line.  After that
+you eventually have to convert special characters like `é' from
+Ispell's internal representation to latin1 encoding.  `sed s/e'/é/g'
+for example would replace all `e'' with `é'.
+
+   The second is that you know how to use regular expressions and know
+how to use `grep'.  You should for example know that:
+
+     grep ^[^aeiou]qu[io] wordlist | less
+
+will show you all words that begin with any character but `a', `e',
+`i', `o' or `u' and then continue with `qui' or `quo'.  This stuff is
+important for example to find out if a phonetic replacement rule you
+want to set up is valid for all words which match the expression you
+want to replace.  Taking a look at the regex(7) man page is a good idea.
+
+7.3.2.2 What the phonetic code should do
+........................................
+
+Normal text comparison works well as long as the typer misspells a word
+because he pressed one key he didn't really want to press.  In these
+cases, mostly one character differs from the original word.
+
+   In cases where the writer didn't know about the correct spelling of
+the word, the word may have several characters that differ from the
+original word but usually the word would still sound like the original.
+Someone might think that `tough' is spelled `taff'.  No spell checker
+without phonetic code will come to the idea that this might be `tough',
+but a spell checker who knows that `taff' would be pronounced like
+`tough' will make good suggestions to the user.  Another example could
+be `funetik' and `phonetic'.
+
+   From these examples you can see that the phonetic transformation
+should not be too fussy and too precise.  If you implement a whole
+phonetic dictionary as you can find it in books this will not be very
+useful because then there could still be many characters differing from
+the misspelled and the desired word.  What you should do if you
+implement the phonetic transformation table is to reduce the number of
+used letters to the only really necessary ones.
+
+   Characters that sound similar should be reduced to one.  In the
+English language for example `Z' sounds like `S' and that's why the
+transformation rule `Z -> S' is present in the replacement table.  "PH
+is spoken like "F and so we have a `PH -> F' rule.
+
+   If you take a closer look you will even see that vowels sound very
+similar in the English language: `contradiction', `cuntradiction',
+`cantradiction' or `centradiction' in fact sound nearly the same, don't
+they? Therefore the English phonetic replacement rules not only reduce
+all vowels to one but even remove them all (removing is done by just
+setting up no rule for those letters).  The phonetic code of
+"contradiction" is "KNTRTKXN" and if you try to read this
+letter-monster loud you will hear that it still sound a bit like
+`contradiction'.  You also see that "D" is transformed to "T" because
+they nearly sound the same.
+
+   If you think you have found a regularity you should _always_ take
+your word list and `grep' for the corresponding regular expression you
+want to make a transformation rule for.  An example: If you come to the
+idea that all English words ending on `ough' sound like `AF' at the end
+because you think of `enough' and `tough'.  If you then `grep' for the
+corresponding regular expression by `grep -i ough$ wordlist' you will
+see that the rule you wanted to set up is not correct because the rule
+doesn't fit to words like `although' or `bough'.  So you have to define
+your rule more precisely or you have to set up exceptions if the number
+of words that differ from the desired rule is not too big.
+
+   Don't forget about follow-up rules which can help in many cases but
+which also can lead to confusion and unwanted side effects.  It's also
+important to write exceptions in front of the more general rules (`GH'
+before `G' etc.).
+
+   If you think you have set up a number of rules that may produce some
+good results try them out! If you run Aspell as `aspell
+--lang=YOUR_LANGUAGE pipe' you get a prompt at which you can type in
+words.  If you just type words Aspell checks them and eventually makes
+suggestions if they are misspelled.  If you type in `$$Sw WORD' you
+will see the phonetic transformation and you can test out if your work
+does what you want.
+
+   Another good way to check that changes you make to your rules don't
+have any bad side effects is to create another list from your word list
+which contains not only the word of the word list but also the
+corresponding phonetic version of this word on the same line.  If you
+do this once before the change and once after the change you can make a
+diff (see `man diff') to see what _really_ changed.  To do this use the
+command `aspell --lang=YOUR_LANGUAGE soundslike'.  In this mode Aspell
+will output the the original word and then its soundslike separated by
+a tab character for each word you give it.  If you are interested in
+seeing how the algorithm works you can download a set of useful
+programs from
+`http://members.xoom.com/maccy/spell/phonet-utils.tar.gz'.  This
+includes a program that produces a list as mentioned above and another
+program which illustrates how the algorithm works.  It uses the same
+transformation table as Aspell and so it helps a lot during the process
+of creating a phonetic transformation table for Aspell.
+
+   During your work you should write down your basic ideas so that other
+people are able to understand what you did (and you still know about it
+after a few weeks).  The English table has a huge documentation
+appended as an example.
+
+   Now you can start experimenting with all the things you just read and
+perhaps set up a nice phonetic transformation table for your language
+to help Aspell to come up with the best correction suggestions ever
+seen also for your language.  Take a look at the Aspell homepage to see
+if there is already a transformation table for your language.  If there
+is one you might also take a look at it to see if it could be improved.
+
+   If you think that this section helped you or if you think that this
+is just a waste of time you can send any feedback to
+<bjoern.jacke@gmx.de>.
+
+\1f
+File: aspell.info,  Node: The Simple Soundslike,  Next: Replacement Tables,  Prev: Phonetic Code,  Up: Adding Support For Other Languages
+
+7.4 The Simple Soundslike
+=========================
+
+The simple soundslike goes something like this:
+
+     sl0[0] = lookup0(word[0])
+     for (i = 1; i < size; i++)
+       sl0[i] = lookup(word[i]);
+     s = 0;
+     for (i = 0; i < size; i++)
+       sl.append(al0[i]) unless sl0[i] == 0 || sl0[i] == sl0[i-1];
+
+   Basically each character can be converted to another character or
+deleted.  A separate lookup table is used for the first character.  If
+the same soundslike letter is repeated, the duplicate is removed.
+
+   By default all accents are removed, and all vowels are deleted unless
+they appear at the start of the word in which case they are converted
+to a `*'.  The exact behavior can be customized via the character data
+file.
+
+   The simplified soundslike has the advantage that it is very fast to
+compute and thus does not need to be stored with a word.  Also, when
+affix compression is used and the `partially-expand' is given the
+results will be identical to the results when affix compression is not
+used.
+
+   Of course it is not nearly as powerful as the phonetic soundslike.
+
+\1f
+File: aspell.info,  Node: Replacement Tables,  Next: Affix Compression,  Prev: The Simple Soundslike,  Up: Adding Support For Other Languages
+
+7.5 Replacement Tables
+======================
+
+When phonetic code is not used a replacement table can be used instead.
+To enable the use of a replacement table add the line `repl-table
+LANG', in which case the replacement table is excepted to be in the
+file `LANG_repl.dat'.  A complete file name can also be specified in
+place of LANG.  For compatibility with MySpell the replacement table
+can also be part of the affix file, in which case `repl-table' will be
+`LANG_affix.dat"'.
+
+   Replacement table syntax:
+
+     REP [number_of_replacement_definitions]
+     REP [what] [replacement]
+     REP [what] [replacement]
+
+   For example a possible English replacement table definition to
+handle misspelled consonants:
+
+     REP 8
+     REP f ph
+     REP ph f
+     REP f gh
+     REP gh f
+     REP j dg
+     REP dg j
+     REP k ch
+     REP ch k
+
+\1f
+File: aspell.info,  Node: Affix Compression,  Next: Controlling the Behavior of Run-together Words,  Prev: Replacement Tables,  Up: Adding Support For Other Languages
+
+7.6 Affix Compression
+=====================
+
+Aspell, as of version 0.60, now has support for affix compression.  The
+codebase comes from MySpell found in OpenOffice.
+
+   To add support for affix compression add the following lines to the
+language data file.
+
+     affix          LANG
+     affix-compress true
+
+   The line `affix LANG' adds support for recognizing affix
+information, and the line `affix-compress true' enables affix
+compression.
+
+   The affix file is expected to be named `LANG_affix.dat'.  It is the
+exact same format as those used by MySpell.  More information can be
+found in the myspell/ directory of the distribution or at
+`http://lingucomponent.openoffice.org/dictionary.html'.
+
+   Affix compression can also be used with soundslike lookup.  Aspell
+does this by only storing the soundslike for the root word.  When a
+word is misspelled it will search for a soundslike close to all
+possible roots of the misspelled word.
+
+   When no soundslike information, or the simple soundslike, is used it
+may be beneficial to specify the option `partially-expand' which will
+partially expand a word with affix information so that the affix flags
+do not affect the first 3 letters of the word.  This will allow Aspell
+to get more accurate results when scanning the list for near misses
+since the full word can be used and not just the root.  Specifying this
+option, however, will also effectively expand any prefixes.  Thus this
+option should not be used for prefix heavy languages such as Hebrew.
+
+   An existing word list, without affix info, can be affix compressed
+using using `aspell munch-list'.
+
+7.6.1 Format of the Affix File
+------------------------------
+
+An affix is either a  prefix or a suffix attached to root words to make
+other words.  For example supply -> supplied by dropping the "y" and
+adding an "ied" (the suffix).
+
+   Here is an example of how to define one specific suffix borrowed
+from the English affix file.
+
+     SFX D Y 4
+     SFX D   0     d          e
+     SFX D   y     ied        [^aeiou]y
+     SFX D   0     ed         [^ey]
+     SFX D   0     ed         [aeiou]y
+
+   This file is space delimited and case sensitive.  So this information
+can be interpreted as follows:
+
+   The first line has 4 fields:
+
+1    SFX         indicates this is a suffix
+2    D           is the name of the character which represents this suffix
+3    Y           indicates it can be combined with prefixes (cross product)
+4    4           indicates that sequence of 4 affix entries are needed to
+                 properly store the affix information
+
+   The remaining lines describe the unique information for the 4 affix
+entries that make up this affix.  Each line can be interpreted as
+follows: (note fields 1 and 2 are used as a check against line 1 info)
+
+1    SFX         indicates this is a suffix
+2    D           is the name of the character which represents this affix
+3    y           the string of chars to strip off before adding affix (a 0
+                 here indicates the NULL string)
+4    ied         the string of affix characters to add (a 0 here indicates
+                 the NULL string)
+5    [^aeiou]y   the conditions which must be met before the affix can be
+                 applied
+
+   Field 5 is interesting.  Since this is a suffix, field 5 tells us
+that there are 2 conditions that must be met.  The first condition is
+that the next to the last character in the word must _not_ be any of the
+following "a", "e", "i", "o" or "u".  The second condition is that the
+last character of the word must end in "y".
+
+7.6.2 When Compared With Ispell
+-------------------------------
+
+Now for comparison purposes, here is the same information from the
+Ispell `english.aff' compression file which was used as the basis for
+the OOo one.
+
+     flag *D:
+         E           >       D               # As in create > created
+         [^AEIOU]Y   >       -Y,IED          # As in imply > implied
+         [^EY]       >       ED              # As in cross > crossed
+         [AEIOU]Y    >       ED              # As in convey > conveyed
+
+   The Ispell information has exactly the same information but in a
+slightly different (case-insensitive) format:
+
+   Here are the ways to see the mapping from Ispell .aff format to our
+OOo format.
+
+  1. The Ispell english.aff has flag D under the "suffix" section so
+     you know it is a suffix.
+
+  2. The D is the character assigned to this suffix
+
+  3. `*' indicates that it can be combined with prefixes
+
+  4. Each line following the : describes the affix entries needed to
+     define this suffix
+
+        * The first field is the conditions that must be met.
+
+        * The second field is after the > if a "-" occurs is the string
+          to strip off (can be blank).
+
+        * The third field is the string to add (the affix)
+
+   In addition all chars in Ispell aff files are in uppercase.
+
+7.6.3 Specifying Affix Flags
+----------------------------
+
+Affix flags are specified in the word list by specifying them after the
+`/' character:
+
+     WORD/FLAGS
+
+   For example:
+
+     create/DG
+
+will associate the `D' and `G' flag with the word create.
+
+\1f
+File: aspell.info,  Node: Controlling the Behavior of Run-together Words,  Next: Creating A New Character Set,  Prev: Affix Compression,  Up: Adding Support For Other Languages
+
+7.7 Controlling the Behavior of Run-together Words
+==================================================
+
+Aspell currently has support for unconditionally accepting run-together
+words.
+
+   Support for unconditionally accepting run-together words can either
+be turned on in the language data file or as a normal option via the
+`run-together' option.  The `run-together-limit' options controls the
+maximum number of words that can be strung together, the default is
+normally 2.  The `run-together-min' options controls the minimum length
+of the individual components of the run together word, the default is
+normally 3.  Both the `run-together-limit' and `run-together-min'
+option may be specified in both the language data file or as a normal
+option.
+
+\1f
+File: aspell.info,  Node: Creating A New Character Set,  Next: Creating An Official Dictionary Package,  Prev: Controlling the Behavior of Run-together Words,  Up: Adding Support For Other Languages
+
+7.8 Creating A New Character Set
+================================
+
+If there is not a standard character set for your language then you can
+invent one.  The new charset will only be used by Aspell internally.
+If the option `data-encoding' is set to `utf-8', and your current
+locale character type is always set to `utf-8', then you can use UTF-8
+for everything and not worry yourself that an 8-bit character set is
+being used internally.  If your language has no more than 210 distinct
+symbols, including different capitalizations and accents, then Aspell
+can support it.
+
+   The first thing to do is to download the Aspell lang package (*note
+Creating An Official Dictionary Package::) and check if one of the
+provided charsets in this package will suite your needs.  Non-standard
+character sets are provided for many scripts and languages.  If not,
+then see the included `README' file for instructions on creating a new
+one.  Version 0.1, and 0.2 of mkchardata _will not_ work as the format
+of the character data file has changed.
+
+\1f
+File: aspell.info,  Node: Creating An Official Dictionary Package,  Prev: Creating A New Character Set,  Up: Adding Support For Other Languages
+
+7.9 Creating An Official Dictionary Package
+===========================================
+
+Once you have a basic dictionary working, you should consider creating
+an official package so that it can be distributed with Aspell. To do so
+download the aspell-lang package available at
+`ftp://ftp.gnu.org/gnu/aspell/aspell-lang-VERSION.tar.bz2' or in the
+"aspell-lang" module in the Aspell CVS repository available at
+`https://savannah.gnu.org/cvs/?group=aspell'.  See the included
+`README' file for what to do.  Or, send mail to aspell-dict at gnu org
+asking for help on how to get started.
+
+\1f
+File: aspell.info,  Node: Implementation Notes,  Next: Languages Which Aspell can Support,  Prev: Adding Support For Other Languages,  Up: Top
+
+Appendix A Implementation Notes
+*******************************
+
+* Menu:
+
+* Aspell Suggestion Strategy::
+* Notes on 8-bit Characters::
+
+\1f
+File: aspell.info,  Node: Aspell Suggestion Strategy,  Next: Notes on 8-bit Characters,  Up: Implementation Notes
+
+A.1 Aspell Suggestion Strategy
+==============================
+
+The magic behind my spell checker comes from merging Lawrence Philips
+excellent metaphone algorithm and Ispell's near miss strategy which is
+inserting a space or hyphen, interchanging two adjacent letters,
+changing one letter, deleting a letter, or adding a letter.
+
+   The process goes something like this.
+
+  1. Convert the misspelled word to its soundslike equivalent (its
+     metaphone for English words).
+
+  2. Find all words that have a soundslike within one or two edit
+     distances from the original word's soundslike.  The edit distance
+     is the total number of deletions, insertions, exchanges, or
+     adjacent swaps needed to make one string equivalent to the other.
+     When set to only look for soundslikes within one edit distance it
+     tries all possible soundslike combinations and checks if each one
+     is in the dictionary.  When set to find all soundslike within two
+     edit distances it scans through the entire dictionary and quickly
+     scores each soundslike.  The scoring is quick because it will give
+     up if the two soundslikes are more than two edit distances apart.
+
+  3. Find misspelled words that have a correctly spelled replacement by
+     the same criteria of step number 2 and 3.  That is the misspelled
+     word in the word pair (such as "teh -> the") would appear in the
+     suggestions list as if it was a correct spelling.
+
+  4. Score the result list and return the words with the lowest score.
+     The score is roughly the weighed average of the weighed edit
+     distance of the word to the misspelled word and the soundslike
+     equivalent of the two words.  The weighted edit distance is like
+     the edit distance except that the various edits have weights
+     attached to them.
+
+  5. Replace the misspelled words that have correctly spelled
+     replacements with their replacements and remove any duplicates
+     that might arise because of this.
+
+   Please note that the soundslike equivalent is a rough approximation
+of how the words sounds.  It is not the phoneme of the word by any
+means.  For more details about exactly how each step is performed
+please see the file `suggest.cc'.  For more information on the metaphone
+algorithm please see the data file `english_phonet.dat'.
+
+\1f
+File: aspell.info,  Node: Notes on 8-bit Characters,  Prev: Aspell Suggestion Strategy,  Up: Implementation Notes
+
+A.2 Notes on 8-bit Characters
+=============================
+
+There is a very good reason I use 8-bit characters in Aspell. Speed and
+simplicity. While many parts of my code can fairly easily be converted
+to some sort of wide character as my code is clean. Other parts cannot
+be.
+
+   One of the reasons why is because in many, many places I use a direct
+lookup to find out various information about characters. With 8-bit
+characters this is very feasible because there is only 256 of them.
+With 16-bit wide characters this will waste a LOT of space. With 32-bit
+characters this is just plain impossible. Converting the lookup tables
+to another form is certainly possible but degrades performance
+significantly.
+
+   Furthermore, some of my algorithms rely on words consisting only on a
+small number of distinct characters (often around 30 when case and
+accents are not considered). When the possible character can consist of
+any Unicode character this number becomes several thousand, if that. In
+order for these algorithms to still be used, some sort of limit will
+need to be placed on the possible characters the word can contain. If I
+impose that limit, I might as well use some sort of 8-bit characters
+set which will automatically place the limit on what the characters can
+be.
+
+   There is also the issue of how I should store the word lists in
+memory? As a string of 32 bit wide characters. Now that is using up 4
+times more memory than characters would and for languages that can fit
+within an 8-bit character that is, in my view, a gross waste of memory.
+So maybe I should store them is some variable width format such as
+UTF-8. Unfortunately, way, way too many of the algorithms will simply
+not work with variable width characters without significant
+modification which will very likely degrade performance. So the
+solution is to work with the characters as 32-bit wide characters and
+then convert it to a shorter representation when storing them in the
+lookup tables. Now that can lead to an inefficiency. I could also use
+16 bit wide characters, however that may not be good enough to hold all
+future versions of Unicode and therefore has the same problems.
+
+   As a response to the space waste used by storing word lists in some
+sort of wide format some one asked:
+
+     Since hard drives are cheaper and cheaper, you could store a
+     dictionary in a usable (uncompressed) form and use it directly
+     with memory mapping. Then the efficiency would directly depend on
+     the disk caching method, and only the used part of the
+     dictionaries would really be loaded into memory. You would no more
+     have to load plain dictionaries into main memory, you'll just want
+     to compute some indexes (or something like that) after mapping.
+
+   However, the fact of the matter is that most of the dictionary will
+be read into memory anyway if it is available. If it is not available
+then there would be a good deal of disk swaps. Making characters 32-bit
+wide will increase the chance that there are more disk swaps.  So the
+bottom line is that it is more efficient to convert characters from
+something like UTF-8 into some sort of 8-bit character. I could also
+use some sort of disk space lookup table such as the Berkeley Database.
+However this will *definitely* degrade performance.
+
+   The bottom line is that keeping Aspell 8-bit internally is a very
+well though out decision that is not likely to change any time soon.
+Feel free to challenge me on it, but, don't expect me to change my mind
+unless you can bring up some point that I have not thought of before
+and quite possibly a patch to solve cleanly convert Aspell to Unicode
+internally without a serious performance lost OR serious memory usage
+increase.
+
+\1f
+File: aspell.info,  Node: Languages Which Aspell can Support,  Next: Language Related Issues,  Prev: Implementation Notes,  Up: Top
+
+Appendix B Languages Which Aspell can Support
+*********************************************
+
+Even though Aspell will remain 8-bit internally it should still be able
+to support any written languages not based on a logographic script.
+The only logographic writing system in current use are those based on
+hànzi which includes Chinese, Japanese, and sometimes Korean.
+
+* Menu:
+
+* Supported::
+* Unsupported::
+* Multiple Scripts::
+* Planned Dictionaries::
+* References::
+
+\1f
+File: aspell.info,  Node: Supported,  Next: Unsupported,  Up: Languages Which Aspell can Support
+
+B.1 Supported
+=============
+
+Aspell 0.60 should be able to support the following languages:
+
+Code Language Name          Script                Dictionary     Gettext
+                                                  Available      Translation
+
+aa   Afar                   Latin                 -              -
+af   Afrikaans              Latin                 0.50           -
+ak   Akan                   Latin                 Maybe          -
+am   Amharic                Ethiopic              0.60           -
+ar   Arabic                 Arabic                0.60           -
+as   Assamese               Bengali               -              -
+av   Avar                   Cyrillic              -              -
+ay   Aymara                 Latin                 -              -
+az   Azerbaijani            Cyrillic, Latin       0.60           -
+
+ba   Bashkir                Cyrillic              -              -
+be   Belarusian             Cyrillic              0.50           Incomplete
+bg   Bulgarian              Cyrillic              0.50           -
+bh   Bihari                 Devanagari            -              -
+bm   Bambara                Latin                 -              -
+bn   Bengali                Bengali               0.60           -
+bo   Tibetan                Tibetan               -              -
+br   Breton                 Latin                 0.50           -
+bs   Bosnian                Latin                 Maybe          -
+
+ca   Catalan / Valencian    Latin                 0.50           Yes
+ce   Chechen                Cyrillic              -              -
+co   Corsican               Latin                 Maybe          -
+cop  Coptic                 Greek                 Maybe          -
+cs   Czech                  Latin                 0.50           Yes
+csb  Kashubian              Latin                 0.60           -
+cv   Chuvash                Cyrillic              -              -
+cy   Welsh                  Latin                 0.50           -
+
+da   Danish                 Latin                 0.50           Incomplete
+de   German                 Latin                 0.50           Yes
+dyu  Dyula                  -                     Maybe          -
+
+ee   Ewe                    Latin                 -              -
+el   Greek                  Greek                 0.50           -
+en   English                Latin                 0.50           Yes
+eo   Esperanto              Latin                 0.50           -
+es   Spanish                Latin                 0.50           Incomplete
+et   Estonian               Latin                 0.60           -
+eu   Basque                 Latin                 Maybe          -
+
+fa   Persian                Arabic                0.60           -
+ff   Fulah                  Latin                 Maybe          -
+fi   Finnish                Latin                 0.60           -
+fj   Fijian                 Latin                 Maybe          -
+fo   Faroese                Latin                 0.50           -
+fr   French                 Latin                 0.50           Yes
+fur  Friulian               Latin                 Maybe          -
+fy   Frisian                Latin                 0.60           -
+
+ga   Irish                  Latin                 0.50           Yes
+gd   Scottish Gaelic        Latin                 0.50           -
+gl   Gallegan               Latin                 0.50           -
+gn   Guarani                Latin                 Maybe          -
+gu   Gujarati               Gujarati              0.60           -
+gv   Manx Gaelic            Latin                 0.50           -
+
+ha   Hausa                  Latin                 Maybe          -
+he   Hebrew                 Hebrew                0.60           -
+hi   Hindi                  Devanagari            0.60           -
+hil  Hiligaynon             Latin                 0.50           -
+ho   Hiri Motu              Latin                 -              -
+hr   Croatian               Latin                 0.50           -
+hsb  Upper Sorbian          Latin                 0.60           -
+ht   Haitian Creole         Latin                 Maybe          -
+hu   Hungarian              Latin                 0.60           -
+hy   Armenian               Armenian              0.60           -
+hz   Herero                 Latin                 -              -
+
+ia   Interlingua (IALA)     Latin                 0.50           -
+id   Indonesian             Arabic, Latin         0.50           -
+ig   Igbo                   Latin                 Maybe          -
+ii   Sichuan Yi             Yi                    -              -
+io   Ido                    Latin                 -              -
+is   Icelandic              Latin                 0.50           -
+it   Italian                Latin                 0.50           Yes
+
+jv   Javanese               Javanese, Latin       Maybe          -
+
+ka   Georgian               Georgian              -              -
+kg   Kongo                  Latin                 Maybe          -
+ki   Kikuyu / Gikuyu        Latin                 -              -
+kj   Kwanyama               Latin                 -              -
+kk   Kazakh                 Cyrillic              -              -
+km   Khmer                  Khmer                 Maybe          -
+kn   Kannada                Kannada               Planned        -
+kr   Kanuri                 Latin                 -              -
+ks   Kashmiri               Arabic, Devanagari    -              -
+ku   Kurdish                Arabic, Cyrillic,     0.50           -
+                            Latin                                
+kv   Komi                   Cyrillic              -              -
+ky   Kirghiz                Arabic, Cyrillic,     Maybe          -
+                            Latin                                
+
+la   Latin                  Latin                 0.60           -
+lb   Luxembourgish          Latin                 Maybe          -
+lg   Ganda                  Latin                 Maybe          -
+li   Limburgian             Latin                 Maybe          -
+ln   Lingala                Latin                 Maybe          -
+lt   Lithuanian             Latin                 0.60           -
+lu   Luba-Katanga           Latin                 -              -
+lv   Latvian                Latin                 0.60           -
+
+mg   Malagasy               Latin                 0.50           -
+mi   Maori                  Latin                 0.50           -
+mk   Macedonian             Cyrillic              0.50           -
+ml   Malayalam              Latin, Malayalam      0.60           -
+mn   Mongolian              Cyrillic, Mongolian   0.60           Incomplete
+mo   Moldavian              Cyrillic              -              -
+mos  Mossi                  -                     Maybe          -
+mr   Marathi                Devanagari            0.60           -
+ms   Malay                  Arabic, Latin         0.50           -
+mt   Maltese                Latin                 0.50           -
+my   Burmese                Myanmar               -              -
+
+nb   Norwegian Bokmal       Latin                 0.50           -
+nd   North Ndebele          Latin                 Maybe          -
+nds  Low Saxon              Latin                 0.60           -
+ne   Nepali                 Devanagari            Maybe          -
+ng   Ndonga                 Latin                 Maybe          -
+nl   Dutch                  Latin                 0.50           Yes
+nn   Norwegian Nynorsk      Latin                 0.50           -
+nr   South Ndebele          Latin                 Maybe          -
+nso  Northern Sotho         Latin                 Maybe          -
+nv   Navajo                 Latin                 Maybe          -
+ny   Nyanja                 Latin                 0.50           -
+
+oc   Occitan / Provencal    Latin                 Maybe          -
+om   Oromo                  Ethiopic, Latin       -              -
+or   Oriya                  Oriya                 0.60           -
+os   Ossetic                Cyrillic              -              -
+
+pa   Punjabi                Gurmukhi              0.60           -
+pl   Polish                 Latin                 0.50           -
+ps   Pushto                 Arabic                -              -
+pt   Portuguese             Latin                 0.50           Incomplete
+
+qu   Quechua                Latin                 0.60           -
+
+rn   Rundi                  Latin                 Maybe          -
+ro   Romanian               Latin                 0.50           Incomplete
+ru   Russian                Cyrillic              0.50           Yes
+rw   Kinyarwanda            Latin                 0.50           -
+
+sc   Sardinian              Latin                 0.50           -
+sd   Sindhi                 Arabic                -              -
+sg   Sango                  Latin                 Maybe          -
+si   Sinhalese              Sinhala               -              -
+sk   Slovak                 Latin                 0.50           Yes
+sl   Slovenian              Latin                 0.50           Yes
+sm   Samoan                 Latin                 Maybe          -
+sn   Shona                  Latin                 Maybe          -
+so   Somali                 Latin                 Maybe          -
+sq   Albanian               Latin                 Maybe          -
+sr   Serbian                Cyrillic, Latin       0.60           Incomplete
+ss   Swati                  Latin                 Maybe          -
+st   Southern Sotho         Latin                 Maybe          -
+su   Sundanese              Latin                 Maybe          -
+sv   Swedish                Latin                 0.50           Incomplete
+sw   Swahili                Latin                 0.50           -
+
+ta   Tamil                  Tamil                 0.60           -
+te   Telugu                 Telugu                0.60           -
+tet  Tetum                  Latin                 0.50           -
+tg   Tajik                  Arabic, Cyrillic,     Maybe          Incomplete
+                            Latin                                
+ti   Tigrinya               Ethiopic              Maybe          -
+tk   Turkmen                Arabic, Cyrillic,     0.50           -
+                            Latin                                
+tl   Tagalog                Latin, Tagalog        0.50           -
+tn   Tswana                 Latin                 0.50           -
+to   Tonga                  Latin                 Maybe          -
+tr   Turkish                Arabic, Latin         0.50           -
+ts   Tsonga                 Latin                 Maybe          -
+tt   Tatar                  Cyrillic              -              -
+tw   Twi                    Latin                 -              -
+ty   Tahitian               Latin                 Maybe          -
+
+ug   Uighur                 Arabic, Cyrillic,     -              -
+                            Latin                                
+uk   Ukrainian              Cyrillic              0.50           Yes
+ur   Urdu                   Arabic                Maybe          -
+uz   Uzbek                  Cyrillic, Latin       0.60           -
+
+ve   Venda                  Latin                 Maybe          -
+vi   Vietnamese             Latin                 0.60           Yes
+
+wa   Walloon                Latin                 0.50           Incomplete
+wo   Wolof                  Latin                 Maybe          -
+
+xh   Xhosa                  Latin                 Maybe          -
+
+yi   Yiddish                Hebrew                0.60           -
+yo   Yoruba                 Latin                 Maybe          -
+
+za   Zhuang                 Latin                 -              -
+zu   Zulu                   Latin                 0.50           -
+
+   Dictionaries marked as "0.50" are available for Aspell 0.50.  Ones
+marked as "0.60" are available for Aspell 0.60 only.  Ones marked as
+"Planned" should eventually be available.  Ones marked as "Maybe" might
+be available in the future.  *Note Planned Dictionaries::, for more
+info.
+
+B.1.1 Notes on Latin Languages
+------------------------------
+
+Any word that can be written using one of the Latin ISO-8859 character
+sets (ISO-8859-1,2,3,4,9,10,13,14,15,16) can be written, in decomposed
+form, using the ASCII characters, the 23 additional letters:
+
+     U+00C6 LATIN CAPITAL LETTER AE
+     U+00D0 LATIN CAPITAL LETTER ETH
+     U+00D8 LATIN CAPITAL LETTER O WITH STROKE
+     U+00DE LATIN CAPITAL LETTER THORN
+     U+00DE LATIN SMALL LETTER THORN
+     U+00DF LATIN SMALL LETTER SHARP S
+     U+00E6 LATIN SMALL LETTER AE
+     U+00F0 LATIN SMALL LETTER ETH
+     U+00F8 LATIN SMALL LETTER O WITH STROKE
+     U+0110 LATIN CAPITAL LETTER D WITH STROKE
+     U+0111 LATIN SMALL LETTER D WITH STROKE
+     U+0126 LATIN CAPITAL LETTER H WITH STROKE
+     U+0127 LATIN SMALL LETTER H WITH STROKE
+     U+0131 LATIN SMALL LETTER DOTLESS I
+     U+0138 LATIN SMALL LETTER KRA
+     U+0141 LATIN CAPITAL LETTER L WITH STROKE
+     U+0142 LATIN SMALL LETTER L WITH STROKE
+     U+014A LATIN CAPITAL LETTER ENG
+     U+014B LATIN SMALL LETTER ENG
+     U+0152 LATIN CAPITAL LIGATURE OE
+     U+0153 LATIN SMALL LIGATURE OE
+     U+0166 LATIN CAPITAL LETTER T WITH STROKE
+     U+0167 LATIN SMALL LETTER T WITH STROKE
+
+   and the 14 modifiers:
+
+     U+0300 COMBINING GRAVE ACCENT
+     U+0301 COMBINING ACUTE ACCENT
+     U+0302 COMBINING CIRCUMFLEX ACCENT
+     U+0303 COMBINING TILDE
+     U+0304 COMBINING MACRON
+     U+0306 COMBINING BREVE
+     U+0307 COMBINING DOT ABOVE
+     U+0308 COMBINING DIAERESIS
+     U+030A COMBINING RING ABOVE
+     U+030B COMBINING DOUBLE ACUTE ACCENT
+     U+030C COMBINING CARON
+     U+0326 COMBINING COMMA BELOW
+     U+0327 COMBINING CEDILLA
+     U+0328 COMBINING OGONEK
+
+   Which is a total of 37 additional Unicode code points.
+
+   All ISO-8859 character leaves the characters 0x00 - 0x1F, and 0x80 -
+0x9F unmapped as they are generally used as control characters.  Of
+those, 0x01 - 0x0F, 0x11 - 0x1F and 0x80 - 0x9F may be mapped to
+anything in Aspell.  This is a total of 62 characters which can be
+remapped in any ISO-8859 character set.  Thus, by remapping 37 of the 62
+characters to the previously specified Unicode code-points, any modified
+ISO-8859 character set can be used for any Latin languages covered by
+ISO-8859.  Of course decomposing every single accented character wastes
+a lot of space, so only characters that cannot be represented in the
+precomposed form should be broken up.  By using this trick it is
+possible to store foreign words in the correctly accented form in the
+dictionary even if the precomposed character is not in the current
+character set.
+
+   Any letter in the Unicode range U+0000 - U+0249, U+1E00 - U+1EFF
+(Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B,
+and Latin Extended Additional) can be represented using around 175
+basic letters, and 25 modifiers which is less than 210 and can thus fit
+in an Aspell 8-bit character set.  Since this Unicode range covers any
+possible Latin language this special character set can be used to
+represent any word written using the Latin script if so desired.
+
+B.1.2 Syllabic
+--------------
+
+Syllabic languages use a separate symbol for each syllable of the
+language.  Even thought most of them have more than 210 distinct
+symbols Aspell can still support them by breaking them up.
+
+B.1.2.1 The Ethiopic Syllabary
+..............................
+
+Even though the Ethiopic script has more than 210 distinct characters
+Aspell can still handle it.  The idea is to split each character into
+two parts based on the Consonant and Vowel parts.  This encoding of the
+syllabary is far more useful to Aspell than if they were stored in UTF-8
+or UTF-16.  In fact, the exiting suggestion strategy of Aspell will work
+well with this encoding without any additional modifications.  However,
+additional improvements may be possible by taking advantage of the
+consonant-vowel structure of this encoding.
+
+   In fact, the split consonant-vowel representation may prove to be so
+useful that it may be beneficial to encode other syllabary in this
+fashion, even if they are less than 210 of them.
+
+   The code to break up a syllabary into the consonant-vowel part is
+part of the Unicode normalization process.
+
+B.1.2.2 The Yi Syllabary
+........................
+
+A very large syllabary with 819 distinct symbols.  However, like
+Ethiopic, it should be possible to support this script by breaking it
+up.
+
+B.1.2.3 The Ojibwe Syllabary
+............................
+
+With only 120 distinct symbols, Aspell can actually support this one as
+is.  However, as previously mentioned, it may be beneficial to break it
+up into the consonant-vowel representation anyway.
+
+\1f
+File: aspell.info,  Node: Unsupported,  Next: Multiple Scripts,  Prev: Supported,  Up: Languages Which Aspell can Support
+
+B.2 Unsupported
+===============
+
+These languages, when written in the given script, are currently
+unsupported by Aspell for one reason or another.
+
+Code   Language Name   Script
+ja     Japanese        Japanese
+km     Khmer           Khmer
+ko     Korean          Han, Hangul
+lo     Lao             Lao
+th     Thai            Thai
+zh     Chinese         Han
+
+B.2.1 The Thai, Khmer, and Lao Scripts
+--------------------------------------
+
+The Thai, Khmer, and Lao scripts presents a different problem for
+Aspell.  The problem is not that there are more than 210 unique symbols,
+but that there are no spaces between words.  This means that there is no
+easy way to split a sentence into individual words.  However, it is
+still possible to spell check these scripts, it is just a lot more
+difficult.  I will be happy to work with someone who is interested in
+adding Thai, Khmer, or Lao support to Aspell, but it is not likely
+something I will do on my own in the foreseeable future.
+
+B.2.2 Languages which use Hànzi Characters
+------------------------------------------
+
+Hànzi Characters are used to write Chinese, Japanese, Korean, and were
+once used to write Vietnamese.  Each hànzi character represents a
+syllable of a spoken word and also has a meaning.  Since there are
+around 3,000 of them in common usage it is unlikely that Aspell will
+ever be able to support spell checking languages written using hànzi
+until full Unicode support is implemented.  However, I am not even sure
+if these languages need spell checking since hànzi characters are
+generally not entered in directly.  Furthermore even if Aspell could
+spell check hànzi the existing suggestion strategy will not work well
+at all, and thus a completely new strategy will need to be developed.
+However, if it is the case that hànzi needs to be spell checked and you
+know something about the issues involved please fell free to contact me.
+
+B.2.3 Japanese
+--------------
+
+Modern Japanese is written in a mixture of "hiragana", "katakana",
+"kanji", and sometimes "romaji".  "Hiragana" and "katakana" are both
+syllabaries unique to Japan, "kanji" is a modified form of hànzi, and
+"romaji" uses the Latin alphabet.  With some work, Aspell should be
+able to check the non-kanji part of Japanese text.  However, based on
+my limited understanding of Japanese hiragana is often used at the end
+of kanji.  Thus if Aspell was to simply separate out the hiragana from
+kanji it would end up with a lot of word endings which are not proper
+words and will thus be flagged as misspellings.  However, this can be
+fairly easily rectified as text is tokenized into words before it is
+converted into Aspell's internal encoding.  In fact, some Japanese text
+is written in entirely in one script.  For example books for children
+and foreigners are sometimes written entirely in hiragana.  Thus,
+Aspell, in its current state, could prove at least somewhat useful for
+spell checking Japanese.
+
+B.2.4 Hangul
+------------
+
+Korean is generally written in hangul or a mixture of han and hangul.
+In Hangul letters individual letters, known as jamo, are grouped
+together in syllable blocks.  Unicode allows Hangul to be stored in one
+of three ways, (A) Individual jamo letters (Hangul Compatibility Jamo,
+U+3130 - U+318F), (D) decomposed jamo (Hangul Jamo, U+1100 - U+11FF),
+and (C) precoposed sylable blocks (Hangul Syllables, U+AC00 - U+D7AF).
+In order for Aspell to work with Hangul it needs to be form A.
+Unfortunately the existing Normalization code in Aspell will not be
+able to adequately deal with converting Hangul from form D and C to
+form A and back again.  However, once this code is written, Aspell
+should be able to spell check Hangul without any problem.
+
+\1f
+File: aspell.info,  Node: Multiple Scripts,  Next: Planned Dictionaries,  Prev: Unsupported,  Up: Languages Which Aspell can Support
+
+B.3 Languages Written in Multiple Scripts
+=========================================
+
+Aspell should be able to check text written in the same language but in
+multiple scripts with some work.  If the number of unique symbols in
+both scripts is less than 210, then a special character set can be used
+to allow both scripts to be encoded in the same dictionary.  However
+this may not be the most efficient solution.  An alternate solution is
+to store each script in its own dictionary and allow Aspell to choose
+the correct dictionary based on which script the given word is written
+in.  Aspell currently does not support this mode of spell checking but
+it is something that I hope to eventually support.
+
+\1f
+File: aspell.info,  Node: Planned Dictionaries,  Next: References,  Prev: Multiple Scripts,  Up: Languages Which Aspell can Support
+
+B.4 Notes on Planned Dictionaries
+=================================
+
+According to `http://wiki.services.openoffice.org/wiki/Dictionaries',
+Open Office dictionaries are available for the following languages, but
+no corresponding Aspell dictionary exists:
+
+   * Coptic (cop)
+
+   * Dyula (dyu)
+
+   * Fulah (ff)
+
+   * Fijian (fj)
+
+   * Friulian (fur)
+
+   * Khmer (km)
+
+   * Luxembourgish (lb)
+
+   * Mossi (mos)
+
+   * Nepali (ne)
+
+   * South Ndebele (nr)
+
+   * Northern Sotho (nso)
+
+   * Swati (ss)
+
+   * Southern Sotho (st)
+
+   * Tsonga (ts)
+
+   * Venda (ve)
+
+   * Xhosa (xh)
+
+If you are interested in converting any of them please coordinate your
+efforts with the dictionary author and submit it to aspell-dict at gnu
+org when you have something ready.
+
+   An unofficial dictionary for Albanian (sq) is available at
+`http://psychology.rutgers.edu/~zaimi/software.html'.  However, I can
+not find any contact information for the author, thus I have been
+unable to contact him.  In addition an Albanian (sq) dictionary is
+available for Ispell at
+`http://www.7kosova.com/kde-shqip/ispell/ispell.html'.  However, the
+raw word list is not provided and the author has not been responding to
+emails, possibly because he doesn't speak English.  If you have any
+additional information on either of these dictionaries, or can speak
+Albanian and can translate for me please let me know at <kevina@gnu.org>
+
+   An unofficial dictionary for Malayalam (ml) is available at
+`http://in.geocities.com/paivakil/downloads/aspell/'.  I am working
+with the author to create an official one.
+
+   Kevin Patrick Scannell has word lists available for the following
+languages based on his web crawling software
+(`http://borel.slu.edu/crubadan/') but needs someone to proofread them:
+
+   * Afrikaans (af)
+
+   * Asturian / Bable (ast)
+
+   * Azerbaijani (az)
+
+   * Balinese (ban)
+
+   * Bemba (bem)
+
+   * Bislama (bi)
+
+   * Breton (br)
+
+   * Catalan / Valencian (ca)
+
+   * Cebuano (ceb)
+
+   * Chamorro (ch)
+
+   * Chuukese (chk)
+
+   * Corsican (co)
+
+   * Kashubian (csb)
+
+   * Welsh (cy)
+
+   * Basque (eu)
+
+   * Fijian (fj)
+
+   * Faroese (fo)
+
+   * Friulian (fur)
+
+   * Frisian (fy)
+
+   * Irish (ga)
+
+   * Scottish Gaelic (gd)
+
+   * Gallegan (gl)
+
+   * Guarani (gn)
+
+   * Manx Gaelic (gv)
+
+   * Hausa (ha)
+
+   * Hawaiian (haw)
+
+   * Hiligaynon (hil)
+
+   * Haitian Creole (ht)
+
+   * Iban (iba)
+
+   * Igbo (ig)
+
+   * Iloko (ilo)
+
+   * Javanese (jv)
+
+   * Kachin (kac)
+
+   * Khasi (kha)
+
+   * Kalaallisut / Greenlandic (kl)
+
+   * Konkani (kok)
+
+   * Kurdish (ku)
+
+   * Cornish (kw)
+
+   * Luxembourgish (lb)
+
+   * Ganda (lg)
+
+   * Limburgian (li)
+
+   * Lingala (ln)
+
+   * Lozi (loz)
+
+   * Luo (Kenya and Tanzania) (luo)
+
+   * Malagasy (mg)
+
+   * Marshallese (mh)
+
+   * Maori (mi)
+
+   * Minangkabau (min)
+
+   * Mongolian (mn)
+
+   * Maltese (mt)
+
+   * North Ndebele (nd)
+
+   * Low Saxon (nds)
+
+   * Ndonga (ng)
+
+   * Niuean (niu)
+
+   * Norwegian Nynorsk (nn)
+
+   * Northern Sotho (nso)
+
+   * Navajo (nv)
+
+   * Nyanja (ny)
+
+   * Occitan / Provencal (oc)
+
+   * Pampanga (pam)
+
+   * Papiamento (pap)
+
+   * Quechua (qu)
+
+   * Rarotongan (rar)
+
+   * Rundi (rn)
+
+   * Kinyarwanda (rw)
+
+   * Sardinian (sc)
+
+   * Northern Sami (se)
+
+   * Sango (sg)
+
+   * Samoan (sm)
+
+   * Shona (sn)
+
+   * Somali (so)
+
+   * Swati (ss)
+
+   * Southern Sotho (st)
+
+   * Sundanese (su)
+
+   * Swahili (sw)
+
+   * Tetum (tet)
+
+   * Tajik (tg)
+
+   * Turkmen (tk)
+
+   * Tokelau (tkl)
+
+   * Tagalog (tl)
+
+   * Tswana (tn)
+
+   * Tonga (to)
+
+   * Tok Pisin (tpi)
+
+   * Tsonga (ts)
+
+   * Tahitian (ty)
+
+   * Venda (ve)
+
+   * Walloon (wa)
+
+   * Wolof (wo)
+
+   * Xhosa (xh)
+
+   * Yoruba (yo)
+
+   * Zulu (zu)
+
+If you are interested, please contact him at scannell at slu edu.
+
+   A dictionary marked as "Planned" or "Maybe" but not listed in the
+section means that someone has expressed an interest in creating one.
+If you are interested in helping please contact me at <kevina@gnu.org>
+so that I can put you in touch with them.
+
+\1f
+File: aspell.info,  Node: References,  Prev: Planned Dictionaries,  Up: Languages Which Aspell can Support
+
+B.5 References
+==============
+
+The information in this chapter was gathered from numerous sources,
+including:
+
+   * ISO 639-2 Registration Authority,
+     `http://www.loc.gov/standards/iso639-2/'
+
+   * Languages and Scripts (Official Unicode Site),
+     `http://www.unicode.org/onlinedat/languages-scripts.html'
+
+   * Omniglot - a guide to written language, `http://www.omniglot.com/'
+
+   * Wikipedia - The Free Encyclopedia, `http://wikipedia.org/'
+
+   * Ethnologue - Languages of the World, `http://www.ethnologue.com/'
+
+   * World Languages - The Ultimate Language Store,
+     `http://www.worldlanguage.com/'
+
+   * South African Languages Web, `http://www.languages.web.za/'
+
+   * The Languages and Writing Systems of Africa (Global Advisor
+     Newsletter), `http://www.intersolinc.com/newsletters/africa.htm'
+
+
+   Special thanks goes to Era Eriksson for helping me with the
+information in this chapter.
+
+\1f
+File: aspell.info,  Node: Language Related Issues,  Next: To Do,  Prev: Languages Which Aspell can Support,  Up: Top
+
+Appendix C Language Related Issues
+**********************************
+
+Here are some language related issues that a good spell checker needs to
+handle.  If you have any more information about any of these issues, or
+of a new issue not discussed here, please email me at <kevina@gnu.org>.
+
+* Menu:
+
+* Compound Words::
+* Words With Symbols in Them::
+* Unicode Normalization::
+* German Sharp S::
+* Context Sensitive Spelling::
+
+\1f
+File: aspell.info,  Node: Compound Words,  Next: Words With Symbols in Them,  Up: Language Related Issues
+
+C.1 Compound Words
+==================
+
+In some languages, such as German, it is acceptable to string two words
+together, thus forming a compound word.  However, there are rules to
+when this can be done.  Furthermore, it is not always sufficient to
+simply concatenate the two words.  For example, sometimes a letter is
+inserted between the two words.  Aspell currently has support for
+unconditionally stringing words together.  I tried implementing more
+sophisticated support for compound words in Aspell but it was too
+limiting and no one used it.
+
+   After receiving feedback from several people it seems that acceptable
+support for compound words involved two basically independent parts.
+If this is not sufficient for your language please let me know.
+
+Part One
+========
+
+Describes how the word needs to be changed when forming a compound
+
+     CMP <flag> <strip> <add> <cond> <cond2>
+
+     <flag>  is the compound flag
+     <strip> is the string to strip or 0 for the null string
+     <add>   is the string to add or 0 for the null string
+     <cond>  is the condition to match at the end of the current word
+     <cond2> is the condition to match at the beginning of the next word
+
+All but the last field are the same as a suffix entry in the existing
+affix code.
+
+   <cond> is a simplified regular expression.  Some examples:
+     . (for anything)
+     e
+     [^aeiou]y
+     [^ey]
+     [aeiou]y
+
+   It does not seem necessary to change the beginning of a word when
+forming compounds
+
+Part Two
+========
+
+Describes the position a word can appear in (beginning, middle, or end)
+and with which words.
+
+   To do this each word can be assigned a category.  Then each category
+can be given a set of rules to describe how it can be used in a
+compound word for example
+
+     A + B: indicates that category A may appear at the beginning of a
+       word when followed by a category B word.  When combined it is then
+       considered a category B word.
+     A + C + B: here a C word may only appear between an A or B word
+     A + A + B
+     A + A
+     A + A + A
+     etc..
+
+   I have not decided if a word should be allowed to belong to more than
+one category as a new category can be created in necessary to mean
+words in both category A and B for example.
+
+C.1.1 To Implement
+------------------
+
+To implement support for compound words based on the above description
+the following will need to be done:
+
+  1. expand the affix code to support special compound flags as
+     described in part one
+
+  2. write code to store the conditions as described in part two
+
+  3. expand the compound checking code to check against the conditions
+
+  4. expand the dictionary format to store the necessary compound info
+     with the word
+
+
+   I don't know when I will be able to actually implement this.  If you
+would like to try please let me know.
+
+\1f
+File: aspell.info,  Node: Words With Symbols in Them,  Next: Unicode Normalization,  Prev: Compound Words,  Up: Language Related Issues
+
+C.2 Words With Spaces or Other Symbols in Them
+==============================================
+
+Many languages, including English, have words with non-letter symbols in
+them.  For example the apostrophe.  These symbols generally appear in
+the middle of a word, but they can also appear at the end, such as in an
+abbreviation.  If a symbol can _only_ appear as part of a word then
+Aspell can treat it as if it were a letter.
+
+   However, the problem is most of these symbols have other uses.  For
+example, the apostrophe is often used as a single quote and the
+abbreviations marker is also used as a period.  Thus, Aspell cannot
+blindly treat them as if they were letters.
+
+   Aspell currently handles the case where the symbol can only appear in
+the middle of the word fairly well.  It simply assumes that if there is
+a letter both before and after the symbol than it is part of the word.
+This works most of the time but it is not fool proof.  For example,
+suppose the user forgot to leave a space after the period:
+
+       ... and the dog went up the tree.Then the cat ...
+
+Aspell would think "tree.Then" is one word.  A better solution might be
+to then try to check "tree" and "Then" separately.  But what if one of
+them is not in the dictionary?  Should Aspell assume "tree.Then" is one
+word?
+
+   The case where the symbol can appear at the beginning or end of the
+word is more difficult to deal with.  The symbol may or may not
+actually be part of the word.  Aspell currently handles this case by
+first trying to spell check the word with the symbol and if that fails,
+try it without.  The problem is, if the word is misspelled, should
+Aspell assume the symbol belongs with the word or not?  Currently
+Aspell assumes it does, which is not always the correct thing to do.
+
+   Numbers in words present a different challenge to Aspell.  If Aspell
+treats numbers as letters then every possible number a user might write
+in a document must be specified in the dictionary.  This could easily
+be solved by having special code to assume all numbers are correctly
+spelled.  Yet, what about something like "4th".  Since the "th" suffix
+can appear after any number we are left with the same problem.  The
+solution would be to have a special symbol for "any number".
+
+   Words with spaces in them, such as foreign phrases, are even more
+trouble to deal with.  The basic problem is that when tokenizing a
+string there is no good way to keep phrases together. One solution is to
+use trial and error.  If a word is not in the dictionary try grouping it
+with the previous or next word and see if the combined word is in the
+dictionary.  But what if the combined word is not, should the misspelled
+word be grouped when looking for suggestions?  One solution is to also
+store each part of the phrase in the dictionary, but tag it as part of a
+phrase and not an independent word.
+
+   To further complicate things, most applications that use spell
+checkers are accustom to parsing the document themselves and sending it
+to the spell checker a word at a time.  In order to support words with
+spaces in them a more complicated interface will be required.
+
+\1f
+File: aspell.info,  Node: Unicode Normalization,  Next: German Sharp S,  Prev: Words With Symbols in Them,  Up: Language Related Issues
+
+C.3 Unicode Normalization
+=========================
+
+Because Unicode contains a large number of precomposed characters there
+are multiple ways a character can be represented.  For example letter ö
+can either be represented as
+
+     U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+or
+     U+0061 LATIN SMALL LETTER O + U+0308 COMBINING DIAERESIS
+
+   By performing normalization first, Aspell will only see one of these
+representations.  The exact form of normalization depends on the
+language.  Give the choice of:
+
+  1. Precomposed character
+
+  2. Base letter + combining character(s)
+
+  3. Base letter only
+
+if the precomposed character is in the target character set, then (1),
+if both base and combining character is present, then (2), otherwise
+(3).
+
+   Unicode Normalization is now implemented in Aspell 0.60.
+
+\1f
+File: aspell.info,  Node: German Sharp S,  Next: Context Sensitive Spelling,  Prev: Unicode Normalization,  Up: Language Related Issues
+
+C.4 German Sharp S
+==================
+
+The German Sharp S or Eszett does not have an uppercase equivalent.
+Instead when `ß' is converted to `SS'.  The conversion of `ß' to `SS'
+requires a special rule, and increases the length of a word, thus
+disallowing inplace case conversion.  Furthermore, my general rule of
+converting all words to lowercase before looking them up in the
+dictionary won't work because the conversion of `SS' to lowercase is
+ambiguous; it can be `ss' or `ß'.  I do plan on dealing with this
+eventually.
+
+\1f
+File: aspell.info,  Node: Context Sensitive Spelling,  Prev: German Sharp S,  Up: Language Related Issues
+
+C.5 Context Sensitive Spelling
+==============================
+
+In some language, such as Luxembourgish, the spelling of a word depends
+on which words surround it.  For example the the letter `n' at the end
+of a word will disappear if it is followed by another word starting
+with a certain letter such as an `s'.  However, it can probably get
+more complicated than that.  I would like to know how complicated before
+I attempt to implement support for context sensitive spelling.
+
+\1f
+File: aspell.info,  Node: To Do,  Next: Installing,  Prev: Language Related Issues,  Up: Top
+
+Appendix D To Do
+****************
+
+* Menu:
+
+* Important Items::
+* Other Items::
+* Notes on Various Items::
+
+\1f
+File: aspell.info,  Node: Important Items,  Next: Other Items,  Up: To Do
+
+D.1 Important Items
+===================
+
+Words in bold indicate how you should refer to the item when discussing
+it with me or others.
+
+D.1.1 Things that need to be done
+---------------------------------
+
+These items need to be done before I consider Aspell finished. If you
+are interested in helping me with one of these tasks please email me.
+Good C++ skills are needed for most of these tasks involving coding.
+
+   * Create a generic filter to handle multi-character letters such as
+     `"a' or `\"a' for ä.  This filter should make use of the already
+     exiting normalization code if possible.
+
+   * Make Aspell *Thread safe*. Even though Aspell itself is not
+     multi-threaded I would like it to be thread safe so that it can be
+     used by multi-threaded programs. There are several areas of Aspell
+     that are potentially thread unsafe (such as accessing a global
+     pool) and several classes which have the potential of being used
+     by more than one thread (such as the personal dictionary). _[In
+     Progress]_.
+
+   * Enhance *ispell.el* so that it will work better with GNU Aspell.
+     _[In Progress]_.
+
+   * Clean up copyright notices and bring the Aspell package up to *GNU
+     Standards*. _[In Progress]_.
+
+D.1.2 Things I would like to get done
+-------------------------------------
+
+I would like to get these done. However, I may still consider Aspell
+finished without. They will probably eventually get implemented.
+However, I could still use help with them.
+
+   * Better support for *compound words*. The support for _conditional_
+     compound words found in Aspell versions 0.50 and earlier is no
+     longer available since no one seems to be using it. Support for
+     _unconditional_ compound words is still available. *Note Compound
+     Words::.
+
+   * Be able to accept *words with spaces in them* as many languages
+     have words, such as a word in a foreign phrase, which only makes
+     sense when followed by other words. *Note Words With Symbols in
+     Them::.
+
+   * Reorganize manual to make it easier to understand and to make it
+     possible to break out useful man pages.
+
+   * Support *soundslike lookup with affix compression*.  I think it is
+     possible, although I don't know how effective it will be.  The
+     basic idea is to affix compress the soundslike codes and then
+     match the codes up with affix compressed words.  If you are
+     interested, email <aspell-devel@gnu.org>, and I will explain it in
+     more detail.
+
+   * Use Lawrence Philips' new *Double Metaphone algorithm*. See
+     `http://aspell.net/metaphone/'. The main task involved here is
+     converting the algorithm into table form. This will take some time
+     but there is no real programming experience required. If you want
+     to help with Aspell but don't have any real programming experience,
+     this would be a great place to start.
+
+   * Rank suggestions based on *frequency information*.  Both global
+     frequency and document specific frequency can be used.  The latter
+     will require that the whole document be made available to the
+     spell checker.  Also use frequency information to flag words which
+     are found in the dictionary but not in common usage, and thus
+     might not be what was intended.
+
+   * Support a *"dual-script" mode* where Aspell can use a separate
+     dictionary depending on which script it detects the current word
+     in, the two dictionaries can have nothing in common, ie an English
+     one and a Russian one for example.  This will _not_ support two
+     languages that use the same script as that is a lot more
+     complicated.  For example if the word is misspelled which
+     dictionary should it use for the suggestions?
+
+   * Write a *GUI* for the Aspell utility. Ideally it should be able to
+     do everything the Aspell utility can do and not just be able spell
+     check a document.
+
+   * Develop a *more powerful C API* for Aspell.  Ideally this API
+     should allow one to perform all the tasks the Aspell utility can
+     do.  This included the ability to check whole documents, and create
+     dictionaries, among other things.
+
+   * Create a *C++ interface* for Aspell, possibly on top of the C one.
+
+
+\1f
+File: aspell.info,  Node: Other Items,  Next: Notes on Various Items,  Prev: Important Items,  Up: To Do
+
+D.2 Other Items
+===============
+
+These items all sound like good ideas however I am not sure when I will
+get to implementing them if ever.  Words in bold indicate how you
+should refer to the item when discussing it with me or others.
+
+   * Come up with a plug-in for `gEdit' the gnome text editor.
+
+   * Change languages (and thus dictionaries) based on the information
+     in the actual document.
+
+   * Come up with a mode that will skip words based on the symbols that
+     (almost) always surround the word.  *Note Word skipping by
+     context::.
+
+   * Create two *server modes* for Aspell.  One that uses the DICT
+     protocol and one that uses `ispell -a' method of communication via
+     some arbitrary port.
+
+   * Come up with *thread safe personal dictionaries*.
+
+   * Use the *Hidden Markov Model* to base the suggestions on not only
+     the word itself but on the context around the word. *Note Hidden
+     Markov Model::.
+
+   * Having a way to *email the personal dictionary* and/or replacement
+     list to a particular address either periodically or when it grows
+     to a certain size. *Note Email the Personal Dictionary::.
+
+   The following good ideas were found in the Ispell `WISHES' file so I
+thought I would pass them on.
+
+   * Ispell should be smart enough to ignore hyphenation signs, such as
+     the TeX `\-' hyphenation indicator.
+
+   * (Jeff Edmonds) The personal dictionary should be able to remove
+     certain words from the master dictionary, so that obscure words
+     like "wether" wouldn't mask favorite typos.
+
+   * (Jeff Edmonds) It would be wonderful if Ispell could correct
+     inserted spaces such as "th e" for "the" or even "can not" for
+     "cannot".
+
+   * Since Ispell has dictionaries available to it, it is conceivable
+     that it could automatically determine the language of a particular
+     file by choosing the dictionary that produced the fewest spelling
+     errors on the first few lines.
+
+\1f
+File: aspell.info,  Node: Notes on Various Items,  Prev: Other Items,  Up: To Do
+
+D.3 Notes on Various Items
+==========================
+
+* Menu:
+
+* Word skipping by context::
+* Hidden Markov Model::
+* Email the Personal Dictionary::
+
+\1f
+File: aspell.info,  Node: Word skipping by context,  Next: Hidden Markov Model,  Up: Notes on Various Items
+
+D.3.1 Word skipping by context
+------------------------------
+
+This was posted on the Aspell mailing list on January 1, 1999:
+
+   I had an idea on a great general way to determine if a word should be
+skipped.  Determine the words to skip based on the symbols that
+(almost) always surround the word.
+
+   For example when asked to check the following C++ code:
+     cout << "My age is: " << num << endl;
+     cout << "Next year I will be " << num + 1 << endl;
+
+   `cout', `num', and `endl' will all be skipped.  `cout' will be
+skipped because it is always preceded by a `<<'.  `num' will be skipped
+because it is always preceded by a `<<'.  And `endl' will be skipped
+because it is always between a `<<' and a `;'.
+
+   Given the following HTML code.
+     <table width=50% cellspacing=0 cellpadding=1>
+     <tr><td>One<td>Two<td>Three
+     <tr><td>1<td>2<td>3
+     </table>
+
+     <table cellspacing=0 cellpadding=1>
+     </table>
+
+   `table', `width' `cellspacing', `cellpadding', `tr', `td' will all
+be skipped because they are always enclosed in `<>'.  Now of course
+`table' and `width' would be marked as correct anyway however there is
+no harm in skipping them.
+
+   So I was wondering if anyone on this list has any experience in
+writing this sort of context recognition code or could give me some
+pointers in the right direction.
+
+   This sort of word skipping will be very powerful if done right.  I
+imagine that it could replace specific spell checker modes for TeX,
+Nroff, SGML etc because it will automatically be able to figure out
+where it should skip words.  It could also probably do a very good job
+on programming languages code.
+
+   If you are interested in helping me out with this or just have
+general comments about the idea please let me know.
+
+\1f
+File: aspell.info,  Node: Hidden Markov Model,  Next: Email the Personal Dictionary,  Prev: Word skipping by context,  Up: Notes on Various Items
+
+D.3.2 Hidden Markov Model
+-------------------------
+
+Knud Haugaard Sørensen suggested this one.  From his email on the
+Aspell mailing list:
+
+   consider these examples:
+
+     a fone number.
+      -> a phone number.
+
+     a fone dress.
+      -> a fine dress.
+
+   the example illustrates that the right correction might depend on the
+context of the word.
+
+   So I suggested that you take a look on HMM to solve this problem.
+
+   This might also provide a good base to include grammar correction in
+Aspell.
+
+   see this link `http://www.cse.ogi.edu/CSLU/HLTsurvey/ch1node7.html'.
+
+   I think it is a great idea.   However unfortunately it will probably
+be very complicated to implement.   Perhaps in the far future.
+
+\1f
+File: aspell.info,  Node: Email the Personal Dictionary,  Prev: Hidden Markov Model,  Up: Notes on Various Items
+
+D.3.3 Email the Personal Dictionary
+-----------------------------------
+
+Someone suggested in a personal email:
+
+     Have you thought of adding a function to Aspell, that - when the
+     personal dictionary has grown significantly - sends the user's
+     personal dictionary to the maintainer of the corresponding Aspell
+     dictionary? (if the user allows it)
+
+     It would be a very useful service to the dictionary maintainers,
+     and I think most users can see their benefit in it too.
+
+   And I replied:
+
+     Yes I have considered something like that but not for the personal
+     dictionaries but rather the replacement word list in order to get
+     better test data for `http://aspell.sourceforge.net/test/'.
+
+   The problem is I don't know of a good way to do this since Aspell can
+also be used as a library.  It also is not a real high priority,
+especially since I would first need to learn how to send email within a
+C++ program.
+
+\1f
+File: aspell.info,  Node: Installing,  Next: ChangeLog,  Prev: To Do,  Up: Top
+
+Appendix E Installing
+*********************
+
+Aspell requires gcc 2.95 (or better) as the C++ compiler.  Other C++
+compilers should work with some effort.  Other C++ compilers for mostly
+POSIX compliant (Unix, Linux, BeOS, Cygwin) systems should work without
+any major problems provided that the compile can handle all of the
+advanced C++ features Aspell uses.  C++ compilers for non-Unix systems
+might work but it will take some work.  Aspell at very least requires a
+Unix-like environment (`sh', `grep', `sed', `tr', ...), and Perl in
+order to build.  Aspell also uses a few POSIX functions when necessary.
+
+   The latest version can always be found at GNU Aspell's home page at
+`http://aspell.net'.
+
+* Menu:
+
+* Generic Install Instructions::
+* HTML Manuals and "make clean"::
+* Curses Notes::
+* Loadable Filter Notes::
+* Upgrading from Aspell 0.50::
+* Upgrading from Aspell .33/Pspell .12::
+* Upgrading from a Pre-0.50 snapshot::
+* WIN32 Notes::
+
+\1f
+File: aspell.info,  Node: Generic Install Instructions,  Next: HTML Manuals and "make clean",  Up: Installing
+
+E.1 Generic Install Instructions
+================================
+
+     ./configure && make
+
+   For additional `configure' options type `./configure --help'.  You
+can control what C++ compiler is used by setting the environment
+variable `CXX' before running configure and you can control what flags
+are passed to the C++ compile via the environment variable `CXXFLAGS'.
+Static libraries are disabled by default since static libraries will
+not work right due to the mixing of C and C++.  When a C program links
+with the static libraries in Aspell it is likely to crash because
+Aspell's C++ objects are not getting initialized correctly.  However,
+if for some reason you want them, you can enable them via
+`--enable-static'.
+
+   Aspell should then compile without any additional user intervention.
+If you run into problems please first check the sections below as that
+might solve your problem.
+
+   To install the program simply type
+
+     make install
+
+   After Aspell is installed at least one dictionary needs to be
+installed.  You can find them at `http://aspell.net/'.  The `aspell'
+program must be in your path in order for the dictionaries to install
+correctly.
+
+   If you do not have Ispell or the traditional Unix `spell' utility
+installed on your system then you should also copy the compatibility
+scripts `ispell' and `spell' located in the `scripts/' directory into
+your binary directory which is usually `/usr/local/bin' so that
+programs that expect the `ispell' or `spell' command will work
+correctly.
+
+\1f
+File: aspell.info,  Node: HTML Manuals and "make clean",  Next: Curses Notes,  Prev: Generic Install Instructions,  Up: Installing
+
+E.2 HTML Manuals and `make clean'
+=================================
+
+The Aspell distribution includes HTML versions of the User and
+Developer's manual.  Unfortunately, doing a `make clean' will erase
+them.  This is due to a limitation of automake which is not easily
+fixed.  If makeinfo is installed they can easily be rebuild with `make
+aspell.html aspell-dev.html', or you can unpack them from the tarbar.
+
+\1f
+File: aspell.info,  Node: Curses Notes,  Next: Loadable Filter Notes,  Prev: HTML Manuals and "make clean",  Up: Installing
+
+E.3 Curses Notes
+================
+
+If you are having problems compiling `check_funs.cpp' then the most
+likely reason is due to incompatibilities with the curses
+implementation on your system.  You should first try disabling the
+"wide" curses library by with the `--disable-wide-curses' configure
+option..  By doing so you will lose support for properly displaying
+UTF-8 characters but you may still be able to get the full screen
+interface.  If this fails than you can disable curses support
+altogether with the `--disable-curses' configure option.  By doing this
+you will lose the nice full screen interface but hopefully you will be
+able to at least get Aspell to compile correctly.
+
+   If the curses library is installed in a non-standard location than
+you can specify the library and include directory with
+`--enable-curses=LIB' and `--enable-curses-include=DIR'.
+
+   `LIB' can either be the complete path of the library--for example
+     /usr/local/curses/libcurses.a
+   or the name of the library (for example `ncurses') or a combined
+location and library in the form `-LLIBDIR -lLIB' (for example
+`-L/usr/local/ncurses/lib -lncurses').
+
+   DIR is the location of the curses header files (for example
+`/usr/local/ncurses/include').
+
+E.3.1 Unicode Support
+---------------------
+
+In order for Aspell to correctly spell check UTF-8 documents in full
+screen mode the "wide" version of the curses library must be installed.
+This is different from the normal version of curses library, and is
+normally named `libcursesw' (with a `w' at the end) or `libncursesw'.
+UTF-8 documents will not display correctly without the right curses
+version installed.
+
+   In addition your system must also support the `mblen' function.
+Although this function was defined in the ISO C89 standard (ANSI
+X3.159-1989), not all systems have it.
+
+\1f
+File: aspell.info,  Node: Loadable Filter Notes,  Next: Upgrading from Aspell 0.50,  Prev: Curses Notes,  Up: Installing
+
+E.4 Loadable Filter Notes
+=========================
+
+Support for being able to load additional filter modules at run-time
+has only been verified to work on Linux platforms.  If you get linker
+errors when trying to use a filter, then it is likely that loadable
+filter support is not working yet on your platform.  Thus, in order to
+get Aspell to work correctly you will need to avoid compiling the
+filters as individual modules by using the
+`--enable-compile-in-filters' when configuring Aspell with
+`./configure'.
+
+\1f
+File: aspell.info,  Node: Upgrading from Aspell 0.50,  Next: Upgrading from Aspell .33/Pspell .12,  Prev: Loadable Filter Notes,  Up: Installing
+
+E.5 Upgrading from Aspell 0.50
+==============================
+
+The dictionary format has changed so dictionaries will need to be
+recompiled.
+
+   All data, by default, is now included in `LIBDIR/aspell-0.60' so
+that multiple versions of Aspell can more peacefully coexist.  This
+included both the dictionaries and the language data files which were
+stored in `SHAREDIR/aspell' before Aspell 0.60.
+
+   The format of the character data files has changed.  The new
+character data files are installed with Aspell so you should not have
+to worry about it unless you made a custom one.
+
+   The dictionary option `strip-accents' has been removed.  For this
+reason the old English dictionary (up to 0.51) will no longer work.  A
+new English dictionary is now available which avoids using this option.
+In addition the `ignore-accents' option is currently unimplemented.
+
+   The flag `-l' is now a shortcut for `--lang', instead of `--list' as
+it was with Aspell 0.50.
+
+E.5.1 Binary Compatibility
+--------------------------
+
+The Aspell 0.60 library is binary compatible with the Aspell 0.50
+library.  For this reason I chose _not_ to increment the major version
+number (so-name) of the shared library by default which means programs
+that were compiled for Aspell 0.50 will also work for Aspell 0.60.
+However, this means that having both Aspell 0.50 and Aspell 0.60
+installed at the same time can be pragmatic.  If you wish to allow both
+Aspell 0.50 and 0.60 to be installed at the same time then you can use
+the configure option `--incremented-soname' which will increment
+so-name.  You should only use this option if you know what you are
+doing.  It is up to you to somehow ensure that both the Aspell 0.50 and
+0.60 executables can coexist.
+
+   If after incrementing the so-name you wish to allow programs compiled
+for Aspell 0.50 to use Aspell 0.60 instead (thus implying that Aspell
+0.50 is not installed) then you can use a special compatibility library
+which can be found in the `lib5' directory.  This directory will not be
+entered when building or installing Aspell so you must manually build
+and install this library.  You should build it after the rest of Aspell
+is built.  The order in which this library is installed, with relation
+to the rest of Aspell, is also important.  If it is installed _after_
+the rest of Aspell then new programs will link to the old library
+(which will work for Aspell 0.50 or 0.60) when built, if installed
+_before_, new programs will link with the new library (Aspell 0.60
+only).
+
+\1f
+File: aspell.info,  Node: Upgrading from Aspell .33/Pspell .12,  Next: Upgrading from a Pre-0.50 snapshot,  Prev: Upgrading from Aspell 0.50,  Up: Installing
+
+E.6 Upgrading from Aspell .33/Pspell .12
+========================================
+
+Aspell has undergone an extremely large number of changes since the
+previous Aspell/Pspell release.  For one thing Pspell has been merged
+with Aspell so there in no longer two separate libraries you have to
+worry about.
+
+   Because of the massive changes between Aspell/Pspell and Aspell 0.50
+you may want to clean out the old files before installing the the new
+Aspell.  To do so do a `make uninstall' in the original Aspell and
+Pspell source directories.
+
+   The way dictionaries are handled has also changed.  This includes a
+change in the naming conventions of both language names and
+dictionaries.  Due to the language name change, your old personal
+dictionaries will not be recognized.  However, you can import the old
+dictionaries by running the `aspell-import' script.  This also means
+that dictionaries designed to work with older versions of Aspell are
+not likely to function correctly.  Fortunately new dictionary packages
+are available for most languages.  You can find them off of the Aspell
+home page at `http://aspell.net'.
+
+   The Pspell ABI is now part of Aspell except that the name of
+everything has changed due to the renaming of Pspell to Aspell.  In
+particular please note the following name changes:
+
+     pspell -> aspell
+     manager -> speller
+     emulation -> enumeration
+     master_word_list -> main_word_list
+
+   Please also note that the name of the `language-tag' option has
+changed to `lang'.  However, for backward compatibility the
+`language-tag' option will still work.
+
+   However, you should also be able to build applications that require
+Pspell with the new Aspell as a backward compatibility header file is
+provided.
+
+   Due to a change in the way dictionaries are handled, scanning for
+`.pwli' files in order to find out which dictionaries are available
+will no longer work.  This means that programs that relied on this
+technique may have problems finding dictionaries.  Fortunately, GNU
+Aspell now provided a uniform way to list all installed dictionaries
+via the c API.  See the file `list-dicts.c' in the `examples/'
+directory for an example of how to do this.  Unfortunately there isn't
+any simple way to find out which dictionaries are installed which will
+work with both the old Aspell/Pspell and the new GNU Aspell.
+
+\1f
+File: aspell.info,  Node: Upgrading from a Pre-0.50 snapshot,  Next: WIN32 Notes,  Prev: Upgrading from Aspell .33/Pspell .12,  Up: Installing
+
+E.7 Upgrading from a Pre-0.50 snapshot
+======================================
+
+At the last minute I decided to merge the `speller-util' program into
+the main `aspell' program.  You may wish to remove that `speller-util'
+program to avoid confusion.  This also means that dictionaries designed
+to work with the snapshot will no longer work with the official release.
+
+\1f
+File: aspell.info,  Node: WIN32 Notes,  Prev: Upgrading from a Pre-0.50 snapshot,  Up: Installing
+
+E.8 WIN32 Notes
+===============
+
+E.8.1 Getting the WIN32 version
+-------------------------------
+
+The latest version of the native Aspell/WIN32 port, including binaries,
+can be found at `http://aspell.net/win32'.  This page has,
+unfortunately, not been updated for Aspell 0.60.  If you are interested
+in updated the native port please let me know.
+
+E.8.2 Building the WIN32 version
+--------------------------------
+
+There are two basically different ways of building Aspell using GCC for
+WIN32: You can either use the Cygwin compiler, which will produce
+binaries that depend on the POSIX layer in `cygwin1.dll'.  The other
+way is using MinGW GCC, those binaries use the native C runtime from
+Microsoft (MSVCRT.DLL).
+
+E.8.2.1 Building Aspell using Cygwin
+....................................
+
+This works exactly like on other POSIX compatible systems using the
+`./configure && make && make install' cycle.  Some versions of Cygwin
+GCC will fail to link, this is caused by an incorrect `libstdc++.la' in
+the `/lib' directory.  After removing or renaming this file, the build
+progress should work (GCC-2.95 and GCC-3.x should work).
+
+E.8.2.2 Building Aspell using MinGW
+...................................
+
+There are several different ways to build Aspell using MinGW.  The
+easiest way is to use a Cygwin compiler but instruct it to build a
+native binary rather than a Cygwin one.  To do this configure with:
+
+     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin'
+
+   You may also want to add the option `--enable-win32-relocatable' to
+use more windows friendly directories.  *Note Win32-Directories::.  In
+this case configure with:
+
+     ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin' --enable-win32-relocatable
+
+   It should also be possible to build Aspell using the MSYS
+environment.  But this has not been very well tested.  If building with
+MSYS _do not_ add `CFLAGS ...' to configure.
+
+E.8.2.3 Building Aspell without using Cygwin or MSYS
+....................................................
+
+It is also possible to build Aspell without Cygwin of MinGW by using
+the files in the `win32/' subdirectory.  However, these files have not
+been updated to work with Aspell 0.60.  Thus the following instructions
+will not work without some effort.  If you do get Aspell to compile
+this way please send me the updated files so that I can include them
+with the next release.
+
+   To compile Aspell with the MinGW compiler, you will need at least
+GCC-3.2 (as shipped with MinGW-2.0.3) and some GNU tools like `rm' and
+`cp'.  The origin of those tools doesn't matter, it has shown to work
+with any tools from MinGW/MSys, Cygwin or Linux.  To build Aspell, move
+into the `win32' subdirectory and type `make'.  You can enable some
+additional build options by either commenting out the definitions at
+the head of the Makefile or passing those values as environment
+variables or at the `make' command line.  Following options are
+supported:
+
+`DEBUGVERSION'
+     If set to "1", the binaries will include debugging information
+     (resulting in a much bigger size).
+
+`CURSESDIR'
+     Enter the path to the pdcurses library here, in order to get a
+     nicer console interface (see below).
+
+`MSVCLIB'
+     Enter the filename of MS `lib.exe' here, if you want to build
+     libraries that can be imported from MS Visual C++.
+
+`WIN32_RELOCATABLE'
+     If set to "1", Aspell will detect the prefix from the path where
+     the DLL resides (see below for further details).
+
+`TARGET'
+     Sets a prefix to be used for cross compilation (e.g.
+     `/usr/local/bin/i586-mingw32msvc-' to cross compile from Linux).
+
+   There are also a MinGW compilers available for Cygwin and Linux, both
+versions are able to compile Aspell using the prebuilt `Makefile'.
+While the Cygwin port automatically detects the correct compiler, the
+Linux version depends on setting the `TARGET' variable in the
+`Makefile' (or environment) to the correct compiler prefix.
+
+   Other compilers may work.  There is a patch for MS Visual C++ 6.0
+available at `ftp://ftp.gnu.org/gnu/aspell', but it needs a lot of
+changes to the Aspell sources.  It has also been reported that the
+Intel C++ compiler can be used for compilation.
+
+E.8.3 (PD)Curses
+----------------
+
+In order to get the nice full screen interface when spell checking
+files, a curses implementation that does not require Cygwin is
+required.  The PDCurses (`http://pdcurses.sourceforge.net')
+implementation is known to work, other implementations may work however
+they have not been tested.  See the previous section for information on
+specifying the location of the curses library and include file.
+
+   Curses notes:
+
+   * PDcurses built with MinGW needs to be compiled with
+     `-DPDC_STATIC_BUILD' to avoid duplicate declaration of `DllMain'
+     when compiling `aspell.exe'.
+
+   * The curses enabled version can cause trouble in some shells (MSys
+     `rxvt', `emacs') and will produce errors like `initscr() LINES=1
+     COLS=1: too small'.  Use a non-curses version for those purposes.
+
+E.8.4 Directories
+-----------------
+
+If Aspell is configured with `--enable-win32-relocatable' or compiled
+with `WIN32_RELOCATABLE=1' when using a Makefile, it can be run from
+any directory: it will set `PREFIX' according to its install location
+(assuming it resides in `PREFIX\\bin').  Your personal wordlists will
+be saved in the `PREFIX' directory with their names changed from
+`.aspell.LANG.*' to `LANG.*' (you can override the path by setting the
+`HOME' environment variable).
+
+E.8.5 Installer
+---------------
+
+The installer registers the DLLs as shared libraries, you should
+increase the reference counter to avoid the libraries being uninstalled
+if your application still depends on them (and decrease it again when
+uninstalling your program).  The reference counters are located under:
+     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
+
+   The install location and version numbers are stored under
+
+     HKLM\SOFTWARE\Aspell
+
+E.8.6 WIN32 consoles
+--------------------
+
+The console uses a different encoding than GUI applications, changing
+this to to a Windows encoding (e.g.  1252) is not supported on
+Win9x/Me.  On WinNT (and later) those codepages can be set by first
+changing the console font to `lucida console', then changing the
+codepage using `chcp 1252'.
+
+   Some alternative shells (e.g. MSys' `rxvt' or Cygwin's `bash') do a
+codepage conversion (if correctly set up), so running Aspell inside
+those shells might be a workaround for Win9x.
+
+\1f
+File: aspell.info,  Node: ChangeLog,  Next: Authors,  Prev: Installing,  Up: Top
+
+Appendix F ChangeLog
+********************
+
+Changes from 0.60.6 to 0.60.6.1 (July 4, 2011)
+==============================================
+
+   * Update to Automake 1.10.3.
+
+   * Fix a bug which caused a race condition (leading to a likely crash)
+     when two threads try to update the dictionary cache at the same
+     time.
+
+   * Make it very clear that compiling Aspell with NDEBUG is a bad idea
+     (see `http://aspell.net/ndebug.html') by outputting a warning when
+     building with NDEBUG defined.
+
+   * Numerous other minor updates and bug fixes.
+
+Changes from 0.60.5 to 0.60.6 (April 16, 2007)
+==============================================
+
+   * Compile fixes for Gcc 4.3.
+
+   * Updated to Libtool 2.2.2 and Automake 1.10.1
+
+   * Minor tweak to suggestion code which improved suggestion results in
+     certain cases.
+
+   * Always line buffer stdout and stderr in the Aspell utility when
+     there is the potential for it to be used interactively through a
+     pipe.
+
+   * Removed debug output in `aspell munch-list'.
+
+   * Other minor updates and bug fixes.
+
+Changes from 0.60.4 to 0.60.5 (December 18, 2006)
+=================================================
+
+   * Compile fix for Gcc 4.1
+
+   * Updated to Gettext 0.16.1, Libtool 1.5.22, Automake 1.10, Autoconf
+     2.61
+
+   * Documentation improvements, including an updated `man' page.
+
+   * Complain if more than one file is specified when checking files
+     using the `aspell check' command, rather than ignoring the other
+     files.
+
+   * Large number of bug fixes.
+
+Changes from 0.60.3 to 0.60.4 (October 19, 2005)
+================================================
+
+   * Fixed a bug that caused Aspell to crash when checking certain
+     Russian words, this bug likely affected other languages as well.
+
+   * Updated to Gettext 0.14.5 which is required for AMD64, also
+     updated to to Libtool 1.5.20.
+
+   * Fixed an alignment bug which caused mmap to always fail when
+     reading in dictionaries.
+
+   * Added note about how `make clean' will remove the HTML manuals.
+
+   * Added manual page for prezip-bin and enhanced word-list-compress
+     manual page thanks to the work of Jose Da Silva.
+
+   * Other minor updates and bug fixes.
+
+Changes from 0.60.2 to 0.60.3 (June 28, 2005)
+=============================================
+
+   * Fixed bugs involving several of the C API functions.
+
+   * Fixed bug where `ultra' or `fast' mode would not return any
+     suggestions when soundslike lookup was not used.
+
+   * Made a minor, yet significant, optimization to the suggestion code.
+     This sped things up by an order of magnitude in some cases.
+
+   * Avoid using the slow ngram scan except when the `sug-mode' is
+     `slow' or `bad-speller'.
+
+   * Fixed a bug in curses mode which caused word-wrap to not work
+     correctly in some cases.
+
+   * Fixed a bug in pipe mode with a missing newline.
+
+   * Fixed the `spell' compatibility script.
+
+   * Several other minor bugs fixed.
+
+   * Made note about the change in behavior of the `-l' command line
+     switch.
+
+   * Other manual update/fixes.
+
+   * Updated to Libtool 1.5.18, Automake 1.9.6, and Makeinfo 4.8.
+
+Changes from 0.60.1 to 0.60.2 (December 18, 2004)
+=================================================
+
+   * Added the `munch-list' command to the Aspell utility.  The `munch'
+     program in the `myspell/' directory will disappear in Aspell 0.61.
+     The `munchlist' script will also likely disappear or be replaced
+     when Aspell 0.61 is released since it doesn't work correctly
+     anyway.
+
+   * Several important bug fixes some of which rendered some non-English
+     languages unusable.
+
+   * Other minor changes.
+
+Changes from 0.60.1 to 0.60.1.1 (November 20, 2004)
+===================================================
+
+   * Fix bug involving checking of capitalized word when affix
+     compression is used.
+
+   * Compile fixes.
+
+   * Added an option to disable using the "wide" curses version in case
+     it causes compile problems.
+
+   * Minor manual updates
+
+   * Avoided including some unnecessary files in the distribution.
+
+Changes from 0.60 to 0.60.1 (November 7, 2004)
+==============================================
+
+   * Lots of compile fixes for various platforms.
+
+   * Miscellaneous bug fixes.
+
+   * Added Nroff filter thanks to Sergey Poznyakoff.
+
+   * The default filter mode when in pipe mode is now nroff for
+     compatibility with Ispell.
+
+   * Added Texinfo filter.
+
+   * Added a section detailing the differences between Ispell and
+     Aspell.
+
+   * Updated the section on thread safety.
+
+   * Other miscellaneous manual changes such as updating the To Do and
+     Authors section.
+
+Changes from 0.50.5 to 0.60 (August 27, 2004)
+=============================================
+
+   * Added support for Affix Compression.  Affix compression stores the
+     root word and then a list of prefixes and suffixes that the word
+     can take, and thus saves a lot of space.  The codebase comes from
+     MySpell found in OpenOffice.  It uses the same affix file that
+     OpenOffice (and Mozilla) use.  Affix compression will even work
+     with soundslike lookup to a limited extent.
+
+   * Added support for accepting all input and printing all output in
+     UTF-8 or some other encoding different from the one Aspell uses.
+     This includes support for Unicode normalization.  Aspell can now
+     support any language with no more than 210 distinct characters,
+     including different capitalizations and accents, _even if_ there
+     is not an existing 8-bit encoding that supports the language.
+
+   * Added support for loadable filters and customizable filter modes
+     thanks to Christoph Hintermüller.
+
+   * Enhanced SGML filter to also support skipping sgml tags such as
+     "script" blocks thanks to Tom Snyder.
+
+   * Added gettext support thanks to Sergey Poznyakoff
+
+   * Reworked the compiled dictionary format.  Compiled dictionaries
+     now take up less space (less than 80% for the English language) and
+     creating them is significantly faster (over 4 times for the
+     English language).
+
+   * Reworked suggestion code.  It is significantly faster when dealing
+     with short words (up to 10 times).  Also added support for MySpell
+     Replacement Tables and n-gram lookup.  In addition, added basic
+     support for compound words.
+
+   * Manual has has been converted to texinfo format thanks to the work
+     of Chris Martin.
+
+   * Reworked the build system so that a single Makefile is used for
+     most of the code.
+
+   * All data, by default, is now included in `LIBDIR/aspell-0.60'.
+     Also added a built time option to increment the major version
+     number of the shared library.  This should allow both Aspell
+     version 0.50 and 0.60 to coexist.  The major version number is
+     _not_ incremented by default as Aspell 0.60 is binary compatible
+     with Aspell 0.50.  *Note Binary Compatibility::.
+
+   * The code to handle dictionaries has been rewritten.  Because of
+     this support for the dictionary option `strip-accents' has been
+     removed.  In addition the `ignore-accents' option is currently
+     unimplemented.
+
+   * Lots of other minor changes due to massive overhaul of the source
+     code.
+
+
+Changes from 0.50.4.1 to 0.50.5 (Feb 10, 2004)
+==============================================
+
+   * Reworked url filter which fixed several bugs and now accepts
+     "bla.bla/kdkdl" as a url.
+
+   * Fixed bug in which the url filter was coming before all other
+     filters when it was supposed to come after. This solved a number
+     of problems where the url filter was interfering with other
+     filters.
+
+   * Small bug fix in SGML filter.
+
+   * Added code page charsets, ie cp125?.dat.
+
+   * Added natural (split) keyboard data file as "split.kbd"
+
+   * Compile fixes for the upcoming Gcc 3.4
+
+   * Removed Solaris link hack as it was causing more problems than it
+     fixes.
+
+   * Compile fixes for Sun WorkShop 6 compiler, but there may still be
+     some problems, especially with linking.
+
+   * Included patch to help compile with Microsoft Visual C++ 6.
+
+   * Minor manual fixes.
+
+   * Updated the TODO section to reflect the current progress with the
+     next major version of Aspell (0.51).
+
+   * Updated to Autoconf 2.59, Automake 1.82, and Libtool 1.5.2.
+
+Changes from 0.50.4 to 0.50.4.1 (Oct 11, 2003)
+==============================================
+
+   * Fixed major bug in pipe mode which caused the last character to be
+     chopped off words before they were stored.
+
+   * Minor formating fixes in the manual.
+
+Changes from 0.50.3 to 0.50.4 (Sep 26, 2003)
+============================================
+
+   * Minor changes in URL filter to avoid treating the double quote
+     character as part of the URL, and to avoid treating words ending in
+     more than one period as a URL.
+
+   * Document fixes in Aspell API
+
+   * Small compile fixes, including one for GCC 3.3
+
+   * Updated Win32 section since a port now exists thanks to Thorsten
+     Maerz.
+
+   * Complain instead of doing nothing or aborting for unimplemented
+     functions in Aspell utility.
+
+   * Portability bug fixes.
+
+   * Upgraded to Autoconf 2.57, Automake 1.7.7, Libtool 1.5 (no longer
+     use CVS version  of libtool).
+
+Changes from 0.50.2 to 0.50.3 (Nov 23, 2002)
+============================================
+
+   * Hopefully fixed the Ispell alignment error problem when Aspell is
+     used with ispell.el.
+
+   * Fixed a problem with personal dictionaries on NFS mounted home
+     directories.
+
+   * Compiled libaspell-common directory into libaspell for now to avoid
+     forcing applications to relink whenever a new Aspell version is out
+     which was due to the use of the libtool '-release' flag.
+
+   * Fixed Makefiles so that Aspell can be built outside the source tree
+     (i.e.  with VPATH).
+
+   * Updated the section on compiling with Win32.
+
+   * Updated to Autoconf 2.56.
+
+Changes from 0.50.1 to 0.50.2 (Sep 28, 2002)
+============================================
+
+   * Fixed a number of bugs in Ispell compatibility mode
+
+   * Fixed a number of bugs with the handling of replacement pairs
+
+   * Other miscellaneous bug fixes
+
+   * Additional Win32 portability fixes
+
+   * Added the Ukrainian KOI8-U charset.
+
+Changes from 0.50 to 0.50.1 (Aug 28, 2002)
+==========================================
+
+   * A rather large number of portability fixes for non GNU/Linux
+     platforms.
+
+   * Fixed pkglibdir and pkgdatadir in configure.
+
+   * Reintroduced some configure options from Aspell .33.7 included
+     dict-dir, data-dir, curses, curses-include, win32-relocatable.
+
+   * Fixed Aspell so it will now compile with -O3 when using gcc.
+
+   * Updated note on Win32 support.
+
+   * Other minor manual improvements.
+
+   * Portability fixes in dictionary files
+
+   * Official dictionary package for the Slovak language.
+
+Changes from .33.7.1 to 0.50 (Aug 23, 2002)
+===========================================
+
+   * A complete overhaul of the source code which included merging
+     Pspell into Aspell.
+
+   * Changed the way dictionaries and languages are handled.
+
+   * Added Dvorak keymap.
+
+   * Added the ability to list the available dictionaries
+
+   * Improved the spell checking interface a bit.
+
+   * Added support for using the Ispell keymapping when checking files.
+
+   * Complete rewrite of the filter interface.   It should now be
+     fairly easy to add new filters to Aspell.
+
+   * Added some preliminary developer documentation.
+
+   * Lots of other changes due to the massive overhaul of the source
+     code.
+
+Changes from .33.7 to .33.7.1 (Aug 20, 2001)
+============================================
+
+   * Minor manual fixes.
+
+   * Compile fix for Gcc 3.0 and Solaris.
+
+Changes from .33.6.3 to .33.7 (Aug 2, 2001)
+===========================================
+
+   * Updates to Autoconf 2.50 and switched to the HEAD branch of
+     libtools.
+
+   * Fixed a bug which caused Aspell to crash when typo-analysis was not
+     used such as when sug-mode is *fast* or *bad spellers*.
+
+   * Added support for typo-analysis even when a soundslike was not
+     used.
+
+   * Fixed a bug which causes extended charters to display incorrectly
+     on some platforms
+
+   * Compile fixes so that it will compile with Gcc 3.0.
+
+   * Compile fixed which should allow Aspell to compile with Egcs 1.1.
+     I have not been able to actually test it though.  Please let me
+     know at kevina@users.sourceforge.net if you have tried with Egcs
+     1.1.
+
+   * Compile and configuration script fixes so that USE_FILE_INO will
+     properly be defined and Aspell will compile correctly when it is
+     defined.
+
+   * More ANSI C++ compliance fixes.
+
+Changes from .33.6.2 to .33.6.3 (June 3, 2001)
+==============================================
+
+   * Fixed a build problem in the manual/ directory by including
+     manual-text and manual-html in the distribution.
+
+Changes from .33.6.1 to .33.6.2 (June 3, 2001)
+==============================================
+
+   * Compile fix so that Aspell will work correctly when not installed
+     in /usr/local.
+
+   * Avoided regenerating the manual unless configured with
+     enable-maintainer-mode.
+
+   * Added the missing documentation files in the scowl directory.
+
+Changes from .33.6 to .33.6.1 (May 29, 2001)
+============================================
+
+   * Fixed a formating problem with the manual involving <.
+
+   * Added a note about creating pwli files.
+
+   * Removed the space after between the -L and the directory name in
+     the pspell-module/Makefile  which caused problems on some
+     platforms.
+
+   * Added the configure option AM_MAINTAINER_MODE to avoid enabling
+     rules which often causes generated build files to be rebuilt with
+     the wrong version of Libtool by default.  I don't know why I
+     didn't think to do this a long time ago.
+
+Changes from .33.5 to .33.6 (May 18, 2001)
+==========================================
+
+   * Fixed a minor bug where some words would have random compound tags
+     attached to them.
+
+   * Fixed a compile problem on many platforms where fileno is defined
+     as a macro.
+
+   * Updated the description for a few of Aspell's options.
+
+   * Removed the note of Aspell not being able to run when compiled with
+     the upcoming Gcc 3.0 compiler as things seam to work now.
+
+   * Added a note about Aspell not being able to compile with Egcs 1.1.
+
+   * Added hack to deal with Libtool's interdependencies problem.  See
+     bug #416981 for Pspell for more info.
+
+Changes from .33 to .33.5 (April 5, 2001)
+=========================================
+
+   * *dump master* correctly detects which dictionary and language to
+     use based on the `LANG' environment variable.
+
+   * Fixed a problem on Win32 which involves path names that began with
+     <Drive Letter>:.
+
+   * Bug fixes and enhancements so that Aspell can once again run under
+     MinGW.  You can even use the new full screen interface if Aspell is
+     compiled with PDCurses.
+
+   * Some major modifications to make Aspell more C++ compliant in
+     order to get Aspell to compile under the upcoming Gcc 3.0
+     compiler.  This included only using STL features found in the
+     standard version of C++.  (Which means Aspell will no longer
+     require using the SGI version of the STL) This should also make
+     compiling C++ under non-gcc compilers a lot simpler.  Please note
+     that Aspell still has some problems with the upcoming Gcc 3.0
+     compiler.
+
+   * Minor changes to remove some -Wall warnings.
+
+   * Added a hack so that Aspell would properly compile as a shared
+     library under Solaris.
+
+   * Added a few important missing words to the English word list.
+
+Changes from .32.6 to .33 (January 28, 2001)
+============================================
+
+   * Added a new new curses based interface to replace the dumb terminal
+     interface everyone has been bitching about.
+
+   * Added the ability to give higher priority to words such as "the"
+     instead of "teh" which are likely to be due to typos.
+
+   * Reorganized the manual so that it is hopefully easier to follow.
+
+   * Ability to automatically select the best dictionary to use based on
+     the setting of the `LANG' environment variable.
+
+   * Expanded the medium dictionary size to include more words which
+     included the original words found in Ispell and eliminated the
+     large size for now.
+
+   * Added three special variant add-on dictionaries.
+
+   * Switched to the multi-language branch of the CVS version of
+     libtool.
+
+
+Changes from .32.5 to .32.6 (Nov 8, 2000)
+=========================================
+
+   * Fixed a bug where Aspell would crash when reading-in accented
+     characters on some platforms.  This fixed bug # 112435.
+
+   * Fixed some other bugs so that it will run under Win32 under CygWin.
+     Unfortunately it still won't run properly under Mingw.
+
+   * Fixed the mmap test in configure so that it won't fail on some
+     platforms that use munmap(char *, int) instead of munmap(void *,
+     int).
+
+   * Upgraded to the latest CVS version of libtool which fixed the
+     problem with using GNU Make under Solaris.
+
+   * Added an option to copy files instead of using symbolic links for
+     the special *multi* dictionary files.
+
+Changes from .32.1 to .32.5 (August 18, 2000)
+=============================================
+
+   * Changed my email from kevinatk at home com to kevina at users
+     sourceforge net please make a note of the new email address.
+
+   * Added an option to control if the personal replacement dictionary
+     is saved when the save_all_wls method is called.
+
+   * Brought back the ability to dump the master word list even in the
+     case of the special *multi* lists.
+
+   * Added a large number of hacker related words and some other slang
+     terms to the medium size word list.
+
+   * Added an *ispell* and *spell* compatibility script for systems
+     which don't have Ispell installed.  They are located in the
+     scripts/ directory and are not installed by default.
+
+   * Manual fixes.
+
+   * Added a note on not using GNU Make on Solaris.
+
+Changes from .32 to .32.1 (August 5, 2000)
+==========================================
+
+   * Minor compile fixes for recent gcc snapshot.
+
+   * Fixed naming of pwli files.
+
+   * Fixed a bug when Aspell will crash when used with certain single
+     letter flags.  This bug was most noticeable when used with Emacs.
+
+   * Word list changes, see SCOWL Readme.
+
+   * Other miscellaneous changes.
+
+Changes from .31.1 to .32 (July 23, 2000)
+=========================================
+
+   * Added support for optionally doing without the soundslike data.
+
+   * Greatly reduced the amount of memory used when creating word lists.
+
+   * Added support for ignoring accents when coming up with suggestions.
+
+   * Added support for local-data-dir which is searched before data-dir.
+
+   * Added support for specifying which words may be used in compounds
+     and where  they may be used.
+
+   * Added support for having more than one main word list as well as a
+     special *multi* word list files which will allow multiple word
+     lists to be treated as one.
+
+   * Aspell now uses a completely new word list.
+
+   * The apostrophe (') is no longer considered part of the word when
+     it as at the end of the word such as in `dogs''.
+
+Changes from .31 to .31.1 (June 18, 2000)
+=========================================
+
+   * Fixed a bug where Aspell would not create a complete dictionary
+     file on some platforms when the data is 8-bit.
+
+   * Added a workaround so Aspell will work with ispell.el 3.3.
+
+   * Minor compile fixes so it would compile better with the very latest
+     gcc (CVS Version).
+
+   * Removed note about compiling in Win32 as I was now able to get it
+     to work.
+
+Changes from .30.1 to .31 (June 11, 2000)
+=========================================
+
+   * Added support for spell checking run together words.
+
+   * Added an option to produce a list of misspelled words from
+     standard input.
+
+   * More robust error reporting when reading in language data files.
+
+   * Fixed a bug that would cause Aspell to crash if the *special* line
+     was not defined in the language data file.
+
+   * Updated Pspell Module.
+
+   * Minor bug fixes.
+
+   * Added cross references in "The Aspell Utility Chapter" for easier
+     use.
+
+Changes from .30 to .30.1 (April 29, 2000)
+==========================================
+
+   * Ported Aspell to Win32 platforms.
+
+   * Portability fixes which may help Aspell compile on other platforms.
+
+   * Aspell will no longer fail if for some reason the mmap fails,
+     instead it will just read the file in as normal and free the
+     memory when done.
+
+   * Minor changes in the format of the main word list as a result of
+     the changes, the old format should still work in most cases.
+
+   * Fixed a bug where Aspell was ignoring the extension of file names
+     such as .html or .tex when checking files.
+
+   * Fixed a bug where Aspell will go into an infinite loop when
+     creating the main word list from a word list which has duplicates
+     in it.
+
+   * Minor changes to the manual for better clarity.
+
+Changes from .29.1 to .30 (April 2, 2000)
+=========================================
+
+   * Fixed many of the capitalization bugs found in previous versions of
+     Aspell.
+
+   * Changed the format of the main word list yet again.
+
+   * Fixed a bug so that `aspell check' will work on the PowerPC.
+
+   * Added ability to change configuration options in the middle of a
+     session.
+
+   * Added words from /usr/dict/words found on most Linux systems as
+     well as a bunch of commonly used abbreviations to the word list.
+
+   * Fixed a bug where Aspell would dump core after reporting certain
+     errors when compiled with gcc 2.95 or higher.  This involved
+     reworking the Exception heritage to get around a bug in gcc 2.95.
+
+   * Added a few more commands to the list of default commands the TeX
+     filter knows about.
+
+   * Aspell will now check if a word only contains valid characters
+     before adding it to any dictionaries.  This might mean that you
+     have to manually delete a few words from your personal word list.
+
+   * Added option to ignore case when checking a document.
+
+   * Adjusted the parameters of the *normal* suggest mode to so that
+     significantly less far fetched results are returned in cases such
+     as tomatoe, which went from 100 suggestions down to 32, at the
+     expense of getting slightly lower results (less than 1%),
+
+   * Improved the edit distance algorithm for slightly faster results.
+
+   * Removed the `$$m' command in pipe mode, you should now use `$$cs
+     mode,MODE' to set the mode and *$$cr mode* to find out the current
+     mode.
+
+   * Reworked parts of Aspell to use Pspell services to avoid
+     duplicating code.
+
+   * Added a module for the newly released Pspell.  It will get
+     installed with the rest of Aspell.
+
+   * Miscellaneous other bug fixes.
+
+Changes from .29 to .29.1 (Feb 18, 2000)
+========================================
+
+   * Improved the TeX filter so that it will accept '@' at the beginning
+     of a command name and ignored trailing '*'s.  It also now has
+     better defaults for which parameters to skip.
+
+   * Reworked the main dictionary so that it can be memory mapped in.
+     This decreases startup time and allows multiple Aspell processes
+     to use the same memory for the main word list.  This also also
+     made Aspell 64 bit clean so that it should work on an alpha now.
+
+   * Fix so that Aspell could compile on platforms that gnu is not yet
+     available for.
+
+   * Fixed issue with flock so it would compile on FreeBSD.
+
+   * Minor changes in the code to make it more C++ compliant although I
+     am sure there will still be problems when using some other
+     compiler other than gcc or egcs.
+
+   * Added some comments to the header files to better document a few of
+     the classes.
+
+Changes from .28.3 to .29 (Feb 6, 2000)
+=======================================
+
+   * Fixed a bug in the pipe mode with lines that start with `^$$'.
+
+   * Added support for ignoring all words less than or equal to a
+     specified length
+
+   * New soundslike code based thanks to the contribution of Björn
+     Jacke.  It now gets all of its data from a table making it easier
+     for other people to add soundslike code for their native language.
+     He also converted the metaphone algorithm to table form,
+     eliminating the need for the old metaphone code.
+
+   * Major redesign of the suggestion code for better results.
+
+   * Changed the format of the personal word lists.  In most cases it
+     should be converted automatically.
+
+   * Changed the format of the main word list.
+
+   * Name space cleanup for more consistent naming.  I now use name
+     spaces which means that gcc 2.8.* and egcs 1.0.* will no longer
+     cut it.
+
+   * Used file locks when reading and saving the personal dictionaries
+     so that it truly multiprocesses safely.
+
+   * Added rudimentary filter support.
+
+   * Reworked the configuration system once again.  However, the
+     changes to the end user who does not directly use my library
+     should be minimal.
+
+   * Rewrote my code that handles parsing command line parameters so
+     that it no longer used popt as it was causing too many problems
+     and didn't integrate well with my new configuration system.
+
+   * Fixed pipe mode so that it will properly ignore lines starting with
+     '~' for better Ispell compatibility.
+
+   * Aspell now has a new home page at
+     `http://aspell.sourceforge.net/'.  Please make note of the new URL.
+
+   * Miscellaneous manual fixes and clarifications.
+
+Changes from .28.2.1 to .28.3 (Nov 20, 1999)
+============================================
+
+   * Fixed a bug that caused Aspell to crash when spell checking words
+     over 60 characters long.
+
+   * Reworked *aspell check* so that
+       1. You no longer have to hit enter when making a choice.
+
+       2. It will now overwrite the original file instead of creating a
+          new file.  An optional backup can be made by using the -b
+          option.
+
+   * Fixed a few bugs in data.cc.
+
+Changes from .28.2 to .28.2.1 (Aug 25, 1999)
+============================================
+
+   * Fixed the version number for the shared library.
+
+   * Fixed a problem with undefined references when linking to the
+     shared library.
+
+Changes from .28.1 to .28.2 (Aug 25, 1999)
+==========================================
+
+   * Fixed a bunch of bugs in the language and configuration classes.
+
+   * Minor changes in the code so that it could compile with the new gcc
+     2.95(.1).
+
+   * Changed the output of `dump config' so that default values are
+     given the value `<default>'.  This means that the output can be
+     used to create a configuration file.
+
+   * Added notes on using Aspell with VIM.
+
+Changes from .28 to .28.1 (July 27, 1999)
+=========================================
+
+   * Removed some debug output
+
+   * Changed notes on compiling with gcc 2.8.* as I managed to get it to
+     compile on my school account
+
+   * Avoided including *stdexcept* in `const_string.hh' so that I could
+     get Aspell to compile on my school account with gcc 2.8.1.
+
+Changes from .27.2 to .28 (July 25, 1999)
+=========================================
+
+     Provided an iterator for the replacement classes.
+
+   * Added support for dumping and creating and merging the personal and
+     replacement word lists.
+
+   * Changed the Aspell utility command line a bit, it now used popt.
+
+   * Totally reworked Aspell configuration system.  Now Aspell could get
+     configuration from any of 5 sources: the command line, the
+     environment variable `ASPELL_CONF', the personal configuration
+     file, the global configuration file, and finally the compiled-in
+     defaults.
+
+   * Totally reworked the language class in preparation for my new
+     language code.  See `http://aspell.sourceforge.net/international/'
+     for more information of what I have in store.
+
+   * Added some options to the configure script: -enable-dict-dir=DIR,
+     -enable-doc-dir=DIR, -enable-debug, and -enable-opt
+
+   * Removed some old header files.
+
+   * Reorganized the directory structure a bit
+
+   * Made the text version of the manual pages slightly easier to read
+
+   * Used the `\url' command for urls for better formating of the
+     printed version.
+
+Changes from .27.1 to .27.2 (Mar 1, 1999)
+=========================================
+
+   * Fixed a major bug that caused Aspell to dump core when used without
+     any arguments
+
+   * Fixed another major bug that caused Aspell to do nothing when used
+     in interactive mode.
+
+   * Added an option to exit in Aspell's interactive mode.
+
+   * Removed some old documentation files from the distribution.
+
+   * Minor changes to the the section on using Aspell with egcs.
+
+   * Minor changes to remove -Wall warnings.
+
+Changes from .27 to .27.1 (Feb 24, 1999)
+========================================
+
+   * Fixed a minor compile problem.
+
+   * Updated the section on using Aspell with egcs to it.  It was now
+     more clear why the patch was necessary.
+
+Changes from .26.2 to .27 (Feb 22, 1999)
+========================================
+
+   * Totally reworked the C++ library which means you may need to change
+     some things in your code.
+
+   * Added support for detachable and multiple personal dictionaries in
+     the C++ class library.
+
+   * The C++ class library now throws exceptions.
+
+   * Reworked Aspell ability to learn from users misspellings a bit so
+     that it now has a memory.  For more information see *Note Notes on
+     Storing Replacement Pairs::.
+
+   * Upgraded autoconf to version 2.13 and automake to version 1.4 for
+     better portability.
+
+   * Fixed the configuration so the `make dist' will work.  From now on
+     Aspell will be distributed with `make dist'.
+
+   * Added support to skip over URL's, email addresses and host names.
+
+   * Added support for dumping the master and personal word list.  You
+     can now also merge a personal word list.  Type aspell -help for
+     help on using this feature.
+
+   * Reorganized the source code.
+
+   * Started using proper version numbers for the shared library.
+
+   * Fixed a bug that caused Aspell to crash when adding certain
+     replacement pairs.
+
+   * Fixed the problem with duplicate lines when exiting pipe mode for
+     good.
+
+Changed from .26.1 to .26.2 (Jan 3, 1998)
+=========================================
+
+   * Fixed another compile problem.  Hopefully this time it will really
+     compile OK on other peoples machines.
+
+Changed from .26 to .26.1 (Jan 3, 1998)
+=======================================
+
+   * Fixed a small compile problem in `as_data.cc'.
+
+Changed from .25.1 to .26 (Jan 3, 1999)
+=======================================
+
+   * Fixed a bug that caused duplicate items to be displayed in the
+     suggestion list for good.  (If it still does it please send me
+     email.)
+
+   * Added the ability for Aspell to learn form the users misspellings.
+
+   * Library Interface changes.  Still more to come ....
+
+   * Is now multiprocess safe.  When a personal dictionary (or
+     replacement list) is saved it will now first update the list
+     against the dictionary on disk in case another process modified it.
+
+   * Fixed the bug that caused duplicate output when used non
+     interactively in pipe mode.
+
+   * Dropped support for gcc 2.7.2 as the C++ compiler.
+
+   * Updated the How Aspell Works (*Note Aspell Suggestion Strategy::.)
+
+   * Added support for the `ASPELL_DATA_DIR' environment variable.
+
+Changes from .25 to .25.1 (Dec 10, 1998)
+========================================
+
+   * Fixed the version number so that Aspell reports the correct version
+     number.
+
+   * Changed the note on gcc 2.7.2 compilers to make it clear that only
+     the C++ compiler cannot be gcc 2.7.2, it is OK if the C compiler
+     is gcc 2.7.2.
+
+   * Updated the TODO list and reorganized it a bit.
+
+   * Fixed the directory so that all the documentation will get
+     installed in ${prefix}/doc/aspell instead of half of it in
+     ${prefix}/doc/aspell and half of it in ${prefix}/doc/kspell.
+
+Changes from .24 to .25 (Nov 23, 1998)
+======================================
+
+   * Total rework of how the main word list is stored.  Start up time
+     decreased to about 1/3 of what it was in .24 and memory usage
+     decreased to about 2/3.  (When used with the provided word list on
+     a Linux system).
+
+     Also the format and default locations of the main word list data
+     files changed in the process and the data is now machine
+     dependent.  The personal word list format, however, stayed the
+     same.
+
+   * Changed the scoring method to produce slightly better results with
+     words like the vs.  teh.  And other simpler misspellings where two
+     letters are swapped.
+
+   * Fixed the very unpredictable behavior of the `*', `&', `@'
+     commands in the pipe mode.
+
+   * Added documentations for Aspell pipe mode (also known as `ispell
+     -a' compatibility mode)
+
+   * Added a bunch of Aspell specific extensions to the pipe mode and
+     documented them.
+
+   * Documented the `to_soundslike' and `soundslike' methods for the
+     `aspell' class.
+
+   * Changed the scoring method to produce better results for words like
+     _fone_ vs _phone_ and other words that have a spelling that
+     doesn't directly relate to how the word sounds by using the phoneme
+     equivalent of the word in the scoring of it.
+
+   * Added the `to_phoneme' and `have_phoneme' methods to the
+     `SC_Language' class.
+
+   * Added the `to_phoneme' method to the `aspell' class.
+
+   * Added the framework for being able to learn from the users
+     misspelling.  Right now it just keeps a log of replacements.
+
+   * Redid `stl_rope-30.diff'.  For some reason the version of patch on
+     my system refused it.
+
+   * Rewrite of the "_Using as a replacement for Ispell_" section and
+     added the `run-with-aspell' utility as a replacement of the old
+     method of mapping Ispell to Aspell.
+
+   * Fixed a bug that caused duplicate words to appear in the suggestion
+     list.
+
+Changes from .23 to .24 (Nov 8, 1998)
+=====================================
+
+   * Fixed my code so that it can once again compile with g++ 2.7.2.
+
+   * Rewrote the How It Works chapter.
+
+   * Rewrote the Requirement section and added notes on compiling with
+     g++ 2.7.2.
+
+   * Added a To Do chapter.
+
+   * Added a Glossary and References chapter.
+
+   * Other minor documentation improvements.
+
+   * Internal code documentation improvements.
+
+Changes from .22.1 to .23 (Oct 31, 1998)
+========================================
+
+   * Minor documentation fixes.
+
+   * Changed the scoring strategy for words with 3 or less letters.
+     This cut the number of words returned for these roughly in half.
+
+   * Expanded the word list to also include *american.0* and
+     *american.1* from the Ispell distribution.  It now includes
+     *english.0*, *english.1*, *american.0* and *american.1* from the
+     directory `languages/english' provided with Ispell 3.1.20.
+
+   * Added a link to the location of the latest Ispell.el in the
+     documentation.
+
+   * Started a C interface and added some rough documentation for it.
+
+Changes from .22 to .22.1 (Oct 27, 1998)
+========================================
+
+   * Minor bug fixes.  I was deleting arrays with delete rather than
+     delete[].  I was suprised that this had not created a problem.
+
+   * Added a simple test program to test for a memory leak present on
+     some systems.  (Only debian slink at the moment.) See the file
+     memleak-test.cc for more info.
+
+Changes from .21 to .22 (Oct 26, 1998)
+======================================
+
+   * Major redesign of the scoring method.  It now uses absolute
+     distances rather than relative scores for more consistent results.
+     See `suggest.cc' for more info.
+
+   * Suggest code rewritten in several places, however the core process
+     stayed the same.
+
+   * The `suggest_ultra' method temporarily does nothing.  It should be
+     working again by the next release.
+
+Changes from .20 to .21 (Oct 13, 1998)
+======================================
+
+   * Added documentation for aspell::Error
+
+   *  Changed the library name from `libspell' to `libaspell'.  It
+     should never have been `libspell' in the first place.  Sorry for
+     the incompatibility.
+
+   * Added `as_error.hh' to the list of files copied to the include
+     directory so that you can actually use the library outside of the
+     source dir.
+
+   * Fixed bug that caused a segmentation fault with words where the
+     only suggestions was inserting a space or hyphen such as in
+     *ledgerline*.
+
+   * Added the *score* method to `aspell'.
+
+   * Changed the scoring method to deal with word when the user uses
+     "f" in place of "ph" a lot better.
+
+Changes from .11 to .20 (Oct 10, 1998)
+======================================
+
+   * _Name change_.  Everything that was Kspell is now Aspell.  Sorry,
+     the name Kspell was already used by KDE and I didn't want to cause
+     any confusion.
+
+   * Fixed a bug that causes a segmentation fault when the `HOME'
+     environment variable doesn't exist.
+
+Changes from .10 to .11 (Sep 12, 1998)
+======================================
+
+   * Overhaul of the SC_Language class
+
+   * Added documentation for international support
+
+   * Added documentation for the C++ library
+
+   * Other minor bug fixes.
+
+\1f
+File: aspell.info,  Node: Authors,  Next: Copying,  Prev: ChangeLog,  Up: Top
+
+Appendix G Authors
+******************
+
+The following people or companies have contributed a non-trival amount
+of code to Aspell and thus own the Copyright to part of Aspell.
+
+Jose Da Silva
+     Bug fixes and enhancements to `word-list-compress'.
+
+Sergey Poznyakoff
+     Wrote the Nroff filter.
+
+Tom Snyder
+     Enhanced the SGML filter to also support skipping sgml tags such as
+     "script" blocks.
+
+Kevin B. Hendricks (and Contributers)
+     Wrote MySpell which is a simple spell checker library that supports
+     affix compression.  Aspell affix compression code is based on his
+     code.
+
+Christoph Hintermüller
+     Added support for loadable filters.
+
+Melvin Hadasht
+     Wrote a locale independent version of strtol and strtod.  Wrote
+     the original loadable filter support however his code has been
+     completely rewritten by Christoph Hintermüller and Kevin Atkinson.
+
+Björn Jacke
+     Wrote the generic soundslike algorithm which gets all of its data
+     from a file, thus eliminating almost all need for language
+     specific code from Aspell.
+
+Silicon Graphics Computer Systems, Inc.
+Hewlett-Packard Company
+     Parts of the SGI STL code were used in various places throughout
+     the Aspell source.
+
+
+   In addition the authors of some of translated messages did not
+release their work into the Public Domain, and thus own the copyright
+to the translated text.  See the files `*.po' in the `po' directory for
+more details.
+
+   The folowing people also contributed to the development of Aspell
+but do not own the Copyright to part of Aspell.
+
+Sergey Poznyakoff
+     Added gettext support.
+
+Chris Martin
+     Converted the manual to texinfo.
+
+Lawrence Philips
+     Wrote the original metaphone algorithm; however, he released his
+     work into the Public Domain.
+
+Michael Kuhn
+     Converted the metaphone algorithm into C code and made some
+     enhancements to the original algorithm.  He also released his work
+     into the Public Domain.
+
+Geoff Kuenning (and contributers)
+     The authors of Ispell.  Many of the ideas used in Aspell,
+     especially with the affix code, were taken from Ispell.  However
+     none of the original Ispell code is used in Aspell.
+
+
+\1f
+File: aspell.info,  Node: Copying,  Prev: Authors,  Up: Top
+
+Appendix H Copying
+******************
+
+Copyright (C) 2000-2006 Kevin Atkinson.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+   The library and utility program is copyright (C) 2000-2006 by Kevin
+Atkinson.  You can redistribute it and/or modify it under the terms of
+the GNU Lesser General Public License as (LGPL) published by the Free
+Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+   Certain parts of the library, as indicated at the top of the source
+file, are under a weaker license.  However, all parts of the library
+are LGPL Compatible.
+
+* Menu:
+
+* GNU Free Documentation License::
+* GNU Lesser General Public License::
+
+\1f
+File: aspell.info,  Node: GNU Free Documentation License,  Next: GNU Lesser General Public License,  Up: Copying
+
+H.1 GNU Free Documentation License
+==================================
+
+                      Version 1.2, November 2002
+
+     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided for under this License.  Any other
+     attempt to copy, modify, sublicense or distribute the Document is
+     void, and will automatically terminate your rights under this
+     License.  However, parties who have received copies, or rights,
+     from you under this License will not have their licenses
+     terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.
+
+H.1.1 ADDENDUM: How to use this License for your documents
+----------------------------------------------------------
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.2
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+\1f
+File: aspell.info,  Node: GNU Lesser General Public License,  Prev: GNU Free Documentation License,  Up: Copying
+
+H.2 GNU Lesser General Public License
+=====================================
+
+                      Version 2.1, February 1999
+
+     Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+     [This is the first released version of the Lesser GPL.  It also counts
+     as the successor of the GNU Library Public License, version 2, hence the
+     version number 2.1.]
+
+H.2.1 Preamble
+--------------
+
+The licenses for most software are designed to take away your freedom
+to share and change it.  By contrast, the GNU General Public Licenses
+are intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.
+
+   This license, the Lesser General Public License, applies to some
+specially designated software--typically libraries--of the Free
+Software Foundation and other authors who decide to use it.  You can use
+it too, but we suggest you first think carefully about whether this
+license or the ordinary General Public License is the better strategy to
+use in any particular case, based on the explanations below.
+
+   When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of it
+in new free programs; and that you are informed that you can do these
+things.
+
+   To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+   For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+   We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+   To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know that
+what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+   Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+   Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and is
+quite different from the ordinary General Public License.  We use this
+license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+   When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+   We call this license the "Lesser" General Public License because it
+does _Less_ to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+   For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+   In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of free
+software.  For example, permission to use the GNU C Library in non-free
+programs enables many more people to use the whole GNU operating
+system, as well as its variant, the GNU/Linux operating system.
+
+   Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run that
+program using a modified version of the Library.
+
+   The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                   GNU LESSER GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+  0. This License Agreement applies to any software library or other
+     program which contains a notice placed by the copyright holder or
+     other authorized party saying it may be distributed under the
+     terms of this Lesser General Public License (also called "this
+     License").  Each licensee is addressed as "you".
+
+     A "library" means a collection of software functions and/or data
+     prepared so as to be conveniently linked with application programs
+     (which use some of those functions and data) to form executables.
+
+     The "Library", below, refers to any such software library or work
+     which has been distributed under these terms.  A "work based on the
+     Library" means either the Library or any derivative work under
+     copyright law: that is to say, a work containing the Library or a
+     portion of it, either verbatim or with modifications and/or
+     translated straightforwardly into another language.  (Hereinafter,
+     translation is included without limitation in the term
+     "modification".)
+
+     "Source code" for a work means the preferred form of the work for
+     making modifications to it.  For a library, complete source code
+     means all the source code for all modules it contains, plus any
+     associated interface definition files, plus the scripts used to
+     control compilation and installation of the library.
+
+     Activities other than copying, distribution and modification are
+     not covered by this License; they are outside its scope.  The act
+     of running a program using the Library is not restricted, and
+     output from such a program is covered only if its contents
+     constitute a work based on the Library (independent of the use of
+     the Library in a tool for writing it).  Whether that is true
+     depends on what the Library does and what the program that uses
+     the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+     complete source code as you receive it, in any medium, provided
+     that you conspicuously and appropriately publish on each copy an
+     appropriate copyright notice and disclaimer of warranty; keep
+     intact all the notices that refer to this License and to the
+     absence of any warranty; and distribute a copy of this License
+     along with the Library.
+
+     You may charge a fee for the physical act of transferring a copy,
+     and you may at your option offer warranty protection in exchange
+     for a fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+     of it, thus forming a work based on the Library, and copy and
+     distribute such modifications or work under the terms of Section 1
+     above, provided that you also meet all of these conditions:
+
+       a. The modified work must itself be a software library.
+
+       b. You must cause the files modified to carry prominent notices
+          stating that you changed the files and the date of any change.
+
+       c. You must cause the whole of the work to be licensed at no
+          charge to all third parties under the terms of this License.
+
+       d. If a facility in the modified Library refers to a function or
+          a table of data to be supplied by an application program that
+          uses the facility, other than as an argument passed when the
+          facility is invoked, then you must make a good faith effort
+          to ensure that, in the event an application does not supply
+          such function or table, the facility still operates, and
+          performs whatever part of its purpose remains meaningful.
+
+          (For example, a function in a library to compute square roots
+          has a purpose that is entirely well-defined independent of the
+          application.  Therefore, Subsection 2d requires that any
+          application-supplied function or table used by this function
+          must be optional: if the application does not supply it, the
+          square root function must still compute square roots.)
+
+     These requirements apply to the modified work as a whole.  If
+     identifiable sections of that work are not derived from the
+     Library, and can be reasonably considered independent and separate
+     works in themselves, then this License, and its terms, do not
+     apply to those sections when you distribute them as separate
+     works.  But when you distribute the same sections as part of a
+     whole which is a work based on the Library, the distribution of
+     the whole must be on the terms of this License, whose permissions
+     for other licensees extend to the entire whole, and thus to each
+     and every part regardless of who wrote it.
+
+     Thus, it is not the intent of this section to claim rights or
+     contest your rights to work written entirely by you; rather, the
+     intent is to exercise the right to control the distribution of
+     derivative or collective works based on the Library.
+
+     In addition, mere aggregation of another work not based on the
+     Library with the Library (or with a work based on the Library) on
+     a volume of a storage or distribution medium does not bring the
+     other work under the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+     License instead of this License to a given copy of the Library.
+     To do this, you must alter all the notices that refer to this
+     License, so that they refer to the ordinary GNU General Public
+     License, version 2, instead of to this License.  (If a newer
+     version than version 2 of the ordinary GNU General Public License
+     has appeared, then you can specify that version instead if you
+     wish.)  Do not make any other change in these notices.
+
+     Once this change is made in a given copy, it is irreversible for
+     that copy, so the ordinary GNU General Public License applies to
+     all subsequent copies and derivative works made from that copy.
+
+     This option is useful when you wish to copy part of the code of
+     the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+     derivative of it, under Section 2) in object code or executable
+     form under the terms of Sections 1 and 2 above provided that you
+     accompany it with the complete corresponding machine-readable
+     source code, which must be distributed under the terms of Sections
+     1 and 2 above on a medium customarily used for software
+     interchange.
+
+     If distribution of object code is made by offering access to copy
+     from a designated place, then offering equivalent access to copy
+     the source code from the same place satisfies the requirement to
+     distribute the source code, even though third parties are not
+     compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+     Library, but is designed to work with the Library by being
+     compiled or linked with it, is called a "work that uses the
+     Library".  Such a work, in isolation, is not a derivative work of
+     the Library, and therefore falls outside the scope of this License.
+
+     However, linking a "work that uses the Library" with the Library
+     creates an executable that is a derivative of the Library (because
+     it contains portions of the Library), rather than a "work that
+     uses the library".  The executable is therefore covered by this
+     License.  Section 6 states terms for distribution of such
+     executables.
+
+     When a "work that uses the Library" uses material from a header
+     file that is part of the Library, the object code for the work may
+     be a derivative work of the Library even though the source code is
+     not.  Whether this is true is especially significant if the work
+     can be linked without the Library, or if the work is itself a
+     library.  The threshold for this to be true is not precisely
+     defined by law.
+
+     If such an object file uses only numerical parameters, data
+     structure layouts and accessors, and small macros and small inline
+     functions (ten lines or less in length), then the use of the object
+     file is unrestricted, regardless of whether it is legally a
+     derivative work.  (Executables containing this object code plus
+     portions of the Library will still fall under Section 6.)
+
+     Otherwise, if the work is a derivative of the Library, you may
+     distribute the object code for the work under the terms of Section
+     6.  Any executables containing that work also fall under Section 6,
+     whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+     link a "work that uses the Library" with the Library to produce a
+     work containing portions of the Library, and distribute that work
+     under terms of your choice, provided that the terms permit
+     modification of the work for the customer's own use and reverse
+     engineering for debugging such modifications.
+
+     You must give prominent notice with each copy of the work that the
+     Library is used in it and that the Library and its use are covered
+     by this License.  You must supply a copy of this License.  If the
+     work during execution displays copyright notices, you must include
+     the copyright notice for the Library among them, as well as a
+     reference directing the user to the copy of this License.  Also,
+     you must do one of these things:
+
+       a. Accompany the work with the complete corresponding
+          machine-readable source code for the Library including
+          whatever changes were used in the work (which must be
+          distributed under Sections 1 and 2 above); and, if the work
+          is an executable linked with the Library, with the complete
+          machine-readable "work that uses the Library", as object code
+          and/or source code, so that the user can modify the Library
+          and then relink to produce a modified executable containing
+          the modified Library.  (It is understood that the user who
+          changes the contents of definitions files in the Library will
+          not necessarily be able to recompile the application to use
+          the modified definitions.)
+
+       b. Use a suitable shared library mechanism for linking with the
+          Library.  A suitable mechanism is one that (1) uses at run
+          time a copy of the library already present on the user's
+          computer system, rather than copying library functions into
+          the executable, and (2) will operate properly with a modified
+          version of the library, if the user installs one, as long as
+          the modified version is interface-compatible with the version
+          that the work was made with.
+
+       c. Accompany the work with a written offer, valid for at least
+          three years, to give the same user the materials specified in
+          Subsection 6a, above, for a charge no more than the cost of
+          performing this distribution.
+
+       d. If distribution of the work is made by offering access to copy
+          from a designated place, offer equivalent access to copy the
+          above specified materials from the same place.
+
+       e. Verify that the user has already received a copy of these
+          materials or that you have already sent this user a copy.
+
+     For an executable, the required form of the "work that uses the
+     Library" must include any data and utility programs needed for
+     reproducing the executable from it.  However, as a special
+     exception, the materials to be distributed need not include
+     anything that is normally distributed (in either source or binary
+     form) with the major components (compiler, kernel, and so on) of
+     the operating system on which the executable runs, unless that
+     component itself accompanies the executable.
+
+     It may happen that this requirement contradicts the license
+     restrictions of other proprietary libraries that do not normally
+     accompany the operating system.  Such a contradiction means you
+     cannot use both them and the Library together in an executable
+     that you distribute.
+
+  7. You may place library facilities that are a work based on the
+     Library side-by-side in a single library together with other
+     library facilities not covered by this License, and distribute
+     such a combined library, provided that the separate distribution
+     of the work based on the Library and of the other library
+     facilities is otherwise permitted, and provided that you do these
+     two things:
+
+       a. Accompany the combined library with a copy of the same work
+          based on the Library, uncombined with any other library
+          facilities.  This must be distributed under the terms of the
+          Sections above.
+
+       b. Give prominent notice with the combined library of the fact
+          that part of it is a work based on the Library, and explaining
+          where to find the accompanying uncombined form of the same
+          work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute the
+     Library except as expressly provided under this License.  Any
+     attempt otherwise to copy, modify, sublicense, link with, or
+     distribute the Library is void, and will automatically terminate
+     your rights under this License.  However, parties who have
+     received copies, or rights, from you under this License will not
+     have their licenses terminated so long as such parties remain in
+     full compliance.
+
+  9. You are not required to accept this License, since you have not
+     signed it.  However, nothing else grants you permission to modify
+     or distribute the Library or its derivative works.  These actions
+     are prohibited by law if you do not accept this License.
+     Therefore, by modifying or distributing the Library (or any work
+     based on the Library), you indicate your acceptance of this
+     License to do so, and all its terms and conditions for copying,
+     distributing or modifying the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+     Library), the recipient automatically receives a license from the
+     original licensor to copy, distribute, link with or modify the
+     Library subject to these terms and conditions.  You may not impose
+     any further restrictions on the recipients' exercise of the rights
+     granted herein.  You are not responsible for enforcing compliance
+     by third parties with this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+     infringement or for any other reason (not limited to patent
+     issues), conditions are imposed on you (whether by court order,
+     agreement or otherwise) that contradict the conditions of this
+     License, they do not excuse you from the conditions of this
+     License.  If you cannot distribute so as to satisfy simultaneously
+     your obligations under this License and any other pertinent
+     obligations, then as a consequence you may not distribute the
+     Library at all.  For example, if a patent license would not permit
+     royalty-free redistribution of the Library by all those who
+     receive copies directly or indirectly through you, then the only
+     way you could satisfy both it and this License would be to refrain
+     entirely from distribution of the Library.
+
+     If any portion of this section is held invalid or unenforceable
+     under any particular circumstance, the balance of the section is
+     intended to apply, and the section as a whole is intended to apply
+     in other circumstances.
+
+     It is not the purpose of this section to induce you to infringe any
+     patents or other property right claims or to contest validity of
+     any such claims; this section has the sole purpose of protecting
+     the integrity of the free software distribution system which is
+     implemented by public license practices.  Many people have made
+     generous contributions to the wide range of software distributed
+     through that system in reliance on consistent application of that
+     system; it is up to the author/donor to decide if he or she is
+     willing to distribute software through any other system and a
+     licensee cannot impose that choice.
+
+     This section is intended to make thoroughly clear what is believed
+     to be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+     certain countries either by patents or by copyrighted interfaces,
+     the original copyright holder who places the Library under this
+     License may add an explicit geographical distribution limitation
+     excluding those countries, so that distribution is permitted only
+     in or among countries not thus excluded.  In such case, this
+     License incorporates the limitation as if written in the body of
+     this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+     versions of the Lesser General Public License from time to time.
+     Such new versions will be similar in spirit to the present version,
+     but may differ in detail to address new problems or concerns.
+
+     Each version is given a distinguishing version number.  If the
+     Library specifies a version number of this License which applies
+     to it and "any later version", you have the option of following
+     the terms and conditions either of that version or of any later
+     version published by the Free Software Foundation.  If the Library
+     does not specify a license version number, you may choose any
+     version ever published by the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+     programs whose distribution conditions are incompatible with these,
+     write to the author to ask for permission.  For software which is
+     copyrighted by the Free Software Foundation, write to the Free
+     Software Foundation; we sometimes make exceptions for this.  Our
+     decision will be guided by the two goals of preserving the free
+     status of all derivatives of our free software and of promoting
+     the sharing and reuse of software generally.
+
+                                NO WARRANTY
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+     WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
+     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+     HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
+     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
+     QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU.  SHOULD THE
+     LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
+     SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+     MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
+     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+     INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
+     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+     OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
+     OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+                      END OF TERMS AND CONDITIONS
+H.2.2 How to Apply These Terms to Your New Libraries
+----------------------------------------------------
+
+If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of
+the ordinary General Public License).
+
+   To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should have
+at least the "copyright" line and a pointer to where the full notice is
+found.
+
+     ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
+     Copyright (C) YEAR  NAME OF AUTHOR
+
+     This library is free software; you can redistribute it and/or modify it
+     under the terms of the GNU Lesser General Public License as published by
+     the Free Software Foundation; either version 2.1 of the License, or (at
+     your option) any later version.
+
+     This library is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Lesser General Public License for more details.
+
+     You should have received a copy of the GNU Lesser General Public
+     License along with this library; if not, write to the Free Software
+     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+     USA.
+
+   Also add information on how to contact you by electronic and paper
+mail.
+
+   You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary.  Here is a sample; alter the names:
+
+     Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+     `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+     SIGNATURE OF TY COON, 1 April 1990
+     Ty Coon, President of Vice
+
+   That's all there is to it!
+
+
+\1f
+Local Variables:
+coding: iso-8859-1
+End:
+
+\1f
+Tag Table:
+Node: Top\7f827
+Node: Introduction\7f3602
+Node: Support\7f7428
+Node: Basic Usage\7f7898
+Node: Spellchecking Individual Files\7f8230
+Node: Using Aspell as a Replacement for Ispell\7f11546
+Ref: Differences From Ispell\7f13496
+Node: Using Aspell with other Applications\7f17114
+Node: Customizing Aspell\7f19498
+Node: Specifying Options\7f20776
+Node: The Options\7f26863
+Node: Dumping Configuration Values\7f38280
+Node: Notes on Various Options\7f38917
+Node: Notes on Various Filters and Filter Modes\7f39250
+Node: Notes on the Prefix Option\7f48179
+Node: Notes on Typo-Analysis\7f49034
+Node: Notes on the Different Suggestion Modes\7f51142
+Node: Working With Dictionaries\7f53458
+Node: Using aspell-import\7f54007
+Node: How Aspell Selects an Appropriate Dictionary\7f54832
+Node: Listing Available Dictionaries\7f56946
+Node: Dumping the Contents of the Word List\7f57391
+Node: Creating an Individual Word List\7f58004
+Node: Working With Affix Info in Word Lists\7f61229
+Node: Format of the Personal and Replacement Dictionaries\7f64908
+Ref: Format of the Personal Dictionary\7f65213
+Node: Using Multi Dictionaries\7f66615
+Node: Dictionary Naming\7f67503
+Node: AWLI files\7f68769
+Node: Writing programs to use Aspell\7f69563
+Node: Through the C API\7f70105
+Node: Through A Pipe\7f77834
+Node: Notes on Storing Replacement Pairs\7f82893
+Node: Adding Support For Other Languages\7f84279
+Node: The Language Data File\7f85223
+Ref: data-encoding\7f86634
+Node: Compiling the Word List\7f90884
+Node: Phonetic Code\7f91339
+Node: The Simple Soundslike\7f107350
+Node: Replacement Tables\7f108584
+Node: Affix Compression\7f109568
+Node: Controlling the Behavior of Run-together Words\7f114865
+Node: Creating A New Character Set\7f115793
+Node: Creating An Official Dictionary Package\7f117028
+Node: Implementation Notes\7f117760
+Node: Aspell Suggestion Strategy\7f118042
+Node: Notes on 8-bit Characters\7f120474
+Node: Languages Which Aspell can Support\7f124322
+Node: Supported\7f124924
+Node: Unsupported\7f141865
+Node: Multiple Scripts\7f145692
+Node: Planned Dictionaries\7f146530
+Node: References\7f150615
+Node: Language Related Issues\7f151634
+Node: Compound Words\7f152179
+Node: Words With Symbols in Them\7f155124
+Node: Unicode Normalization\7f158400
+Node: German Sharp S\7f159350
+Node: Context Sensitive Spelling\7f160014
+Node: To Do\7f160602
+Node: Important Items\7f160806
+Node: Other Items\7f165096
+Node: Notes on Various Items\7f167154
+Node: Word skipping by context\7f167390
+Node: Hidden Markov Model\7f169262
+Node: Email the Personal Dictionary\7f170125
+Node: Installing\7f171189
+Node: Generic Install Instructions\7f172220
+Node: HTML Manuals and "make clean"\7f173848
+Node: Curses Notes\7f174391
+Node: Loadable Filter Notes\7f176341
+Node: Upgrading from Aspell 0.50\7f176980
+Ref: Binary Compatibility\7f178087
+Node: Upgrading from Aspell .33/Pspell .12\7f179638
+Node: Upgrading from a Pre-0.50 snapshot\7f182150
+Node: WIN32 Notes\7f182662
+Ref: Win32-Directories\7f187800
+Node: ChangeLog\7f189271
+Node: Authors\7f226820
+Node: Copying\7f229095
+Node: GNU Free Documentation License\7f230163
+Node: GNU Lesser General Public License\7f252602
+\1f
+End Tag Table
diff --git a/manual/aspell.texi b/manual/aspell.texi
new file mode 100644 (file)
index 0000000..080f894
--- /dev/null
@@ -0,0 +1,5749 @@
+\input texinfo   @c -*-texinfo-*-
+
+@setfilename aspell.info
+@settitle GNU Aspell 0.60.6.1
+@syncodeindex pg cp
+@documentencoding ISO-8859-1
+@documentdescription
+Aspell 0.60.6.1 spell checker user's manual.
+@end documentdescription
+
+@copying
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+
+Copyright @copyright{} 2000--2011 Kevin Atkinson.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+@end quotation
+@end copying
+
+@dircategory GNU Packages
+@direntry
+* Aspell: (aspell).        GNU Aspell spelling checker
+@end direntry
+
+@titlepage
+@title GNU Aspell 0.60.6.1
+@author Kevin Atkinson (@email{kevina@@gnu.org})
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top GNU Aspell 0.60.6.1
+This is the user's manual for Aspell
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.
+It can either be used as a library or as an independent spell checker.
+@end ifnottex
+
+@menu
+* Introduction::                
+* Support::                     
+* Basic Usage::                 
+* Customizing Aspell::          
+* Working With Dictionaries::   
+* Writing programs to use Aspell::  
+* Adding Support For Other Languages::  
+* Implementation Notes::        
+* Languages Which Aspell can Support::  
+* Language Related Issues::     
+* To Do::                       
+* Installing::                  
+* ChangeLog::                   
+* Authors::                     
+* Copying::                     
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Basic Usage
+
+* Spellchecking Individual Files::  
+* Using Aspell as a Replacement for Ispell::  
+* Using Aspell with other Applications::  
+
+Customizing Aspell
+
+* Specifying Options::          
+* The Options::                 
+* Dumping Configuration Values::  
+* Notes on Various Options::    
+
+Notes on Various Options
+
+* Notes on Various Filters and Filter Modes::  
+* Notes on the Prefix Option::  
+* Notes on Typo-Analysis::      
+* Notes on the Different Suggestion Modes::  
+
+Working With Dictionaries
+
+* Using aspell-import::         
+* How Aspell Selects an Appropriate Dictionary::  
+* Listing Available Dictionaries::  
+* Dumping the Contents of the Word List::  
+* Creating an Individual Word List::  
+* Working With Affix Info in Word Lists::  
+* Format of the Personal and Replacement Dictionaries::  
+* Using Multi Dictionaries::    
+* Dictionary Naming::           
+* AWLI files::                  
+
+Writing programs to use Aspell
+
+* Through the C API::           
+* Through A Pipe::              
+* Notes on Storing Replacement Pairs::  
+
+Adding Support For Other Languages
+
+* The Language Data File::      
+* Compiling the Word List::     
+* Phonetic Code::               
+* The Simple Soundslike::       
+* Replacement Tables::          
+* Affix Compression::           
+* Controlling the Behavior of Run-together Words::  
+* Creating A New Character Set::  
+* Creating An Official Dictionary Package::  
+
+Implementation Notes
+
+* Aspell Suggestion Strategy::  
+* Notes on 8-bit Characters::   
+
+Languages Which Aspell can Support
+
+* Supported::                   
+* Unsupported::                 
+* Multiple Scripts::            
+* Planned Dictionaries::        
+* References::                  
+
+Language Related Issues
+
+* Compound Words::              
+* Words With Symbols in Them::  
+* Unicode Normalization::       
+* German Sharp S::              
+* Context Sensitive Spelling::  
+
+To Do
+
+* Important Items::             
+* Other Items::                 
+* Notes on Various Items::      
+
+Notes on Various Items
+
+* Word skipping by context::    
+* Hidden Markov Model::         
+* Email the Personal Dictionary::  
+
+Installing
+
+* Generic Install Instructions::  
+* HTML Manuals and "make clean"::  
+* Curses Notes::                
+* Loadable Filter Notes::       
+* Upgrading from Aspell 0.50::  
+* Upgrading from Aspell .33/Pspell .12::  
+* Upgrading from a Pre-0.50 snapshot::  
+* WIN32 Notes::                 
+
+Copying
+
+* GNU Free Documentation License::
+* GNU Lesser General Public License::
+
+@end detailmenu
+@end menu
+
+@node Introduction
+@chapter Introduction
+
+GNU Aspell is a spell checker designed to eventually replace Ispell.  It
+can either be used as a library or as an independent spell checker.  Its
+main feature is that it does a much better job of suggesting possible
+replacements for a misspelled word than just about any other spell
+checker out there for the English language.  Unlike Ispell, Aspell can
+also easily check documents in UTF-8 without having to use a special
+dictionary.  Aspell will also do its best to respect the current locale
+setting.  Other advantages over Ispell include support for using
+multiple dictionaries at once and intelligently handling personal
+dictionaries when more than one Aspell process is open at once.
+
+The latest version of Aspell can always be found at @uref{http://aspell.net}
+
+@section Comparison to other spell checker engines
+
+@multitable {Alternate Dictionaries} {Aspell} {Ispell} {Netscape} {Microsoft}
+@item             @tab Aspell @tab Ispell @tab Netscape @tab Microsoft
+@item             @tab        @tab        @tab  4.0     @tab  Word 97
+@item Open Source @tab x      @tab  x
+@item Suggestion  @tab 88-98  @tab 54     @tab 55-70?   @tab  71
+@item Intelligence
+@item Personal part @tab x    @tab x      @tab x
+@item of Suggestions
+@item Alternate Dictionaries @tab x @tab x @tab ?        @tab ?
+@item International Support @tab x @tab x @tab ?         @tab ?
+@end multitable
+
+The Suggestion Intelligence is based on a small test kernel of
+misspelled/correct word pairs.  Go to @uref{http://aspell.net/test}
+for more info and how you can help contribute to the test kernel.  The
+current scores for Aspell are 88 in @emph{fast} mode, 93 in
+@emph{normal} mode, and 98 in @emph{bad spellers} mode: for more
+information about the various suggestion modes @ref{Notes on the
+Different Suggestion Modes}.
+
+
+If you have any other information you would like to add to this chart
+please contact me at @email{kevina@@gnu.org}.
+
+@subsection Comparison to Ispell
+
+@subsubsection Features that only Aspell has
+
+@itemize @bullet
+@item
+Is an actual library that other programs can link to instead of
+having to use it through a pipe.
+
+@item
+Does a much better job of suggesting possible replacements for a
+misspelled word than Ispell does or for that matter many other spell
+checkers I have seen.  If you know a spell checker that does a better
+job please let me know.
+
+@item
+Can learn from user's misspellings.
+
+@item
+Can easily check documents in UTF-8 without having to use a special
+dictionary.
+
+@item
+Has support for using multiple dictionaries at once.
+
+@item
+Is multiprocess intelligent.  When a personal dictionary (or
+replacement list) is saved, it will now first update the list against
+the dictionary on disk in case another process modified it.
+
+@item
+Can share the memory used in the main word list between processes.
+
+@item
+A better, more complete word list for the English language.  Word
+lists are provided for American, British, and Canadian spelling.
+Special care has been taken to only include one spelling for each word
+in any particular word list.  The word list included in Ispell by
+contrast only included support for American and British and also tends
+to included multiple spellings for a word which can mask some spelling
+errors.
+@end itemize
+
+@subsubsection Things that, currently, only Ispell has
+
+@itemize @bullet
+@item
+Lower memory footprint
+
+@item
+Ability to deal with arbitrary multi-character letters such as old
+ASCII encodings of accented letters.
+
+@item
+Perhaps better support for spell checking (La)TeX files.
+
+@end itemize
+
+For a detailed description of how Aspell differs from Ispell, @xref{Differences
+From Ispell}.
+
+@node Support
+@chapter Support
+
+Support for Aspell can be found on the Aspell mailing lists.
+Instructions for joining the various mailing lists (and an archive of
+them) can be found off the Aspell home page at
+@uref{http://aspell.net}.
+
+Bug reports should be submitted via the Sourceforge Tracker at
+@uref{http://sourceforge.net/@/tracker/?group_id=245} rather than
+being posted to the mailing lists.
+
+@node Basic Usage
+@chapter Basic Usage
+
+For a quick reference on the Aspell utility use the command
+@command{aspell --help}.
+
+@menu
+* Spellchecking Individual Files::  
+* Using Aspell as a Replacement for Ispell::  
+* Using Aspell with other Applications::  
+@end menu
+
+@node Spellchecking Individual Files
+@section Spellchecking Individual Files
+
+To use Aspell to spellcheck a file use:
+
+@example
+aspell check [@var{options}] @var{filename}
+@end example
+
+@noindent
+at the command line where @code{@var{filename}} is the file you want to
+check and @code{@var{options}} is any number of optional options.  Some of
+the more useful ones include:
+
+@table @b
+@item --mode=@var{mode}
+the mode to use when checking files.  The available modes are
+@code{none}, @code{url}, @code{email}, @code{sgml}, @code{tex},
+@code{texinfo}, @code{nroff}, among others.  For more information on the
+various modes see @ref{Notes on Various Filters and Filter Modes}.
+
+@item --dont-backup
+don't create a backup file.  Normally, if there are any corrections
+the Aspell utility will append @file{.bak} to the existing file name
+and then create a new file with corrections made during spell checking.
+
+@item --sug-mode=@var{mode}
+the suggestion mode to use where mode is one of @code{ultra},
+@code{fast}, @code{normal}, or @code{bad-spellers}.  For more
+information on these modes see @ref{Notes on the Different Suggestion
+Modes}.
+
+@item --lang=@var{name}/-l @var{name}
+the language the document is written in.  The default depends on the
+current locale.
+
+@item --encoding=@var{name}
+encoding the document is expected to be in.  The default depends on the
+current locale.
+
+@item --master=@var{name}/-d @var{name}
+the main dictionary to use.
+
+@item --keymapping=@var{name}
+the keymapping to use.  Either @option{aspell} for the default mapping
+or @option{ispell} to use the same mapping that the Ispell utility
+uses.
+@end table
+
+For more information on the available options, please see
+@ref{Customizing Aspell}.
+
+For example to check the file @file{foo.txt}:
+
+@example
+aspell check foo.txt
+@end example
+
+@noindent
+and to check the file @file{foo.txt} using the @option{bad-spellers}
+suggestion mode and the American English dictionary:
+
+@example
+aspell check --sug-mode=bad-spellers -d en_US foo.txt
+@end example
+
+If the @option{mode} option is not given, then Aspell will use the
+extension of the file to determine the current mode.  If the extension
+is @file{.tex}, then @option{tex} mode will be used, if the extension
+is @file{.html}, @file{.htm}, @file{.php}, or @file{.sgml} it will
+check the file in @option{sgml} mode, otherwise it will use
+@option{url} mode. 
+
+For more information on the various modes that can be used, see
+@ref{Notes on Various Filters and Filter Modes}.
+
+If Aspell was compiled with curses support and the @env{TERM}
+environment variable is set to a capable terminal type then Aspell
+will use a nice full screen interface, otherwise it will use a
+simpler ``dumb'' terminal interface where the misspelled word is
+surrounded by two '*'.  In either case the interface should be self
+explanatory.
+
+If Aspell is compiled with a version of the curses library that support
+wide characters then Aspell can also check UTF-8 text.  Furthermore, the
+document will be displayed in the encoding defined by the current
+locale.  This encoding does not necessarily have to be the same encoding
+that the document is in.  This means that is is possible to check an
+8-bit encoding such as ISO-8859-1 on an UTF-8 terminal.  To do so
+simply set the @option{encoding} option to @samp{iso-8859-1}.
+Furthermore it is also possible to check an UTF-8 document on an 8-bit
+terminal provided that the document can be successfully converted into
+that encoding.
+
+@node Using Aspell as a Replacement for Ispell
+@section Using Aspell as a Replacement for Ispell
+
+As of GNU Aspell 0.60.1 Aspell should be able to completely replace
+Ispell for most applications.  The Ispell compatibility script should
+work for most applications which expect Ispell.  However there are
+some differences which you should be aware of.
+
+@subsection As a Drop In Replacement
+
+Aspell can be used as a drop in replacement for Ispell for programs
+that use Ispell through a pipe such as Emacs and LyX.  It can also be
+used with programs that simply call the @command{ispell} command and
+expect the original file to be overwritten with the corrected version.
+
+If you do not have Ispell installed on your system and have installed
+the Ispell compatibility script then you should not need to do anything
+as most applications that expect Ispell will work as expected
+with Aspell via the Ispell compatibility script.
+
+Otherwise, the recommended way to use Aspell as a replacement for
+Ispell is to change the @command{ispell} command from within the
+program being used.  If the program uses @command{ispell} in pipe mode
+simply change @command{ispell} to @command{aspell}.  If the program
+calls the @command{ispell} command to check the file, then change
+@command{ispell} with @command{aspell check}.
+
+If that is impossible then the @command{run-with-aspell} script can be
+used.  This script modifies the patch so that programs see the Ispell
+compatibility script instead of the actual true @command{ispell}
+command.  The format of the script is:
+
+@example
+run-with-aspell @var{command}
+@end example
+
+@noindent
+where @var{command} is the name of the program with any optional
+arguments.
+
+The old method of mapping Ispell to Aspell is discouraged because it
+can create compatibility problems with programs that actually require
+Ispell such as Ispell's own scripts.
+
+@anchor{Differences From Ispell}
+@subsection Differences From Ispell
+
+Nevertheless, Aspell is not Ispell, nor is it meant to completely
+emulate the behavior of Ispell.  The @command{aspell} command is not
+identical to the @command{ispell} command when not used in ``pipe''
+mode.  If an application expects the @command{ispell} command, then
+the Ispell compatibility script should be used instead.
+
+@subsubsection Functionality of the Ispell Compatibility Script
+
+The Ispell compatibility script provides the following Ispell
+functionally.
+
+@itemize @bullet
+@item
+The ability to check a file when called without any mode parameters.
+
+@item
+The pipe or -a mode.
+
+@item 
+The list or -l mode.
+
+@item
+The version or -v mode.  A single line is returned which, while not
+being identical to the line Ispell returns, is sufficient to fool most
+programs.
+
+@item
+The munch or -c mode.
+
+@item
+The expand or -e mode.
+
+@item
+The ability to dump the affix file when called with '-D'.  However the
+format of the affix file is different.  Furthermore, not all languages
+have an affix file.
+
+@end itemize
+
+However the Ispell script is currently unable to emulate
+the '-A' pipe mode.  This is different from the normal pipe mode in
+that the special @code{&Include_File&} command is recognized.
+
+@subsubsection Recognized Options
+
+Aspell, and thus the Ispell compatibility script, recognizes most of
+the options that Ispell uses except for the '-S', '-w' and '-T'
+options.  The Aspell command will simply ignore these options if it
+sees them.
+
+@subsubsection Check Mode Compatibility
+
+The interface used by Aspell when checking individual files is
+slightly different than Ispell's.  In particular the default
+keymappings are not the same as the ones Ispell uses.  However Aspell
+supports using the Ispell keymappings via the @option{keymapping}
+option.  To use the Ispell keymappings set the @option{kepmapping}
+option to @code{ispell}.  This can be done on the command line by
+adding using the command:
+
+@example
+  aspell check --keymapping=ispell @dots{}
+@exdent or with the Ispell compatibility script
+  ispell --keymapping=ispell @dots{}
+@end example
+
+The Ispell keymapping can always be used when the Ispell compatibly
+script is called by uncommenting the indicated line in the
+@command{ispell} script.
+
+@subsubsection Pipe Mode Compatibility
+
+The Aspell pipe mode should be identical to the Ispell pipe mode except
+if the line starts with a '$$' as that will trigger special Aspell
+only commands or if the line starts with a '~' which is ignored by Aspell.
+
+@subsubsection Other Differences
+
+The compiled dictionary format is completely different than Ispell's.
+Furthermore the format of the language data files' are different than
+Ispell's affix file.  However, all known Ispell dictionaries were
+converted to Aspell format, except for Albanian (sq) as I was unable
+to find the source word list.
+
+The naming and format of the personal dictionary is also different.
+However, Ispell personal dictionaries can be imported using the
+@command{aspell-import} script.  @xref{Using aspell-import}.  The
+Ispell personal dictionary is simply a list of words while the Aspell
+one is a list of words with a header line.  Thus it is also fairly
+easy to convert between the two.  @xref{Format of the Personal Dictionary}.
+
+@subsubsection Missing Functionally
+
+The only major area where Ispell is superior to Aspell is in the
+handling of multi character letters such as old ASCII encoding of
+accented characters.
+
+However, Aspell can handle UTF-8 documents far better than Ispell
+can.
+
+@node Using Aspell with other Applications
+@section Using Aspell with other Applications
+
+@subsection With Emacs and XEmacs
+
+The easiest way to use Aspell with Emacs or XEmacs is to add this
+line:
+
+@verbatim
+(setq-default ispell-program-name "aspell")
+@end verbatim
+
+to the end of your @file{.emacs} file.
+
+For some reason version 3.0 of ispell.el (the lisp program that
+(x)emacs uses) wants to reverse the suggestion list.  To fix this add
+this line:
+
+@verbatim
+(setq-default ispell-extra-args '("--reverse"))
+@end verbatim
+
+after the previous line in your .emacs file and it should solve the problem.
+
+Ispell.el, version 3.1 (December 1, 1998) and better, has the list
+reversing problem fixed.  You can find it at
+@uref{http://www.kdstevens.com/~stevens/ispell-page.html}.
+
+@subsection With LyX
+
+Version 1.0 of LyX provides support for Aspell's learning from user's
+mistakes feature.
+
+To use Aspell with LyX 1.0 either change the @option{spell_command}
+option in the @file{.lyxrc} file or use the @command{run-with-aspell}
+utility.
+
+@subsection With VIM
+
+@c @emph{(The following section was written by ``R.  Marc'', rmarc at
+@c copacetic net.)}
+
+To use Aspell in VIM you simply need to add the following line to your
+@file{.vimrc} file:
+
+@verbatim
+map ^T :w!<CR>:!aspell check %<CR>:e! %<CR>
+@end verbatim
+
+I use @kbd{Ctrl-T} since that's the way you spell check in
+@command{pico}.  In order to add a control character to your
+@code{.vimrc} you must type @kbd{Ctrl-v} first.  In this case
+@kbd{Ctrl-v Ctrl-t}.
+
+A more useful way to use Aspell, IMHO, is in combination with Newsbody
+(@uref{http://www.image.dk/~byrial/newsbody/}) which is how I use it
+since VIM is my editor for my mailer and my news reader.
+@verbatim
+map ^T\\1\\2<CR>:e! %<CR>
+map \\1 :w!<CR>
+map \\2 :!newsbody -qs -n % -p aspell check \\%f<CR>
+@end verbatim
+
+@subsection With Pine
+
+To use Aspell in Pine simply change the option @option{speller} to
+
+@example
+aspell --mode=email check
+@end example
+
+To change the @option{speller} option go to the main menu.  Type
+@kbd{S} for @emph{setup}, @kbd{C} for @emph{config}, then @kbd{W} for
+@emph{where is}.  Type in @kbd{speller} as the word to find.  The
+speller option should be highlighted now.  Hit enter, type in the
+above line, and hit enter again.  Then type @kbd{E} for @emph{exit
+setup} and @kbd{Y} to save the change.
+
+If you have a strong desire to check other people's comments change
+@option{speller} to
+
+@example
+aspell check
+@end example
+
+@noindent
+instead which will avoid switching Aspell into email mode.
+
+@node Customizing Aspell
+@chapter Customizing Aspell
+
+The behavior of Aspell can be changed by any number of options which
+can be specified at either the command line, the environment variable
+@env{ASPELL_CONF}, a personal configuration file, or a global
+configuration file.  Options specified on the command line override
+options specified by the environment variable.  Options specified by
+the environment variable override options specified by either of the
+configuration files.  Finally options specified by the personal
+configuration file override options specified in the global
+configuration file.  Options specified in the environment variable
+@env{ASPELL_CONF}, a personal configuration file, or a global
+configuration file will take effect no matter how Aspell is used which
+includes being used by other applications.
+
+Aspell has three basic types of options: @dfn{boolean}, @dfn{value},
+and @dfn{list}.
+
+@dfn{Boolean} options are either enabled or disabled, @dfn{value}
+options take a specific value, and @dfn{list} options can either have
+entries added or removed from the list.
+
+@menu
+* Specifying Options::          
+* The Options::                 
+* Dumping Configuration Values::  
+* Notes on Various Options::    
+@end menu
+
+@node Specifying Options
+@section Specifying Options
+
+@subsection At the Command Line
+
+All options specified at the command line have the following basic format:
+
+@example
+--@var{option}[=@var{value}]
+@end example
+
+@noindent
+where the @samp{=} can be replaced by whitespace.
+
+Some options also have single letter abbreviations of the form:
+
+@example
+@var{letter} [@var{optional_whitespace} @var{value}]
+@end example
+
+Any non-ASCII characters are expected to be in the encoding
+specified by the current locale.
+
+To reset an option to the default value, prefix the option with a
+@samp{reset-} and don't specify a value.
+
+@subsubsection Value options
+
+To specify a value option simply specify the option with its
+corresponding value.  For example to set the filter mode to TeX use
+@samp{--mode=tex}.
+
+If a value option has a single letter shortcut simply specify the single
+letter shortcut with its corresponding value.  For example to use a the
+accented version of the American English dictionary use @samp{-d
+en_US-w_accents}.
+
+@subsubsection Boolean options
+
+To enable a boolean option simply specify the option without any
+corresponding value, or prefix it with an @samp{enable-}.  For example
+to create a backup file use @samp{--backup}.  To disable a boolean
+option prefix the option name with a @samp{dont-} or @samp{disable-}.
+To avoid creating a backup file use @samp{--dont-backup}.  Boolean options
+can also be set directly like a value option where the value is either
+"true" or "false", for example @samp{--backup=true}.
+
+If a boolean option has a single letter abbreviation simply give the
+letter corresponding to either enabling or disabling the option
+without any corresponding value.  For example, to consider run-together
+words valid use @samp{-C} or to consider them invalid use
+@samp{-B}
+
+@subsubsection List options
+
+To add a value to the list, prefix the option name with an
+@samp{add-} and then specify the value to add.  For example, to add
+the URL filter use @samp{--add-filter url}.  To remove a value from
+a list option, prefix the option name with a @samp{rem-} and then
+specify the value to remove.  For example, to remove the URL filter use
+@samp{--rem-filter url}.  To remove all items from a list prefix the
+option name with a @samp{clear-} without specify any value.  For
+example, to remove all filters use @samp{--clear-filter}.
+
+A list option can also be set directly, in which case it will be set to
+a single value.  To directly set a list option to multiple values prefix
+the option name with a @samp{lset-} and separate each value with a
+@samp{:}.  For example, to use the URL and TeX filter use
+@samp{--lset-filter url:tex}.
+
+
+@subsection Via a Configuration File
+
+Aspell can also accept options via a personal or global configuration
+file.  The exact files to used are specified by the options
+@option{per-conf} and @option{conf} respectively but the personal
+configuration file is normally @file{.aspell.conf} located in the
+@env{HOME} directory and the global one is normally @file{aspell.conf}
+which is located in the @file{etc} directory which is normally
+@file{/usr/etc} or @file{/usr/local/etc}.  To find out the particular
+values for your particular system use @command{aspell dump config}.
+
+Each line of the configuration file has the format:
+
+@example
+@var{option} [@var{value}]
+@end example
+
+There may be any number of spaces between the option and the value
+however it can only be spaces, i.e. there is no @samp{=} between the
+option name and the value and there are no preceding @samp{--} as
+used on the command line.
+
+Comments may also be included by preceding them with a @samp{#} as
+anything from a @samp{#} to a newline is ignored.  Blank lines are also
+allowed.
+
+To include a literal @samp{#} use @samp{\#}.  To include a literal
+@samp{\} use @samp{\\}.  Any other non-alpha character can also be
+protected by a @samp{\} if necessary.
+
+Any non-ASCII characters are expected to be in UTF-8.
+
+To reset an option to the default value prefix the option with a
+@samp{reset-} and don't specify a value.
+
+Values set in the personal configuration file override those in the
+global file.  Options specified at either the command line or via an
+environment variable override those specified by either configuration
+file.
+
+@quotation Note
+Filters and corresponding options also may be assembled
+inside a special meta filter file named @file{@var{metafilter}.flt}.  A
+filter has to be loaded via adding a @code{add-filter @var{filtername}}
+line to the meta filter file before its options may be specified.
+@end quotation
+
+@subsubsection Value options
+
+To specify a value option simply include the option followed by the
+corresponding value.  For example to set the default language to
+German use @option{lang german}.
+
+@subsubsection Boolean options
+
+To specify a boolean option simply include the option followed by a
+@samp{true} to enable it or a @samp{false} to disable it.  For example
+to allow run-together words use @samp{run-together true}.
+
+@subsubsection List options
+
+To add a value to the list, prefix the option name with an
+@samp{add-} and then specify the value to add.  For example to add
+the URL filter use @samp{add-filter url}.  To remove a value from
+a list option prefix the option name with a @samp{rem-} and then
+specify the value to remove.  For example, to remove the URL filter use
+@samp{rem-filter url}.  To remove all items from a list prefix the
+option name with a @samp{clear-} without specifying any value.  For
+example, to remove all filters use @samp{clear-filter}.
+
+A list option can also be set directly, in which case it will be set to
+a single value.  To directly set a list option to multiple values prefix
+the option name with a @samp{lset-} and separate each value with a
+@samp{:}.  For example, to use the URL and TeX filter use
+@samp{lset-filter url:tex}.  To include a literal @samp{:} use
+@samp{\:}.
+
+@subsection Setting Options via an Environment Variable
+
+The environment variable @env{ASPELL_CONF} may also be used and it
+overrides any options set in the configuration file.  The format of
+the string is exactly the same as the configuration file except that
+semicolons (@samp{;}) are used instead of newlines.
+
+@node The Options
+@section The Options
+
+The following is a list of available options broken down by category.
+Each entry has the following format:
+
+@quotation
+@table @b
+@item @var{option}[,@var{single-letter-abbreviation}]
+@i{(@var{type})} @var{description}
+@end table
+@end quotation
+
+Where single letter options are specified as they would appear at the
+command line, ie with the preceding dash.  Boolean single letter
+options are specified in the following format:
+
+@quotation
+-<abbreviation to enable>|-<abbreviation to disable>
+@end quotation
+
+@var{option} is one of the following: @emph{boolean}, @emph{string},
+@emph{file}, @emph{dir}, @emph{integer}, or @emph{list}.
+
+@emph{String}, @emph{file}, @emph{dir}, and @emph{integer} types are all
+value options which can only take a specific type of value.
+
+@subsection Dictionary Options
+
+The following options may be used to control which dictionaries to use
+and how they behave (for more information see @ref{How Aspell Selects
+an Appropriate Dictionary}):
+
+@table @b
+
+@item master,-d
+@i{(string)}
+Base name of the dictionary to use.  If this option is specified then
+Aspell will either use this dictionary or die.
+
+@item dict-dir
+@i{(dir)}
+Location of the main word list.
+
+@item lang
+@i{(string)}
+Language to use.  It follows the same format of the @env{LANG}
+environment variable on most systems.  It consists of the two letter
+@acronym{ISO 639} language code and an optional two letter
+@acronym{ISO 3166} country code after a dash or underscore.  The
+default value is based on the value of the @env{LC_MESSAGES} locale.
+
+@item size
+@i{(string)} 
+The preferred size of the word list.  This consists of a
+two char digit code describing the size of the list, with typical
+values of: 10=tiny, 20=really small, 30=small, 40=med-small, 50=med,
+60=med-large, 70=large, 80=huge, 90=insane.
+
+@item variety
+@i{(list)}
+Any extra information to distinguish two different words lists that
+have the same lang and size.
+
+@item word-list-path
+@i{(list)}
+Search path for word list information files.
+
+@c @item module-search-order (@i{list})
+@c list of available modules, modules that come first on this list have a
+@c higher priority. Currently there is only one speller module.
+
+@item personal,-p
+@i{(file)}
+Personal word list file name.
+
+@item repl
+@i{(file)}
+Replacements list file name.
+
+@item extra-dicts
+@i{(list)}
+Extra dictionaries to use.
+
+@item dict-alias
+@i{(list)}
+create dictionary aliases.  Each entry has the form @samp{@var{from}
+@var{to}}.  Will override any system dictionaries that are present.
+
+@end table
+
+@subsection Encoding Options
+
+These options control the encoding the document is expected to be in and
+how it is displayed.
+
+@table @b
+
+@item encoding
+@i{(string)}
+The encoding the input text is in.  Valid values include, but not
+limited to, @samp{iso-8859-*}, @samp{utf-8}, @samp{ucs-2},
+@samp{ucs-4}.  When using the Aspell utility the default encoding is
+based on the current locale.  Thus if your locale currently uses the
+@samp{utf-8} encoding than everything will be in @acronym{UTF-8}.  The
+@samp{ucs-2} and @samp{ucs-4} encodings are intended to be used by other
+programs using the Aspell library and is not supported by the Aspell
+utility.
+
+@item normalize
+@i{(boolean)}
+Perform Unicode normalization.  Enabled by default.
+
+@item norm-strict
+@i{(boolean)}
+Avoid lossy conversions when normalizing.  Lossy conversions includes
+compatibility mappings such as splitting the letter @samp{OE} (U+152)
+into @samp{O} and @samp{E} (when the combined letter is not available),
+and mappings which will remove accents.  Disabled by default except when
+creating dictionaries.
+
+@item norm-form
+@i{(string)}
+The normalization form the output should be in.  This option primarily
+effects the normalization form of the suggestions as when spell
+checkering as the actual text is unchanged unless there is an error.
+Valid values are @samp{none}, @samp{nfd} for fully decomposition
+(Normalization Form D), @samp{nfc} for Normalization Form C, or
+@samp{comp} for fully composed.  @samp{comp} is like @samp{nfc} except
+that @emph{full} composition is used rather than @emph{canonical}
+composition.  The @option{normalize} option must be enabled for this
+option to be used.
+
+@item norm-required
+@i{(boolean)}
+Set to true when the current language requires Unicode normalization.
+This is generally the case when private use characters are used
+internally by Aspell or when Normalization Form C is not the same as
+full composition.
+
+@end table
+
+@subsection Checker Options
+
+These options control the behavior of Aspell when checking
+documents.
+
+@table @b
+@item ignore,-W
+@i{(integer)}
+Ignore words with N characters or less
+
+@item ignore-repl
+@i{(boolean)}
+Ignore commands to store replacement pairs.
+
+@item save-repl
+@i{(boolean)}
+Save the replacement word list on save all.
+
+@item keyboard
+@i{(file)}
+The base name of the keyboard definition file to use (@pxref{Notes on
+Typo-Analysis})
+
+@item sug-mode
+@i{(mode)}
+Suggestion mode = @samp{ultra} | @samp{fast} | @samp{normal} | @samp{slow} |
+@samp{bad-spellers} (@pxref{Notes on the Different Suggestion Modes})
+
+@item ignore-case
+@i{(boolean)}
+Ignore case when checking words.
+
+@item ignore-accents
+@i{(boolean)}
+Ignore accents when checking words -- @emph{currently ignored}.
+
+@end table
+
+@subsection Filter Options
+
+These options modify the behavior of the Aspell filter interface in
+general (for more information see @pxref{Notes on Various Filters and
+Filter Modes}).
+
+@table @b
+
+@item filter
+@i{(list)}
+filters to use
+
+@item filter-path
+@i{(list)}
+Where to look when loading filter and filter modes.
+
+@item mode
+@i{(string)}
+Sets the filter mode.  Possible values include, but not limited to,
+@samp{none}, @samp{url}, @samp{email}, @samp{sgml}, or @samp{tex}.  (The
+shortcut options @option{-e} may be used for email, @option{-H} for
+HTML, or @option{-t} for @TeX{}).
+
+@end table
+
+These options belong to filters packaged along with Aspell standard
+distribution.  These options may be prefixed by the keyword
+@code{f-} in order to explicitly indicate that they are options
+recognized by a filter and not by Aspell itself.
+
+@subsubsection email
+This filter hides quoting characters and email preamble and other
+parts of an email which need not to be spell checked.
+
+@table @b
+@item email-quote
+@i{(list)}
+Email quote characters.
+
+@item email-margin
+@i{(integer)}
+The number of characters that can appear before the quote character
+@end table
+
+@subsubsection html
+This filter converts an HTML source file into a format which eases
+spell checking of HTML texts by Aspell.
+
+@table @b
+@item html-check
+@i{(list)}
+HTML attributes to always check, such as alt= (alternate text).
+
+@item html-skip
+@i{(list)}
+HTML tags to always skip the contents of, such as <script>.
+@end table
+
+@subsubsection sgml
+This filter is identical to the HTML filter except that its options has
+different default values which are currently the empty list.
+
+@subsubsection tex/latex
+This filter hides all LaTeX commands and corresponding parameters not
+being readable text in LaTeX output from Aspell.
+
+@table @b
+@item tex-command
+@i{(list)}
+@TeX{} commands
+
+@item tex-check-comments
+@i{(boolean)}
+check @TeX{} comments
+
+@c @item tex-multi-byte
+@c (@i{list}) TeX multi byte letter en|decoding
+
+@end table
+
+@subsubsection texinfo
+This filter hides all Texinfo commands from Aspell.  It can also hide
+Texinfo parameters and environments not corresponding to readable text.
+
+@table @b
+@item texinfo-ignore
+@i{(list)} Texinfo command to ignore the parameters of.
+
+@item texinfo-ignore-env
+@i{(list)} Texinfo environments to ignore.
+
+@end table
+
+@subsubsection context
+@c FIXME: Shorten
+This filter can be used to spell check source
+codes, HTML sources and other texts which consist of different
+contexts.  These contexts must be separated by pairs of unique
+delimiters.  The different contexts may not be dependent upon each
+other except for initial context which is assumed if not any other
+context applies.
+
+@table @b
+@item context-visible-first
+@i{(boolean)} Switches the context which should be visible to Aspell.
+Per default the initial context is assumed to be invisible as one
+would expect when spell checking source files of programs where
+relevant parts are contained in string constants and comments but not
+in the remaining code.  If set to true the initial context is visible
+while the delimited ones are hidden.
+
+@item add|rem-context-delimiters
+@i{(list)} Add or remove pairs of delimiters.  This allows you to
+specify the character, or sequences of characters, which should be
+used to switch contexts and therefore have to be escaped by @samp{\} if
+they should appear literally.  The two delimiting chars belonging to
+one pair have to be separated by a space character.  If multiple pairs
+are specified by one @option{add|rem-@/context-delimiters} call the
+different pairs have to be separated by a literal comma.  Per default
+the delimiters are set to C/C++ comment and string constant
+delimiters.  If the end of line delimits a context than this has to be
+indicated by the literal @samp{\0} string.
+@end table
+
+@subsection Run-together Word Options
+
+These may be used to control the behavior of run-together words (for
+more information @pxref{Controlling the Behavior of Run-together
+Words}):
+@table @b
+
+@item run-together,-C|-B
+@i{(boolean)}
+consider run-together words valid
+@item run-together-limit
+@i{(integer)}
+maximum number of words that can be strung together
+
+@item run-together-min
+@i{(integer)}
+minimal length of interior words
+@end table
+
+@subsection Miscellaneous Options
+
+Miscellaneous other options that don't fall under any other category
+@table @b
+
+@item conf
+@i{(file)}
+Main configuration file.  This file overrides Aspell's global defaults.
+
+@item conf-dir
+@i{(dir)}
+location of main configuration file
+
+@item data-dir
+@i{(dir)}
+location of language data files
+
+@item local-data-dir
+@i{(dir)}
+alternative location of language data files.  This directory is
+searched before @option{data-dir}.  It defaults to the same directory
+the actual main word list is in (which is not necessarily
+@option{dict-dir})
+
+@item home-dir
+@i{(dir)}
+location for personal files
+
+@item per-conf
+@i{(file)}
+personal configuration file.  This file overrides options found in
+the global @option{conf} file
+
+@item keyboard
+@i{(file)}
+use this keyboard layout for suggesting possible words.  These spelling
+errors happen if a user accidently presses a key next to the intended
+correct key.  The default is keyboard standard.  If you are creating
+documents, you may want to set it according to your particular type of
+keyboard.  If spellchecking documents created elsewhere, you might
+want to set this to the keyboard type for that locale.  If you are not
+sure, just leave this as standard
+
+@item prefix
+@i{(dir)}
+prefix directory
+
+@item set-prefix
+@i{(boolean)}
+set the prefix based on executable location (only works on WIN32 and
+when compiled with @option{--enable-win32-relocatable})
+@end table
+
+@subsection Aspell Utility Options
+
+@table @b
+
+@item backup,-b|-x
+@i{(boolean)}
+Create a backup file by appending @file{.bak} to the file name.  This
+applies when the command is @command{check} and the backup file is
+only created if any spelling modifications take place.
+
+@item time
+@i{(boolean)}
+Time load time and suggest time in @command{pipe} mode.
+
+@item byte-offsets
+@i{(boolean)}
+Use byte offsets instead of character offsets in @command{pipe} mode.
+
+@item reverse
+@i{(boolean)}
+Reverse the order of the suggestions list in @command{pipe} mode.
+
+@item keymapping
+@i{(string)}
+the keymapping to use.  Either @option{aspell} for the default mapping
+or @option{ispell} to use the same mapping that the Ispell utility
+uses.
+
+@item guess
+@i{(boolean)}
+make possible root/affix combinations not in the dictionary in
+@command{pipe} mode.
+
+@item suggest
+@i{(boolean)}
+Suggest possible replacements in @command{pipe} mode.  If false Aspell
+will simply report the misspelling and make no attempt at suggestions
+or possible corrections.
+@end table
+
+@node Dumping Configuration Values
+@section Dumping Configuration Values
+
+To find out the current value of all the options use the command
+@command{aspell dump config}.  This will dump the current Aspell
+configuration to standard output.  The format of the contents dumped
+is such that it can be used as either the global or your personal
+configuration file.
+
+To find out the current value of a particular option use
+@command{aspell config @var{option}}.  This will print out the value of
+@var{option} to @code{stdout} and nothing else.
+
+@node Notes on Various Options
+@section Notes on Various Options
+
+@menu
+* Notes on Various Filters and Filter Modes::  
+* Notes on the Prefix Option::  
+* Notes on Typo-Analysis::      
+* Notes on the Different Suggestion Modes::  
+@end menu
+
+@node Notes on Various Filters and Filter Modes
+@subsection Notes on Various Filters and Filter Modes
+
+Aspell now has filter support.  You can either select from individual
+filters or choose a filter mode.  To select a filter mode use the
+@option{mode} option.  You may choose from @samp{none}, @samp{url},
+@samp{email}, @samp{sgml}, @samp{ccpp}, @samp{tex} and any other
+available on your system.  The default mode is @samp{url}.  Individual
+filters can be added with the option @option{add-filter} and removed
+with the @option{rem-filter} option.  The currently available filters
+are @samp{url}, @samp{email}, @samp{sgml} and @samp{tex}, @samp{latex}
+(alias for @samp{tex}), @samp{nroff}, @samp{context}, as well as a
+bunch of filters which translate the text from one format to another.
+
+To check which filters are available use @command{aspell dump filters}.
+To check which filter modes are available use @command{aspell dump
+modes}.  The @command{aspell help} command will also list all available
+filter and filter modes.
+
+@subsubsection None Filter Mode
+
+The @option{none} mode is exactly what it says.  It turns off all filters.
+
+@subsubsection URL Filter
+
+The @option{url} filter/mode skips over URLs, host names, and email
+addresses.  Because this filter is almost always useful and rarely
+does any harm it is enabled in all modes except @option{none}.  To
+turn it off either select the @option{none} mode or use
+@option{rem-filter} option @emph{after} the desired mode is selected.
+
+@subsubsection Email Filter
+
+The @option{email} filter mode skips over quoted text.  It currently
+does not support skipping over headers however a future version
+should.  In the meantime I suggest you use Aspell with Newsbody which
+can be found at @uref{http://home.worldonline.dk/~byrial/newsbody/}.
+The option @option{email-skip} controls the number of characters that
+can appear before the email quote character, the default is 10.  The
+option @option{add|rem-email-quote} controls the characters that are
+considered quote characters, the defaults are @samp{>} and @samp{|}.
+
+@subsubsection SGML Filter
+
+The SGML filter allows you to spell check SGML, HTML, XHTML, and XML
+files. In most cases everything within a tag @samp{<tag attrib=value
+attrib2="a whole sentence">} will be skipped by the spell checker. The
+SGML/HTML/XML that Aspell supports is a slight superset of most DTDs
+(Document Type Definitions) and can spell check the often non-conforming
+HTML found on the web.
+
+Two configuration options, @option{sgml-skip} and @option{sgml-check},
+allow you to control what is spell checked. The tag and attribute names
+specified are case insensitive.
+
+@table @b
+@item sgml-skip
+This is a list of tags whose contents will also be skipped by the spell
+checker.  For example, if you wish to leave a misspelling in a document
+and not have them flagged as misspellings, you could surround them with
+a <nospellcheck> tag:
+@example
+  <TD><FONT size=2><NOSPELLCHECK>leviosa</NOSPELLCHECK>
+  is what Mr. Potter said</FONT></TD>
+@end example
+@noindent
+And put that word in the skip config directive:
+@example
+add-sgml-skip nospellcheck
+@end example
+
+@item sgml-check
+
+This is a list of attributes whose values you do want spell checked. By
+default, 'alt' (<img> alternate text) is a member of the check list
+since it is text that is seen by a web page viewer. You may also want
+'value' to be on the check list since that is the text put on buttons:
+@example
+add-sgml-check value
+@end example
+@noindent
+In this case @samp{<input type=button value="Donr">} will be flagged as a
+misspelling.
+@end table
+
+This filter will also translate SGML characters of the form
+@samp{&#num;}.  Other SGML characters such as @samp{&amp;} will simply
+be skipped over so that the word @samp{amp}, for example, will not be
+spell checked.  Eventually full support for properly translating SGML
+characters will be added.
+
+@subsubsection HTML Filter
+
+The @option{html} filter is like the SGML Filter Mode but specialized for
+HTML.  By default, 'script' and 'style' are members of the skip list in
+HTML mode.
+
+@subsubsection @TeX{}/LaTeX Filter
+
+The @option{tex} (all lowercase) filter mode skips over @TeX{}
+commands and parameters and/or options to certain commands.  It also
+skips over @TeX{} comments by default.  The option
+@option{[dont-]tex-check-comments} controls whether or not Aspell will
+skip over @TeX{} comments.  The option @option{add|rem-tex-command}
+controls which @TeX{} commands should have certain parameters and/or
+options also skipped over.  Commands that are not specified will have
+all their parameters and/or options checked.  The format for each item
+is
+
+@example
+<command> <a list of p,P,o and Os>
+@end example
+
+The first item is simply the command name.  The second item controls
+which parameters to skip over.  A 'p' skips over a parameter while a
+'P' doesn't.  Similarly an 'o' will skip over an optional parameter
+while an 'O' doesn't.  The first letter on the list will apply to the
+first parameter, the second letter will apply to the second parameter
+etc.  If there are more parameters than letters Aspell will simply
+check them as normal.  For example the option
+
+@example
+add-tex-command rule pp
+@end example
+
+@noindent
+will skip over the first two parameters of the @code{rule} command
+while the option
+
+@example
+add-tex-command foo Pop
+@end example
+
+@noindent
+will @emph{check} the first parameter of the @code{foo} command, skip
+over the next optional parameter, if it is present, and will skip over
+the second parameter --- even if the optional parameter is not present
+--- and will check any additional parameters.
+
+A @samp{*} at the end of the command is simply ignored.  For example
+the option
+
+@example
+enlargethispage p
+@end example
+
+@noindent
+will ignore the first parameter in both @option{enlargethispage} and
+@option{enlargethispage*}.
+
+To remove a command simply use the @option{rem-tex-command} option.
+For example
+
+@example
+rem-tex-command foo
+@end example
+
+@noindent
+will remove the command foo, if present, from the list of @TeX{}
+commands.
+
+The TeX filter mode is also available via @option{latex} alias name.
+
+@c The TeXfilter mode also contains a decoding and a encoding filter for
+@c @emph{babel} character codes like the German Umlauts:
+
+@c @itemize @bullet
+@c @item
+@c @code{@"a} -> @code{\"a} -> @code{"a}
+
+@c @item
+@c @code{@"o} -> @code{\"o} -> @code{"o}
+
+@c @item
+@c @code{@"u} -> @code{\"u} -> @code{"u}
+
+@c @item
+@c @code{@"s} -> @code{\"s} -> @code{"s}
+@c @end itemize
+@c @end quotation
+
+
+@c @quotation
+@c @option{add|rem-tex-multi-byte} conversion
+
+@c Changes list of multi character coded TeX(babel) characters recognized
+@c by Aspell.  In case of German umlauts mentioned above this would mean
+@c that Aspell would decode from their multi character representation to
+@c their proper single char representation.  Given the German word
+@c @code{St@"arke} (strength) which within TeX/LaTeXdocument has to be
+@c written as @code{St"arke} or as @code{St\"arke} would split it into
+@c the two words @code{St} and @code{arke} if it does not know anything
+@c about the multi character encoding @code{"a} or @code{\"a} of
+@c @code{@"a}.  On the other hand if it knows about it than Aspell will
+@c recognize the word properly and will not try to make any strange
+@c suggestion.
+
+@c Each multi character coding conversion has to be specified the
+@c following way:
+@c @example
+@c @i{char}:@i{rep}[:@i{rep}[@dots{}]]
+@c @end example
+@c where @code{@i{char}} is the character encoded by multiple characters
+@c and rep stands for a specific representation of that character.  For
+@c each character may be specified as many representations as available
+@c for it.
+@c @end quotation
+
+@subsubsection Texinfo Filter
+
+The @option{texinfo} filter allows you to spell check Texinfo files.
+It will skip over any Texinfo commands and their parameters when
+appropriate.  It will also skip over some Texinfo environments such as
+@command{example}.  The list option @option{texinfo-ignore}
+controls which commands to ignore the parameters of and the list option
+@option{texinfo-ignore-env} controls which Texinfo
+environments to ignore.
+
+The Texinfo filter has special code to deal with the @command{@@table}
+and related commands.  It will apply the formatting command to each of
+the @command{@@item} or @command{@@itemx} commands just like Texinfo
+will.  This means that if the formatting command is @command{@@code}
+and and the @command{@@code} command is a member of the
+@option{texinfo-ignore} option than the Texinfo filter will ignore the
+parameter of the @command{@@item} command as if the parameter was also
+the parameter of the @command{@@code} command.
+
+The Texinfo filter will also skip over the @samp{\input texinfo} line.
+
+@subsubsection Nroff Filter
+
+The @option{nroff} filter mode allows you to check the spelling of
+Nroff documents. The mode is enabled by giving
+@option{--add-filter=nroff} or @option{-n} command line option to
+@command{aspell}. It is also automatically enabled if the first three
+characters of the file being checked are @code{.\"} (a @command{nroff} comment
+marker) or the file name ends in a one of the following suffixes:
+
+@itemize
+@item single decimal digit from @samp{0} to @samp{9}
+@item letter @samp{n}
+@item @samp{tmac}
+@end itemize
+
+@noindent
+This filter mode skips following @command{nroff} language
+elements:
+
+@itemize
+@item Comments
+@item Requests
+@item Names of @command{nroff} registers (both traditional two-letter
+names and GNU nroff long names)
+@item Arguments to the following requests: @code{ds}, @code{de}, @code{nr},
+@code{do}, @code{so}.
+@item Arguments to font switch (@code{\f}) and size switch (@code{\s})
+escapes
+@item Arguments to extended charset escape in both traditional
+(@code{\(}) and extended (@code{\[comp1 comp2 @dots{}]}) form.
+@end itemize
+
+@subsubsection Context Filter
+
+The @emph{context} filter allows Aspell to distinguish between visible
+and invisible contexts.  The visible ones will be spell checked and
+the invisible ones will be ignored.  The contexts are distinguished by
+the fact that the visible/invisible ones are delimited by specific and
+unique delimiter characters or character sequences.  Whether the
+delimited contexts should be visible or invisible only stated by the
+value of the @option{[dont-]context-visible-first} option and not by
+the delimiters.
+
+The context delimiters are specified as pairs of delimiters via the
+@option{add|rem-@/context-delimiters} option.  The delimiters enclosing
+a specific context are specified as a space separated pair.  If more
+than one delimiter pair is specified by one call of
+@option{add|rem-@/context-delimiters} they have to be combined to a
+comma separated list.  To indicate that a context is always closed by
+end of line use @code{\0} sequence as closing delimiter.
+
+@subsubsection Ccpp Filter Mode
+
+The @option{ccpp} filter mode will limit spell checking to C/C++ comments
+and string literals. Any code in between will be left alone.
+
+@node Notes on the Prefix Option
+@subsection Notes on the Prefix Option
+
+The @option{prefix} option is there to allow Aspell to easily be
+relocated.  Changing @option{prefix} will change all directory names
+relative to the new prefix that are not explicitly set.  For example
+if @option{prefix} was @file{/usr/local/aspell} and @option{dict-dir}
+has a default value of @file{/usr/local/aspell/dict} than changing
+@option{prefix} to @file{/opt/aspell} will also change the default
+value of @option{dict-dir} to @file{/opt/aspell/dict}.  Note that
+modifying @option{prefix} will only affect the default compiled in
+values of directories.  If a directory option is explicitly given a
+value then changing the value of @option{prefix} has no effect on that
+directory option.
+
+@node Notes on Typo-Analysis
+@subsection Notes on Typo-Analysis and the Keyboard Definition File
+
+Aspell .33 and better will, in general, give a higher priority to
+certain misspellings which are likely to be due to typos such as
+@code{teh} instead of @code{the} or @code{hapoy} instead of
+@code{happy}.  However in order to do this well Aspell needs to know the
+layout of the keyboard via the keyboard definition file.  The keyboard
+definition file simply identifies the keys on the keyboard and which of
+them are right next to each other.  It has an extension of @file{.kbd}
+and all non-ASCII characters are expected to be in UTF-8.
+
+To identify a key use:
+
+@example
+key @var{base} @var{other} @dots{}
+@end example
+@noindent
+
+where @var{base} is the base character that the key types, and
+@var{other} are other keys that the key can produce.  For example
+
+@example
+key a A @'a @'A
+@end example
+
+It generally is only necessary to list keys which type more than one
+distinct letter as Aspell can derive the rest from the language data
+file.  For example, it is not necessary to include the previously
+mentioned key.
+
+To identify two keys as being right next to each other simply list the
+type keys right after each other.  For example the line:
+
+@example
+as
+@end example
+
+@noindent
+will indicate that @samp{a} and @samp{s} are right next to each other.
+If @samp{as} is listed as an entry it is not necessary to list @samp{sa}
+as an entry as that will be done automatically.  Also by @dfn{right
+next to each other} I mean two keys that are close enough together that
+it is easy to type one instead of the other.  On most keyboards this
+means keys that are to the left or to the right of each other and
+@emph{not} keys that are below or above it.
+
+The default for this option is normally @option{standard}.  However
+the default can be changed via the language data file.  The normal
+default, @option{standard}, should work well for most QWERTY like
+keyboard layouts.  It may need minor adjusting for foreign keyboards.
+The @option{dvorak} option can be used for a Dvorak layout.
+
+@node Notes on the Different Suggestion Modes
+@subsection Notes on the Different Suggestion Modes
+
+In order to understand what these suggestion modes do, a basic
+understanding of how Aspell works is required.  For that, see
+@ref{Aspell Suggestion Strategy}.
+
+The suggestion modes are as follows.
+
+@table @b
+
+@item ultra
+This method will use the fastest method available to come up with
+decent suggestions.  This currently means that it will look for
+soundslikes within one edit distance.  This method will also use the
+replacement table if one is available.  In this mode Aspell gets about
+87% of the words from my small test kernel of misspelled words.  (Go
+to @uref{http://aspell.net/test} for more info on the test kernel as
+well as comparisons of this version of Aspell with previous versions
+and other spell checkers.)
+
+@item fast
+This method is currently identical to @option{ultra}.
+
+@item normal
+This mode will use what ever method is necessary to return good
+suggestions in most cases in a reasonable amount of time.  This
+currently means it will looks for soundslikes within two edit distance
+apart.  This mode gets 93% of the words.
+
+@item slow
+Like @option{normal} except that ``reasonable amount of time'' is not
+a consideration.  In most cases it will return the same results as
+@option{normal}.  The biggest difference is that it will try an ngram
+scan if the normal methods of finding a suggestion fail.  
+@c FIXME: Explain what this means.
+
+@item bad-spellers
+This method is like @option{slow} but is tailored more for the bad
+speller, where as the other modes are tailored more
+to strike a good balance between typos and true misspellings.  This
+mode never performs typo-analysis and returns a @emph{huge} number of
+words for the really bad spellers who can't seem to get the spelling
+anything close to what it should be.  If the misspelled word looks
+anything like the correct spelling it is bound to be found
+@emph{somewhere} on the list of 100 or more suggestions.  This mode
+gets 98% of the words.
+@end table
+
+If jump tables were not used then the @option{normal} option is
+identical to @option{fast} and the @option{slow} option is identical
+to the @option{normal} if jump tables were used.
+
+@node Working With Dictionaries
+@chapter Working With Dictionaries
+
+@menu
+* Using aspell-import::         
+* How Aspell Selects an Appropriate Dictionary::  
+* Listing Available Dictionaries::  
+* Dumping the Contents of the Word List::  
+* Creating an Individual Word List::  
+* Working With Affix Info in Word Lists::  
+* Format of the Personal and Replacement Dictionaries::  
+* Using Multi Dictionaries::    
+* Dictionary Naming::           
+* AWLI files::                  
+@end menu
+
+@node Using aspell-import
+@section Using @command{aspell-import}
+
+The @command{aspell-import} Perl script will look for old personal
+dictionaries and will import them into GNU Aspell.  It will look for
+both Ispell and Aspell ones.  To use it, just run it from the command
+prompt.  If you get an error about @file{/usr/bin/perl} not being
+found, then instead try @command{perl @var{bindir}/aspell-import}.  When
+running the script if you get a message like:
+
+@verbatim
+Error: No word lists can be found for the language "de".
+@end verbatim
+
+This means that you have not installed support for the given language,
+in this case @code{de} for German.  To rectify the situation download
+and install a dictionary designed to work with GNU Aspell 0.50 or
+better.
+
+@node How Aspell Selects an Appropriate Dictionary
+@section How Aspell Selects an Appropriate Dictionary
+
+If the @option{master} option is set in any fashion (via the command
+line, the @env{ASPELL_CONF} environment variable, or a configuration
+file) Aspell will look for a dictionary of that name.  If one could
+not be found, it will complain.
+
+Otherwise it will use the value of the @option{lang} option to search
+for an appropriate dictionary.  If more than one dictionary is found
+for the given language string then it will look for a dictionary with
+a matching variety if the @option{variety} option is set.  If it is not
+set it will look for a dictionary without a variety.  If after matching
+the @option{lang} and @option{variety} there is still more than one
+dictionary available it will find one with the size closest to the
+value of the @option{size} option.  The default size is 60.  If Aspell
+cannot find a dictionary based on the @option{lang} option then it
+will give up and complain.
+
+If the @option{lang} option is not explicitly set its value will be
+based on the @env{LC_MESSAGES} locale.  This locale is generally taken
+from the @env{LC_MESSAGES} environment variable or the @env{LANG}
+environment variable if @env{LC_MESSAGES} is not set.  However, if
+Aspell is being used as a library from within another program which
+already explicitly set the locale then it will use the locale of the
+library rather than the environment variables.  If Aspell cannot
+determine the language from the @env{LC_MESSAGES} locale than it will
+default to @code{en_US}.
+
+The list option @option{dict-alias} can be used to influence which dictionary
+is selected by creating an alias from one dictionary name to another.
+This option is most useful when there is more than one dictionary for a
+given language.  For example @samp{add-dict-alias en_US en_US-w_accents}
+will cause Aspell to choose the accented version of the American English
+dictionary instead of the non-accented version.  To add an alias use:
+
+@example
+add-dict-alias @var{NAME} @var{VAL}
+@end example
+
+@node Listing Available Dictionaries
+@section Listing Available Dictionaries
+
+For a list of available dictionaries use the command @command{aspell
+dump dicts}.  This will form a list of dictionaries that Aspell will
+search when a dictionary is not specifically given.
+
+@node Dumping the Contents of the Word List
+@section Dumping the Contents of the Word List
+
+The dump command in @command{aspell} will simply dump the contents of
+a word list to @file{stdout} in a format that can be read back in with
+@command{aspell create}.
+
+If no word list is specified the command will act on the default one.
+For example the command
+
+@example
+aspell dump personal
+@end example
+
+@noindent
+will simply dump the contents of the current personal word list to
+@file{stdout}.
+
+@node Creating an Individual Word List
+@section Creating an Individual Word List
+
+To create an individual main word list from a list of words use the
+command
+
+@example
+aspell --lang=@var{lang} create master ./@var{base} < @var{wordlist}
+@end example
+
+@noindent
+where @var{base} is the name of the word list and
+@var{wordlist} is the list of words separated by white space.
+The name of the word list will automatically be converted to all
+lowercase.  The @code{./} is important because without it Aspell will
+create the word list in the normal word list directory.  If you are
+trying to create a word list in a language other than English check
+the Aspell @option{data-dir} (usually @file{/usr/share/aspell}, use
+@code{aspell dump config} to find out what it is on your system) to
+see if a language data file exists for your language.  If not you will
+need to create one.  For more information on using Aspell with other
+languages @ref{Adding Support For Other Languages}.
+
+This will create the file @file{@var{base}} in the current directory.
+To use the new word list copy the file to the normal word list
+directory (use @code{aspell config} to find out what it is) and use
+the option @option{--master=@var{base}}.
+
+During the creating of the dictionary you may get a number of warnings
+or errors about invalid words or affixes.  By default Aspell will skip
+any invalid words and remove invalid affixes.  If you rather that Aspell
+simply accepts all words given then the option
+@option{--dont-validate-words} can be specified.  To avoid checking if
+affixes are valid use the option @option{--dont-validate-affixes}.
+However, rather than disable checking, it is preferable to clean the
+input word list.  This can be done by using the command
+
+@example
+aspell --local-data-dir=./ --lang=@var{lang} clean < @var{wordlist} > @var{result}
+@end example
+
+@noindent
+which will clean the word list and output the results to @var{result}.
+By default it will remove invalid characters from the beginning and end
+of a word before resorting to skipping the word.  If you rather it just
+skip the words than add the keyword strict:
+
+@example
+aspell --local-data-dir=./ --lang=@var{lang} clean strict < @var{wordlist} > @var{result}
+@end example
+
+The option @option{--clean-words} can be be added when creating a
+dictionary if you want Aspell to remove invalid characters from the
+beginning and end of a word like the "clean" command does. In addition
+the options @option{--dont-skip-invalid-words} and
+@option{--dont-clean-affixes} can be specified to turn the warnings into
+errors.
+
+The compiled dictionary file are endian order dependent.  When a
+dictionary is loaded the endian order is checked.  Please do not
+distribute the compiled dictionaries unless you are only distributing
+them for a particular platform such as you would a binary.
+
+Aspell is now also able to use special @code{multi} dictionaries.  for
+more information @ref{How Aspell Selects an Appropriate Dictionary}.
+
+A personal and replacement word list can be created in a similar fashion.
+
+@c FIXME: add notes about how affix compression works when creating
+@c dictionaries.
+
+@subsection Format of the Replacement Word List
+
+The replacement word list has each replacement pair on its own line in
+the following format
+
+@example
+@i{misspelled_word} @i{correction}
+@end example
+
+@node Working With Affix Info in Word Lists
+@section Working With Affix Info in Word Lists
+
+@subsection The Munch Command
+
+The @command{munch} command takes a list of words from standard input
+and outputs a list of possible root words and affixes.  The root may,
+however, be invalid as it does not check them against the existing
+dictionary.  For example the command:
+@example
+echo brother | aspell -l en munch
+@exdent produces
+brother broth/R brothe/R
+@end example
+
+@subsection The Expand Command
+
+The @command{expand} command is the reverse of @command{munch}, it
+expands affix flags to produce a list of words.  For example:
+@example
+echo both/R | aspell -l en expand
+@exdent produces
+both bother
+@end example
+
+The formal usage is:
+@example
+aspell expand [@var{level}] [@var{limit}]
+@end example
+@noindent
+Where @var{level} is the expansion level.  Valid values are between 1
+and 3.  Level 1 is the default if not otherwise specified.  Level 2
+causes the original root/affix to be included, for example:
+@example
+both/R both bother
+@end example
+@noindent
+Level 3 causes multiple lines to be printed, one for each generated
+word, with the original root/affix combination followed by the word it
+creates:
+@example
+both/R both
+both/R bother
+@end example
+@noindent
+Levels larger than 3 may also be supported, but should not be used as
+they may eventually be removed.
+
+If a @var{limit} parameter is given then only expansions which affect
+the first @var{limit} letters will be expanded.  If a base word is not
+completely expanded for a given affix flag that flag will be left on
+the word.  Note that prefixes are always expanded.
+
+@subsection The Munch-list Command
+
+The @command{munch-list} command will reduce the size of word list via
+affix compression.  It will reduce a list of words to a minimal (or
+close to it) set of roots and affixes that will match the same list of
+words.  The list of words is read from standard input and the result,
+the ``munched'' list, is written to standard out.  It's usage is:
+
+@example
+aspell munch-list [keep] [single|multi] [simple] < @var{infile} > @var{outfile}
+@end example
+
+@noindent
+where @option{simple}, @option{single}, @option{multi}, and
+@option{keep} are literal values.
+
+The default algorithm used should give near optimum results.  In some
+cases the set of words returned is, provably, the minimum number
+possible.  In the typical case the number of words returned is within
+1% of the optimum number.
+
+By default Aspell will remove redundant affix flags.  The @option{keep}
+flag will avoid removing them, which can be useful if you want to
+include all possible expansions for each base word.
+
+When cross products are involved it may be beneficial to list a base
+word more than once.  Unfortunately, the current version of Aspell can
+not correctly handle multiple base words in a dictionary.  Therefore,
+the current default behavior is to only include the one with the most
+expansions.  All of them can be included via the @option{multi} flag.
+Once Aspell is able to handle multiple base words the default will be
+to include them all.  The @option{single} flag can be used to only
+include one of them.
+
+The @option{simple} flag will select an alternate faster algorithm.
+This algorithm is very similar to the @command{munch} command
+distributed with MySpell (the Open Office spell checker), however, it
+doesn't give nearly as good results.  It does okay for the English
+word list but not for some other languages such as German; the normal
+algorithm reduced a list of 312,002 German words to 79,420 base words
+while the simple algorithm only reduced it to 115,927 words.  This
+algorithm may disappear in a future version of Aspell.
+
+@node Format of the Personal and Replacement Dictionaries
+@section Format of the Personal and Replacement Dictionaries
+
+@anchor{Format of the Personal Dictionary}
+@subsection Format of the Personal Dictionary
+                                   
+The personal dictionary generally has a filename of the form:
+
+@example
+.aspell.@var{lang}.pws
+@end example
+
+@noindent
+And the file itself contains two parts.  The first part is a
+header line of the form:
+
+@example
+personal_ws-1.1 @var{lang} @var{num} @i{[}@var{encoding}@i{]}
+@end example  
+
+@noindent
+where @var{num} is the number of words in the list.  This number is
+only used as a hint, and thus does not have to be accurate.  When
+creating a new dictionary it is perfectly acceptable for @var{num} to
+be 0.  The @var{encoding} is optional and specifies the encoding of
+the word list.  If it is left out the encoding is expected to be in
+the default encoding for the language as specified by the
+@option{data-encoding} option.  @xref{data-encoding}.
+
+The second part of simply a word list with one word per line.
+
+@subsection Format of the Personal Replacement Dictionary
+
+The personal replacement dictionary generally has a filename of the form:
+
+@example
+.aspell.@var{lang}.prepl
+@end example
+
+@noindent
+And the file itself contains two parts.  The first part is a
+header line of the form:
+
+@example
+personal_repl-1.1 @var{lang} @var{num} @i{[}@var{encoding}@i{]}
+@end example  
+
+@noindent
+where @var{num} is currently unused and thus always 0.  As with the
+personal dictionary the @var{encoding} is optional.
+
+The second part simply a list of replacements with one replacement
+per line with each replacement pair has the following format:
+
+@example
+@var{misspelled_word} @var{correction}
+@end example
+
+@node Using Multi Dictionaries
+@section Using Multi Dictionaries
+
+As with previous versions of Aspell you can specify the main
+dictionary to use via the @option{-d} or @option{--master} option.
+However as of @acronym{Aspell .32} you can now also:
+
+@enumerate
+@item
+Specify more than word list to use with the
+@option{extra-dicts} option.
+
+@item
+Specify special @emph{multi} dictionaries.
+@end enumerate
+
+The @option{extra-dicts} is a list option.  To add a dictionary use
+@option{add-extra-dicts} or to remove a dictionary from the list
+use @option{rem-extra-dicts}.
+
+A @emph{multi} dictionary is a special file which is basically a list
+of dictionary files to use.  A @emph{multi} dictionary must end in
+@file{.multi} and has roughly the same format as a configuration file
+with the only accepted key being @option{add}.
+
+@node Dictionary Naming
+@section Dictionary Naming
+
+In order for Aspell to be able to correctly recognize a dictionary
+based on the setting of the @env{LANG} environment variable the
+dictionaries need to be located somewhere Aspell can find them and
+they need to be @emph{multi} dictionaries.  Where Aspell looks for
+dictionaries depends on the value of the @option{dict-dir} and
+@option{word-list-path} option.
+
+@option{dict-dir} is generally @file{@var{prefix}/lib/aspell}, and
+@option{word-list-path} is generally empty.
+
+Each dictionary that you expect Aspell to be able to find needs to
+have a name in the following format:
+
+@example
+@var{language}[_@var{region}][-@var{variety}][-@var{size}].multi
+@end example
+
+@noindent
+where @var{language} is the two letter language code, @var{region} is
+the two letter region code, @var{variety} is any extra information to
+distinguish the word list from other ones with the same language and
+spelling.  Multiple varieties can be used by separating them with a '-'.
+Finally, @var{size} is the size of the dictionary.  If no size is
+specified then the default size of 60 will be assumed.
+
+For example:
+
+@example
+en.multi
+en_US.multi
+en-medical.multi
+en-medical-85.multi
+en-85.multi
+de.multi
+@end example
+
+@node AWLI files
+@section AWLI files
+
+In order for Aspell to find dictionaries that are located in odd
+places or not named according to @ref{Dictionary Naming}, an AWLI file
+needs to be created for the dictionary and located in some place where
+Aspell can find it.
+
+Each AWLI file has a name in the following format:
+
+@example
+@var{language}[@var{region}][-@var{variety}][-@var{size}]-@var{module}.awli
+@end example
+
+@noindent
+where the names have the same meaning as in @ref{Dictionary Naming},
+and @var{module} is the speller module to use, which should be set
+to @var{default} for now since there is only one speller module.
+
+Each @file{awli} file for an Aspell word list should then contain
+exactly one line which contains the full path of the main word list.
+
+@node Writing programs to use Aspell
+@chapter Writing programs to use Aspell
+
+There are two main ways to use Aspell from within your application.
+Through the external C API or through a pipe.  The internal
+Aspell API can be used directly but that is not recommended as the
+actual Aspell API is constantly changing.
+
+@menu
+* Through the C API::           
+* Through A Pipe::              
+* Notes on Storing Replacement Pairs::  
+@end menu
+
+@node Through the C API
+@section Through the C API
+
+The Aspell library contains two main classes and several helper
+classes.  The two main classes are @code{AspellConfig} and
+@code{AspellSpeller}. The @code{AspellConfig} class is used to set
+initial defaults and to change spell checker specific options.  The
+@code{AspellSpeller} class does most of the real work.  The
+@code{C API} is responsible for managing the dictionaries, checking
+if a word is in the dictionary, and coming up with suggestions among
+other things. There are many helper classes the important ones are
+@code{AspellWordList}, @code{AspellMutableWordList},
+@code{Aspell*Enumeration}.  The @code{AspellWordList} classes is used
+for accessing the suggestion list, as well as the personal and
+suggestion word list currently in use.  The
+@code{AspellMutableWordList} is used to manage the personal, and
+perhaps other, word lists.  The @code{Aspell*Enumeration} classes are
+used for iterating through a list.
+
+@subsection Usage
+
+To use Aspell your application should include @file{aspell.h}.  In
+order to ensure that all the necessary libraries are linked in libtool
+should be used to perform the linking.  When using libtool simply
+linking with @code{-laspell} should be all that is necessary.  When
+using shared libraries you might be able to simply link
+@code{-laspell}, but this is not recommended.  This version of Aspell
+uses the CVS version of libtool however released versions of libtool
+should also work.
+
+When your application first starts you should get a new configuration
+class with the command:
+
+@smallexample
+AspellConfig * spell_config = new_aspell_config();
+@end smallexample
+
+@noindent
+which will create a new @code{AspellConfig} class.  It is allocated
+with @command{new} and it is your responsibility to delete it with
+@code{delete_aspell_config}.  Once you have the config class you
+should set some variables.  The most important one is the language
+variable.  To do so use the command:
+
+@smallexample
+aspell_config_replace(spell_config, "lang", "en_US");
+@end smallexample
+
+@noindent
+which will set the default language to use to American English.  The
+language is expected to be the standard two letter ISO 639 language
+code, with an optional two letter ISO 3166 country code after an
+underscore.  You can set the preferred size via the @option{size}
+option, any extra info via the @option{variety} option, and the
+encoding via the @option{encoding} option.  Other things you might
+want to set is the preferred spell checker to use, the search path for
+dictionaries, and the like --- see @ref{The Options}, for a list of
+all available options.
+
+Whenever a new document is created a new @code{AspellSpeller} class
+should also be created.  There should be one speller class per
+document.  To create a new speller class use the
+@code{new_aspell_speller} and then cast it up using
+@code{to_aspell_speller} like so:
+
+@smallexample
+AspellCanHaveError * possible_err = new_aspell_speller(spell_config);
+AspellSpeller * spell_checker = 0;
+if (aspell_error_number(possible_err) != 0)
+  puts(aspell_error_message(possible_err));
+else
+  spell_checker = to_aspell_speller(possible_err);
+@end smallexample
+
+@noindent
+which will create a new @code{AspellSpeller} class using the defaults
+found in @code{spell_config}.  To find out which dictionary is
+selected the @option{lang}, @option{size}, and @option{variety} options
+may be examined.  To find out the exact name of the dictionary the
+@option{master} option may be examined as well as the
+@option{master-flags} options to see if there were any special flags
+that were passed on to the module.  The @option{module} option way
+also be examined to figure out which speller module was selected, but
+since there is only one this option will always be the same.
+
+If for some reason you want to use different defaults simply clone
+@code{spell_config} and change the setting like so:
+
+@smallexample
+AspellConfig * spell_config2 = aspell_config_clone(spell_config);
+aspell_config_replace(spell_config2, "lang","nl");
+possible_err = new_aspell_speller(spell_config2);
+delete_aspell_config(spell_config2);
+@end smallexample
+
+Once the speller class is created you can use the @code{check} method
+to see if a word in the document is correct like so:
+
+@smallexample
+int correct = aspell_speller_check(spell_checker, @var{word}, @var{size});
+@end smallexample
+
+@noindent
+@var{word} is expected to be a @code{const char *} character
+string.  If the encoding is set to be @code{ucs-2} or
+@code{ucs-4} @var{word} is expected to be a cast
+from either @code{const u16int *} or @code{const u32int *}
+respectively.  @code{u16int} and @code{u32int} are generally
+@code{unsigned short} and @code{unsigned int} respectively.
+@var{size} is the length of the string or @code{-1} if the string
+is null terminated.  If the string is a cast from @code{const u16int
+*} or @code{const u32int *} then @code{@i{size}} is the amount of
+space in bytes the string takes up after being cast to @code{const
+char *} and not the true size of the string.  @code{sspell_speller_check}
+will return @code{0} if it is not found and non-zero otherwise.
+
+If the word is not correct, then the @code{suggest} method can be used
+to come up with likely replacements.
+
+@smallexample
+AspellWordList * suggestions = aspell_speller_suggest(spell_checker,
+                                                      @var{word}, @var{size});
+AspellStringEnumeration * elements = aspell_word_list_elements(suggestions);
+const char * word;
+while ( (word = aspell_string_enumeration_next(aspell_elements)) != NULL )
+@{
+  // add to suggestion list
+@}
+delete_aspell_string_enumeration(elements);
+@end smallexample
+
+Notice how @code{elements} is deleted but @code{suggestions} is not.
+The value returned by @code{suggestions} is only valid to the next
+call to @code{suggest}.  Once a replacement is made the
+@code{store_repl} method should be used to communicate the replacement
+pair back to the spell checker (for the reason, @pxref{Notes on
+Storing Replacement Pairs}).  Its usage is as follows:
+
+@smallexample
+aspell_speller_store_repl(spell_checker, @var{misspelled_word}, @var{size},
+                          @var{correctly_spelled_word}, @var{size});
+@end smallexample
+
+If the user decided to add the word to the session or personal
+dictionary the the word can be be added using the
+@code{add_to_session} or @code{add_to_personal} methods respectively
+like so:
+
+@smallexample
+aspell_speller_add_to_session|personal(spell_checker, @i{word}, @i{size});
+@end smallexample
+
+It is better to let the spell checker manage these words rather than
+doing it yourself so that the words have a chance of appearing in the
+suggestion list.
+
+Finally, when the document is closed the @code{AspellSpeller} class
+should be deleted like so:
+
+@smallexample
+delete_aspell_speller(spell_checker);
+@end smallexample
+
+@subsection API Reference
+
+Methods that return a boolean result generally return @code{false} on
+error and @code{true} otherwise.  To find out what went wrong use the
+@code{error_number} and @code{error_message} methods.  Unless
+otherwise stated methods that return a @code{const char *} will return
+@code{NULL} on error.  In general, the character string returned is
+only valid until the next method which returns a @code{const char *}
+is called.
+
+For the details of the various classes please see the header files.
+In the future I will generate class references using some automated
+tool.
+
+@subsection Examples
+
+Two simple examples are included in the examples directory.  The
+@code{example-c} program demonstrates most of the Aspell library
+functionality and the @code{list-dicts} lists the available
+dictionaries.
+
+@subsection Notes About Thread Safety
+
+Aspell should be thread safe, when used properly, as long as the
+underlying compiler, C and C++ library is thread safe.  Aspell
+objects, including the AspellSpeller class, should not be used by
+multiple threads unless they are protected by locks or it is only
+accessed by read-only methods.  A method is read-only only if a
+@code{const} object is passed in.  Many methods that seam to be
+read-only are not because they may store state information in the
+object.
+
+@node Through A Pipe
+@section Through A Pipe
+
+When given the @command{pipe} or @command{-a} command, Aspell goes
+into a pipe mode that is compatible with @command{ispell -a}.  Aspell
+also defines its own set of extensions to Ispell pipe mode.
+
+@subsection Format of the Data Stream
+
+In this mode, Aspell prints a one-line version identification message,
+and then begins reading lines of input.  For each input line, a single
+line is written to the standard output for each word checked for
+spelling on the line.  If the word was found in the main dictionary,
+or your personal dictionary, then the line contains only a @samp{*}.
+
+If the word is not in the dictionary, but there are suggestions, then
+the line contains an @samp{&}, a space, the misspelled word, a space,
+the number of near misses, the number of characters between the
+beginning of the line and the beginning of the misspelled word, a
+colon, another space, and a list of the suggestions separated by
+commas and spaces.
+
+If you set the option @command{run-together} and Aspell thinks this word
+is a combination of two words in the dictionary, then it prints a single
+@samp{-} in one line.
+
+Finally, if the word does not appear in the dictionary, and there are
+no suggestions, then the line contains a @samp{#}, a space, the
+misspelled word, a space, and the character offset from the beginning
+of the line.  Each sentence of text input is terminated with an
+additional blank line, indicating that Aspell has completed processing
+the input line.
+
+These output lines can be summarized as follows:
+
+@example
+@strong{OK}: *
+@strong{Suggestions}: & @i{original} @i{count} @i{offset}: @i{miss}, @i{miss}, @dots{}
+@strong{None}: # @i{original} @i{offset}
+@end example
+
+When in the @option{-a} mode, Aspell will also accept lines of single
+words prefixed with any of @samp{*}, @samp{&}, @samp{@@},
+@samp{+}, @samp{-}, @samp{~}, @samp{#}, @samp{!}, @samp{%}, or
+@samp{^}.  A line starting with @samp{*} tells Aspell to insert the
+word into the user's dictionary.  A line starting with @samp{&} tells
+Aspell to insert an all-lowercase version of the word into the user's
+dictionary.  A line starting with @samp{@@} causes Aspell to accept
+this word in the future.  A line starting with @samp{+}, followed
+immediately by a valid mode will cause Aspell to parse future input
+according the syntax of that formatter.  A line consisting solely of a
+@samp{+} will place Aspell in @TeX{}/LaTeX mode (similar to the
+@option{-t} option) and @samp{-} returns Aspell to its default mode
+(which is Nroff unless otherwise specified).
+(but these commands are obsolete).  A line @samp{~}, is ignored for
+Ispell compatibility.  A line prefixed with @samp{#} will cause the
+personal dictionaries to be saved.  A line prefixed with @samp{!}
+will turn on terse mode (see below), and a line prefixed with
+@samp{%} will return Aspell to normal (non-terse) mode.  Any input
+following the prefix characters @samp{+}, @samp{-}, @samp{#},
+@samp{!}, @samp{~}, or @samp{%} is ignored, as is any input
+following.  To allow spell-checking of lines beginning with these
+characters, a line starting with @samp{^} has that character removed
+before it is passed to the spell-checking code.  It is recommended
+that programmatic interfaces prefix every data line with an uparrow to
+protect themselves against future changes in Aspell.
+
+To summarize these:
+
+@multitable @columnfractions .1 .9
+@item @kbd{*@var{word}}
+ @tab Add a word to the personal dictionary
+@item @kbd{&@var{word}}
+ @tab Insert the all-lowercase version of the word in the personal dictionary
+@item @kbd{@@@var{word}}
+ @tab Accept the word, but leave it out of the dictionary
+@item @kbd{#}
+ @tab Save the current personal dictionary
+@item @kbd{~} @tab Ignored for Ispell compatibility.
+@item @kbd{+} @tab Enter @TeX{} mode.
+@item @kbd{+@var{mode}} @tab Enter the mode specified by @var{mode}.
+@item @kbd{-} @tab Enter the default mode.
+@item @kbd{!} @tab Enter terse mode
+@item @kbd{%} @tab Exit terse mode
+@item @kbd{^} @tab Spell-check the rest of the line
+@end multitable
+
+In terse mode, Aspell will not print lines beginning with @samp{*},
+which indicate correct words.  This significantly improves running
+speed when the driving program is going to ignore correct words
+anyway.
+
+In addition to the above commands which are designed for Ispell
+compatibility Aspell also supports its own extensions.  All Aspell
+extensions follow the following format.
+
+@example
+$$@var{command} [@var{data}]
+@end example
+
+Where @var{data} may or may not be required depending on the
+particular command.  Aspell currently supports the following commands:
+
+@multitable @columnfractions .33 .67
+@item @code{cs @var{option},@var{value}} @tab Change a configuration option.
+@item @code{cr @var{option}} @tab Prints the value of a configuration option.
+@item @code{pp}
+ @tab Returns a list of all words in the current personal wordlist.
+@item @code{ps}
+ @tab Returns a list of all words in the current session dictionary.
+@item @code{l} @tab Returns the current language name.
+@item @code{ra @var{mis},@var{cor}} @tab Add the word pair to the
+ replacement dictionary for later use. Returns nothing.
+@end multitable
+
+Anything returned is returned on its own line.  All lists returned
+have the following format
+
+@example
+@i{num of items}: @i{item1}, @i{item2}, @i{etc}
+@end example
+
+@c FIXME: Add note about byte-offset option.
+
+@emph{(Part of the preceding section was directly copied out of the
+Ispell manual)}
+
+@node Notes on Storing Replacement Pairs
+@section Notes on Storing Replacement Pairs
+
+The @code{store_repl} method and the @code{$$ra} should be used
+because Aspell is able to learn from users misspellings.  For example
+on the first pass a user misspells @emph{beginning} as @emph{beging}
+so Aspell suggests:
+
+@example
+begging, begin, being, Beijing, bagging, @dots{}.
+@end example
+
+@noindent
+However the user then tries @emph{begning} and Aspell suggests
+
+@example
+beginning, beaning, begging, @dots{}
+@end example
+
+@noindent
+so the user selects @emph{beginning}.  However, later on in the
+document the user misspells it as @emph{begng} (@strong{not}
+@emph{beging}).  Normally Aspell will suggest.
+
+@example
+began, begging, begin, begun, @dots{}
+@end example
+
+@noindent
+However because it knows the user misspelled @emph{beginning} as
+@emph{beging} it will instead suggest:
+
+@example
+beginning, began, begging, begin, begun @dots{}
+@end example
+
+I myself often misspelled beginning (and still do) as something close
+to begging and too many times wind up writing sentences such as
+"begging with @dots{}".
+
+Please also note that replacements commands have a memory.  Which means
+if you first store the replacement pair:
+
+@example
+sicolagest -> psycolagest
+@end example
+
+@noindent
+then store the replacement pair
+
+@example
+psycolagest -> psychologist
+@end example
+
+@noindent
+The replacement pair
+
+@example
+sicolagest -> psychologist
+@end example
+
+@noindent
+will also get stored so that you don't have to worry about it.
+
+@node Adding Support For Other Languages
+@chapter Adding Support For Other Languages
+
+Before you consider adding support for Aspell, first make sure that
+someone else has not already done it.  A good number of dictionaries
+off the Aspell home page at @uref{http://aspell.net}.  If your
+language is not listed above feel free to send mail to aspell-dict at
+gnu org for help in getting started.
+
+Adding a language to Aspell is fairly straightforward.  You basically
+need to create the language data file, and compile a new word list.
+
+@menu
+* The Language Data File::      
+* Compiling the Word List::     
+* Phonetic Code::               
+* The Simple Soundslike::       
+* Replacement Tables::          
+* Affix Compression::           
+* Controlling the Behavior of Run-together Words::  
+* Creating A New Character Set::  
+* Creating An Official Dictionary Package::  
+@end menu
+
+@node The Language Data File
+@section The Language Data File
+
+The basic format of the language data file is the same as it is for the
+Aspell configuration file.  It is named @file{@var{lang}.dat} and is
+located in the architecture independent data dir for Aspell (option
+@option{data-dir}) which is usually @file{@var{prefix}/share/aspell}.
+Use @command{aspell config} to find out where it is in your
+installation.  By convention the language name should be the two letter
+ISO 639 language code if it exists, if not use the three letter code.
+
+The language data file has several mandatory fields, and several
+optional ones.  All fields are case sensitive and should be in all
+lower case.
+
+The two mandatory fields are @option{name} and @option{charset}.
+
+@option{name} is the name of the language and should be the same as the
+file name (without the @file{.dat}).
+
+@option{charset} is the 8-bit character set Aspell will expect the
+word lists to be formatted in.  If possible choose from one of the
+standard ones provided with Aspell.  These are @samp{iso-8859-*},
+@samp{koi8-*}, or @samp{viscii}.  If your language does not require
+any non-ascii characters choose @samp{iso-8859-1}.  If one of these
+standard character sets is not suitable for your language then you can
+create a new one.  @xref{Creating A New Character Set}.
+
+The optional fields are as follows:
+
+@table @option
+
+@anchor{data-encoding}
+@item data-encoding
+
+The encoding the language data files are expected to be in as well as
+the default encoding to use when saving the personal dictionaries.  It
+can be either @samp{utf-8} or any of the 8-bit encoding that Aspell
+supports.  If not set, then it defaults to @option{charset}.
+
+@item special
+
+Non-letter characters that can appear in your language such as the
+@samp{'} and @samp{-}. The format for the value is a list separated by
+spaces.  Each item of the list has the following format.
+
+@example
+<char> <begin><middle><end>
+@end example
+
+@var{char} is the non-letter character in question.
+@var{begin}, @var{middle}, @var{end} are either a
+@samp{-} or a @samp{*}.  A star for @var{begin} means that the
+character can begin a word, a @samp{-} means it can't.  The same is
+true for @var{middle} and @var{end}. For example, the entry
+for the @samp{'} in English is:
+
+@example
+' -*-
+@end example
+
+To include more than one middle character just list them one after
+another on the same line.  For example, to make both the @samp{'}
+and the @samp{-} a middle character, use the following line in the
+language data file:
+
+@example
+special ' -*- - -*-
+@end example
+
+However, please be aware that adding special characters can have
+unintended consequences due to limitations of Aspell.  For example if
+the @samp{-} was accepted as a middle character, then @emph{every}
+word with a @samp{-} in it would be flagged as a spelling error unless
+that exact word is in the dictionary, even if both parts are in the
+dictionary.  Also, having a @samp{.} as an end character will cause
+the @samp{.} to be part of any misspelled words.  Which can get very
+annoying if you misspell a word at the end of a sentence.
+
+@item soundslike
+
+The name of the soundslike data for the language.  The data is
+expected to be in the file @file{@var{name}_phonet.dat}.
+
+If @var{name} is @samp{simpile} then a very simple soundslike is
+used.  This is not as powerful as full phonetic soundslike but it
+can be computed a lot faster.  (@pxref{The Simple Soundslike})
+
+If the soundslike name is @samp{none}, or this option is not specified,
+then no soundslike will be used.  The effective soundslike is the word
+converted to all lowercase and possibly with accents stripped
+depending on the @option{store-as} option.  For languages with
+phonetic spelling the difference will not be very noticeable.
+However, for languages with non-phonetic spelling there will be a
+noticeable difference.  The difference you notice will depend on the
+quality of the soundslike data file.  If you do not notice much of a
+difference for a language with non-phonetic spelling that is a good
+indication that the soundslike data is not rough enough---or the words
+you are trying are not that badly misspelled.
+
+@item invisible-soundslike
+
+Avoid storing the soundslike information with the word.  Instead it is
+computed as needed.  This option defaults to true if the soundslike is
+@samp{none} or @samp{simpile}, and false when a phonetic soundslike is
+used.
+
+@item repl-table
+
+@xref{Replacement Tables}.
+
+@item keyboard
+
+The base name of the keyboard definition file to use.  For more
+information see @ref{Notes on Typo-Analysis}.
+
+@item sug-split-char
+
+A list of characters which specifies which characters to insert between
+two words when a word is split.  This is a list option.
+
+@item affix
+@itemx affix-compress
+@itemx partially-expand
+
+@xref{Affix Compression}.
+
+@item store-as
+
+How the words are indexed in the dictionary.  If "stripped" then the
+word is indexed in a lower case and de-accented form.  If "lower", then
+the word is indexed in a lower case form but with accent info still
+intact.  This just controls how the word is indexed, not how it is
+stored.  The default is "stripped" unless affix compression is used.
+
+@c @item ignore-accents
+
+@c @item affix-char
+
+@c Unimplemented
+
+@c @item flag-char
+
+@c Unimplemented
+
+@item norm-required
+
+Should be set to true if your language makes use of private use
+characters or when Normalization Form C is not the same as
+full composition.
+
+@item normalize
+
+@item norm-form
+
+@end table
+
+Additional options includes options to control how run-together words
+are handled the same way as they are in the normal configuration
+files.  for more information, please @ref{Controlling the Behavior of
+Run-together Words}.
+
+@node Compiling the Word List
+@section Compiling the Word List
+
+Once you have a working language data file installed in the right
+place you are ready to compile the main word list.  To find out what
+to do, see @ref{Working With Dictionaries}.  This section also
+includes instructions for creating the AWLI file.
+
+@node Phonetic Code
+@section Phonetic Code
+
+@c @emph{(The following section was originally written by Bj@"orn Jacke,
+@c bjoern.jacke at gmx de)}
+
+Aspell is in fact the spell checker that comes up with the best
+suggestions if it finds an unknown word.  One reason is that it does
+not just compare the word with other words in the dictionary (like
+Ispell does) but also uses phonetic comparisons with other words.
+
+The new table driven phonetic code is very flexible and setting up
+phonetic transformation rules for other languages is not difficult but
+there can be a number of stumbling blocks --- that's why I wrote this
+section.
+
+The main phonetic code is free of any language specific code and
+should be powerful enough to allow setting up rules for any language.
+Anything which is language specific is kept in a plain text file and
+can easily be edited.  So it's even possible to write phonetic
+transformation rules if you don't have any programming skills.  All
+you need to know is how words of the language are written and how they
+are pronounced.
+
+@subsection Syntax of the transformation array
+
+In the translation array there are two strings on each line; the first
+one is the search string (or switch name) and the second one is the
+replacement string (or switch parameter).  The line
+
+@example
+version   @var{version}
+@end example
+
+@noindent
+is also required to appear somewhere in the translation array.  The
+version string can be anything but it should be changed whenever a new
+version of the translation array is released.  This is important
+because it will keep Aspell from using a compiled dictionary with the
+wrong set of rules.  For example, if when coming up with suggestion
+for @code{hallo}, Aspell will use the new rules to come up with the
+soundslike say @code{H*L*}, but if @samp{hello} is stored in the
+dictionary using the old rules as @code{HL} instead of @code{H*L*}
+Aspell will never be able to come up with @samp{hello}.  So to solve
+this problem Aspell checks if the version strings match and aborts
+with an error if they don't.  Thus it is important to update it
+whenever a new version of the translation array is released.  This is
+only a problem with the main word list as the personal word lists are
+now stored as simple word lists with a single header line (i.e. no
+soundslike data).
+
+Each non switch line represents one replacement (transformation) rule.
+Words beginning with the same letter must be grouped together; the
+order inside this group does not depend on alphabetical issues but it
+gives priorities; the higher the rule the higher the priority.  That's
+why the first rule that matches is applied.  In the following example:
+
+@example
+GH   _
+G    K
+@end example
+
+@noindent
+@samp{GH -> _} has higher priority than @samp{G -> K}
+
+@samp{_} represents the empty string ``''.  If @samp{GH -> _} came
+after @samp{G -> K}, the second rule would never match because the
+algorithm would stop searching for more rules after the first match.
+The above rules transform any @samp{GH} to an empty string (delete
+them) and transforms any other @samp{G} to @samp{K}.
+
+At the end of the first string of a line (the search string) there may
+optionally stand a number of characters in brackets.  One (only one!)
+of these characters must fit.  It's comparable with the @samp{[ ]}
+brackets in regular expressions.  The rule @samp{DG(EIY) -> J} for
+example would match any @samp{DGE}, @samp{DGI} and
+@samp{DGY} and replace them with @samp{J}.  This way you can
+reduce several rules to one.
+
+Before the search string, one or more dashes @samp{-} may be placed.
+Those search strings will be matched totally but only the beginning of
+the string will be replaced.  Furthermore, for these rules no follow-up
+rule will be searched (what this is will be explained later).  The
+rule @samp{TCH-- }-> _ will match any word containing
+@samp{TCH} (like @samp{match}) but will only replace the first
+character @samp{T} with an empty string.  The number of dashes
+determines how many characters from the end will not be replaced.
+After the replacement, the search for transformation rules continues
+with the not replaced @samp{CH}!
+
+If a @samp{<} is appended to the search string, the search for
+replacement rules will continue with the replacement string and not with
+the next character of the word.  The rule @samp{PH< -> F} for example
+would replace @samp{PH} with @samp{F} and then again start to search for
+a replacement rule for @samp{F@dots{}}.  If there would also be rules
+like @samp{FO }-> @samp{O} and @samp{F -> _} then words like
+@samp{PHOXYZ} would be transformed to @samp{OXYZ} and any occurrences of
+@samp{PH} that are not followed by an @samp{O} will be deleted like
+@samp{PHIXYZ -> IXYZ}.  The second replacement however is not applied if
+the priority of this rule is lower than the priority of the first rule.
+
+Priorities are added to a rule by putting a number between 0 and 9 at
+the end of the search string, for example @samp{ING6 -> N}.
+The higher the number the higher is the priority.
+
+Priorities are especially important for the previously mentioned
+follow-up rules.  Follow-up rules are searched beginning from the last
+string of the first search string.  This is a bit complicated but I
+hope this example will make it clearer:
+
+@example
+CHS      X
+CH       G
+
+HAU--1   H
+
+SCH      SH
+@end example
+
+In this example @samp{CHS} in the word @samp{FUCHS} would be
+transformed to @samp{X}.  If we take the word @samp{DURCHSCHNITT} then
+things look a bit different.  Here @samp{CH} belongs together and
+@samp{SCH} belongs together and both are spoken separately.  The
+algorithm however first finds the string @samp{CHS} which may not be
+transformed like in the previous word @samp{FUCHS}.  At this point the
+algorithm can find a follow-up rule.  It takes the last character of
+the first matching rule (@samp{CHS}) which is @samp{S} and looks for
+the next match, beginning from this character.  What it finds is
+clear: It finds @samp{SCH -> SH}, which has the same priority
+(no priority means standard priority, which is 5).  If the priority is
+the same or higher the follow-up rule will be applied.  Let's take a
+look at the word @samp{SCHAUKEL}.  In this word @samp{SCH} belongs
+together and may not be taken apart.  After the algorithm has found
+@samp{SCH }-> @samp{SH} it searches for a follow-up rule for
+@samp{H+}@samp{AUKEL}.  It finds @samp{HAU--1 -> H}, but does not
+apply it because its priority is lower than the one of the first rule.
+You see that this is a very powerful feature but it also can easily
+lead to mistakes.  If you really don't need this feature you can turn
+it off by putting the line:
+
+@example
+followup      0
+@end example
+
+@noindent
+at the beginning of the phonetic table file.  As mentioned, for rules
+containing a @samp{-} no follow-up rules are searched but giving such
+rules a priority is not totally senseless because they can be
+follow-up rules and in that case the priority makes sense again.
+Follow-up rules of follow-up rules are not searched because this is in
+fact not needed very often.
+
+The control character @samp{^} says that the search string only
+matches at the beginning of words so that the rule @samp{RH -> R} will
+only apply to words like @samp{RHESUS} but not @samp{PERHAPS}.  You
+can append another @samp{^} to the search string.  In that case the
+algorithm treats the rest of the word totally separately from the
+first matched string at the beginning.  This is useful for prefixes
+whose pronunciation does not depend on the rest of the word and vice
+versa like @samp{OVER^^} in English for example.
+
+The same way as @samp{^} works does @samp{$} only apply to words
+that end with the search string.  @samp{GN$ -> N} only
+matches on words like @samp{SIGN} but not @samp{SIGNUM}.  If
+you use @samp{^} and @samp{$} together, both of them must fit
+@samp{ENOUGH^$ -> NF} will only match the word
+@samp{ENOUGH} and nothing else.
+
+Of course you can combine all of the mentioned control characters but
+they must occur in this order: @samp{< - priority ^ $}.  All
+characters must be written in CAPITAL letters.
+
+If absolutely no rule can be found --- might happen if you use strange
+characters for which you don't have any replacement rule --- the next
+character will simply be skipped and the search for replacement rules
+will continue with the rest of the word.
+
+If you want double letters to be reduced to one you must set up a rule
+like @samp{LL- -> L}.  If double letters in the resulting phonetic
+word should be allowed, you must place the line:
+
+@example
+collapse_result     0
+@end example
+
+@noindent
+at the beginning of your transformation table file; otherwise set the
+value to `1'.  The English rules for example strip all vowels from
+words and so the word "GOGO" would be transformed to "K" and not to
+"KK" (as desired) if @code{collapse_result} is set to 1.  That's why
+the English rules have @code{collapse_result} set to @code{0}.
+
+By default, all accents are removed from a word before it is matched to
+the soundslike rules.  If you do not want this then add the line
+
+@example
+remove_accents      0
+@end example
+
+at the beginning of your file.  The exact definition of an accent is
+language dependent and is controlled via the character set file.  If you
+set remove_accents to '0' then you should also set "store-as" to "lower"
+in the language data file (not the phonetic transformation file)
+otherwise Aspell will have problems when both the accented and the
+de-accented version of a word appearing in the dictionary; it will
+consider one of them as incorrectly spelled.
+
+@subsection How do I start finally?
+
+Before you start to write an array of transformation rules, you should
+be aware that you have to do some work to make sure that things you do
+will result in correct transformation rules.
+
+@subsubsection Things that come in handy
+
+First of all, you need to have a large word list of the language you
+want to make phonetics for.  It should contain about as many words as
+the dictionary of the spell checker.  If you don't have such a list,
+you will probably find an Ispell dictionary at
+@uref{http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html} which
+will help you.  You can then make affix expansion via @command{ispell
+-e} and then pipe it through @command{tr " " "\n"} to put one word on
+each line.  After that you eventually have to convert special
+characters like @samp{@'e} from Ispell's internal representation to
+latin1 encoding.  @command{sed s/e'/@'e/g} for example would replace
+all @samp{e'} with @samp{@'e}.
+
+The second is that you know how to use regular expressions and know
+how to use @command{grep}.  You should for example know that:
+
+@example
+grep ^[^aeiou]qu[io] wordlist | less
+@end example
+
+@noindent
+will show you all words that begin with any character but @samp{a},
+@samp{e}, @samp{i}, @samp{o} or @samp{u} and then continue with
+@samp{qui} or @samp{quo}.  This stuff is important for example to
+find out if a phonetic replacement rule you want to set up is valid
+for all words which match the expression you want to replace.  Taking
+a look at the regex(7) man page is a good idea.
+
+@subsubsection What the phonetic code should do
+
+Normal text comparison works well as long as the typer misspells a
+word because he pressed one key he didn't really want to press.  In
+these cases, mostly one character differs from the original word.
+
+In cases where the writer didn't know about the correct spelling of
+the word, the word may have several characters that differ from the
+original word but usually the word would still sound like the
+original.  Someone might think that `tough' is spelled `taff'.  No
+spell checker without phonetic code will come to the idea that this
+might be `tough', but a spell checker who knows that `taff' would be
+pronounced like `tough' will make good suggestions to the user.  Another
+example could be `funetik' and `phonetic'.
+
+From these examples you can see that the phonetic transformation should
+not be too fussy and too precise.  If you implement a whole phonetic
+dictionary as you can find it in books this will not be very useful
+because then there could still be many characters differing from the
+misspelled and the desired word.  What you should do if you implement
+the phonetic transformation table is to reduce the number of used
+letters to the only really necessary ones.
+
+Characters that sound similar should be reduced to one.  In the English
+language for example `Z' sounds like `S' and that's why the
+transformation rule @samp{Z -> S} is present in the
+replacement table.  ``PH is spoken like ``F and so we have a
+@samp{PH -> F} rule.
+
+If you take a closer look you will even see that vowels sound very
+similar in the English language: `contradiction', `cuntradiction',
+`cantradiction' or `centradiction' in fact sound nearly the same,
+don't they? Therefore the English phonetic replacement rules not only
+reduce all vowels to one but even remove them all (removing is done by
+just setting up no rule for those letters).  The phonetic code of
+``contradiction'' is ``KNTRTKXN'' and if you try to read this
+letter-monster loud you will hear that it still sound a bit like
+`contradiction'.  You also see that ``D'' is transformed to ``T''
+because they nearly sound the same.
+
+If you think you have found a regularity you should @emph{always} take
+your word list and @command{grep} for the corresponding regular
+expression you want to make a transformation rule for.  An example: If
+you come to the idea that all English words ending on `ough' sound
+like `AF' at the end because you think of `enough' and `tough'.  If
+you then @code{grep} for the corresponding regular expression by
+@command{grep -i ough$ wordlist} you will see that the rule you wanted
+to set up is not correct because the rule doesn't fit to words like
+`although' or `bough'.  So you have to define your rule more precisely
+or you have to set up exceptions if the number of words that differ
+from the desired rule is not too big.
+
+Don't forget about follow-up rules which can help in many cases but
+which also can lead to confusion and unwanted side effects.  It's also
+important to write exceptions in front of the more general rules
+(@samp{GH} before @samp{G} etc.).
+
+If you think you have set up a number of rules that may produce some
+good results try them out! If you run Aspell as @command{aspell
+--lang=@var{your_language} pipe} you get a prompt at which you can type
+in words.  If you just type words Aspell checks them and eventually
+makes suggestions if they are misspelled.  If you type in @code{$$Sw
+@var{word}} you will see the phonetic transformation and you can test
+out if your work does what you want.
+
+Another good way to check that changes you make to your rules don't
+have any bad side effects is to create another list from your word
+list which contains not only the word of the word list but also the
+corresponding phonetic version of this word on the same line.  If you
+do this once before the change and once after the change you can make
+a diff (see @command{man diff}) to see what @emph{really} changed.  To
+do this use the command @command{aspell --lang=@var{your_language}
+soundslike}.  In this mode Aspell will output the the original word
+and then its soundslike separated by a tab character for each word you
+give it.  If you are interested in seeing how the algorithm works you
+can download a set of useful programs from
+@uref{http://members.xoom.com/maccy/spell/phonet-utils.tar.gz}.  This
+includes a program that produces a list as mentioned above and another
+program which illustrates how the algorithm works.  It uses the same
+transformation table as Aspell and so it helps a lot during the
+process of creating a phonetic transformation table for Aspell.
+
+During your work you should write down your basic ideas so that other
+people are able to understand what you did (and you still know about
+it after a few weeks).  The English table has a huge documentation
+appended as an example.
+
+Now you can start experimenting with all the things you just read and
+perhaps set up a nice phonetic transformation table for your language
+to help Aspell to come up with the best correction suggestions ever
+seen also for your language.  Take a look at the Aspell homepage to
+see if there is already a transformation table for your language.  If
+there is one you might also take a look at it to see if it could be
+improved.
+
+If you think that this section helped you or if you think that this is
+just a waste of time you can send any feedback to
+@email{bjoern.jacke@@gmx.de}.
+
+@node The Simple Soundslike
+@section The Simple Soundslike
+
+The simple soundslike goes something like this:
+
+@example
+sl0[0] = lookup0(word[0])
+for (i = 1; i < size; i++)
+  sl0[i] = lookup(word[i]);
+s = 0;
+for (i = 0; i < size; i++)
+  sl.append(al0[i]) unless sl0[i] == 0 || sl0[i] == sl0[i-1];
+@end example
+
+Basically each character can be converted to another character or deleted.
+A separate lookup table is used for the first character.  If the same
+soundslike letter is repeated, the duplicate is removed.
+
+By default all accents are removed, and all vowels are deleted unless
+they appear at the start of the word in which case they are converted
+to a @samp{*}.  The exact behavior can be customized via the character
+data file.
+
+The simplified soundslike has the advantage that it is very fast to
+compute and thus does not need to be stored with a word.  Also, when
+affix compression is used and the @option{partially-expand} is given
+the results will be identical to the results when affix compression is
+not used.
+
+Of course it is not nearly as powerful as the phonetic soundslike.
+
+@node Replacement Tables
+@section Replacement Tables
+
+When phonetic code is not used a replacement table can be used instead.
+To enable the use of a replacement table add the line @code{repl-table
+@var{lang}}, in which case the replacement table is excepted to be in
+the file @file{@var{lang}_repl.dat}.  A complete file name can also be
+specified in place of @var{lang}.  For compatibility with MySpell the
+replacement table can also be part of the affix file, in which case
+@option{repl-table} will be @file{@var{lang}_affix.dat"}.
+
+Replacement table syntax:
+
+@example
+REP [number_of_replacement_definitions]
+REP [what] [replacement]
+REP [what] [replacement]
+@end example
+
+For example a possible English replacement table definition
+to handle misspelled consonants:
+
+@example
+REP 8
+REP f ph
+REP ph f
+REP f gh
+REP gh f
+REP j dg
+REP dg j
+REP k ch
+REP ch k
+@end example
+
+@node Affix Compression
+@section Affix Compression
+
+Aspell, as of version 0.60, now has support for affix compression.
+The codebase comes from MySpell found in OpenOffice.
+
+To add support for affix compression add the following lines to the
+language data file.
+
+@example
+affix          @var{lang}
+affix-compress true
+@end example
+
+The line @samp{affix @var{lang}} adds support for recognizing affix
+information, and the line @samp{affix-compress true} enables affix
+compression.
+
+The affix file is expected to be named @file{@var{lang}_affix.dat}.  It is
+the exact same format as those used by MySpell.  More information can
+be found in the myspell/ directory of the distribution or at
+@uref{http://lingucomponent.openoffice.org/dictionary.html}.
+
+Affix compression can also be used with soundslike lookup.  Aspell
+does this by only storing the soundslike for the root word.  When a
+word is misspelled it will search for a soundslike close to all
+possible roots of the misspelled word.
+
+When no soundslike information, or the simple soundslike, is used it
+may be beneficial to specify the option @option{partially-expand}
+which will partially expand a word with affix information so that the
+affix flags do not affect the first 3 letters of the word.  This will
+allow Aspell to get more accurate results when scanning the list for near
+misses since the full word can be used and not just the root.
+Specifying this option, however, will also effectively expand any
+prefixes.  Thus this option should not be used for prefix heavy
+languages such as Hebrew.
+
+An existing word list, without affix info, can be affix compressed
+using using @command{aspell munch-list}.
+
+@subsection Format of the Affix File
+
+@c (as written in affix.readme)
+
+An affix is either a  prefix or a suffix attached to root words to make
+other words.  For example supply -> supplied by dropping the "y" and
+adding an "ied" (the suffix).
+
+Here is an example of how to define one specific suffix borrowed
+from the English affix file.
+
+@example
+SFX D Y 4
+SFX D   0     d          e
+SFX D   y     ied        [^aeiou]y
+SFX D   0     ed         [^ey]
+SFX D   0     ed         [aeiou]y
+@end example
+
+This file is space delimited and case sensitive.  So this information
+can be interpreted as follows:
+
+The first line has 4 fields:
+
+@multitable @columnfractions .05 .15 .80
+@item
+1 @tab @t{SFX} @tab indicates this is a suffix
+@item
+2 @tab @t{D} @tab is the name of the character which represents this suffix
+@item
+3 @tab @t{Y} @tab indicates it can be combined with prefixes (cross product)
+@item
+4 @tab @t{4} @tab indicates that sequence of 4 affix entries are needed to
+properly store the affix information
+@end multitable
+
+The remaining lines describe the unique information for the 4 affix
+entries that make up this affix.  Each line can be interpreted
+as follows: (note fields 1 and 2 are used as a check against line 1 info)
+
+@multitable @columnfractions .05 .15 .80
+@item
+1 @tab @t{SFX} @tab indicates this is a suffix
+@item
+2 @tab @t{D} @tab is the name of the character which represents this affix
+@item
+3 @tab @t{y} @tab the string of chars to strip off before adding affix (a 0
+here indicates the NULL string)
+@item
+4 @tab @t{ied} @tab the string of affix characters to add (a 0 here
+indicates the NULL string)
+@item
+5 @tab @t{[^aeiou]y} @tab the conditions which must be met before the affix
+can be applied
+@end multitable
+
+Field 5 is interesting.  Since this is a suffix, field 5 tells us that
+there are 2 conditions that must be met.  The first condition is that
+the next to the last character in the word must @emph{not} be any of the
+following "a", "e", "i", "o" or "u".  The second condition is that
+the last character of the word must end in "y".
+
+@subsection When Compared With Ispell
+
+Now for comparison purposes, here is the same information from the
+Ispell @file{english.aff} compression file which was used as the basis
+for the OOo one.
+
+@example
+flag *D:
+    E           >       D               # As in create > created
+    [^AEIOU]Y   >       -Y,IED          # As in imply > implied
+    [^EY]       >       ED              # As in cross > crossed
+    [AEIOU]Y    >       ED              # As in convey > conveyed
+@end example
+
+The Ispell information has exactly the same information but in a
+slightly different (case-insensitive) format:
+
+Here are the ways to see the mapping from Ispell .aff format to our
+OOo format.
+
+@enumerate
+@item
+The Ispell english.aff has flag D under the "suffix" section so
+you know it is a suffix.
+
+@item
+The D is the character assigned to this suffix
+
+@item
+@samp{*} indicates that it can be combined with prefixes
+
+@item
+Each line following the : describes the affix entries needed
+to define this suffix
+
+@itemize @bullet
+@item
+The first field is the conditions that must be met.
+@item
+The second field is after the > if a "-" occurs is the string to strip
+off (can be blank).
+@item
+The third field is the string to add (the affix)
+@end itemize
+@end enumerate
+
+In addition all chars in Ispell aff files are in uppercase.
+
+@subsection Specifying Affix Flags
+
+Affix flags are specified in the word list by specifying them after
+the @samp{/} character:
+
+@example
+@var{word}/@var{flags}
+@end example
+
+For example:
+
+@example
+create/DG
+@end example
+
+@noindent
+will associate the @samp{D} and @samp{G} flag with the word create.
+
+@node Controlling the Behavior of Run-together Words
+@section Controlling the Behavior of Run-together Words
+
+Aspell currently has support for unconditionally accepting run-together
+words.
+
+Support for unconditionally accepting run-together words can either be
+turned on in the language data file or as a normal option via the
+@option{run-together} option.  The @option{run-together-limit} options
+controls the maximum number of words that can be strung together, the
+default is normally 2.  The @option{run-together-min} options
+controls the minimum length of the individual components of the run
+together word, the default is normally 3.  Both the
+@option{run-together-limit} and @option{run-together-min} option may
+be specified in both the language data file or as a normal option.
+
+@c FIXME: Add note about compound word support when suggesting.
+
+@node Creating A New Character Set
+@section Creating A New Character Set
+
+If there is not a standard character set for your language then you
+can invent one.  The new charset will only be used by Aspell
+internally.  If the option @option{data-encoding} is set to
+@samp{utf-8}, and your current locale character type is always set to
+@samp{utf-8}, then you can use UTF-8 for everything and not
+worry yourself that an 8-bit character set is being used internally.
+If your language has no more than 210 distinct symbols, including
+different capitalizations and accents, then Aspell can support it.
+
+The first thing to do is to download the Aspell lang package 
+(@pxref{Creating An Official Dictionary Package})
+and check if one of the provided charsets in this package will suite
+your needs.  Non-standard character sets are provided for many scripts
+and languages.  If not, then see the included @file{README} file for
+instructions on creating a new one.  Version 0.1, and 0.2 of
+mkchardata @emph{will not} work as the format of the character data
+file has changed.
+
+@node Creating An Official Dictionary Package
+@section Creating An Official Dictionary Package
+
+Once you have a basic dictionary working, you should consider creating
+an official package so that it can be distributed with Aspell. To do
+so download the aspell-lang package available at
+@url{ftp://ftp.gnu.org/@/gnu/aspell/@/aspell-lang-@var{version}.tar.bz2}
+or in the ``aspell-lang'' module in the Aspell CVS repository
+available at @url{https://savannah.gnu.org@//cvs/?group=aspell}.  See
+the included @file{README} file for what to do.  Or, send mail to
+aspell-dict at gnu org asking for help on how to get started.
+
+@node Implementation Notes
+@appendix Implementation Notes
+
+@menu
+* Aspell Suggestion Strategy::  
+* Notes on 8-bit Characters::   
+@end menu
+
+@node Aspell Suggestion Strategy
+@appendixsec Aspell Suggestion Strategy
+
+The magic behind my spell checker comes from merging Lawrence Philips
+excellent metaphone algorithm and Ispell's near miss strategy which is
+inserting a space or hyphen, interchanging two adjacent letters,
+changing one letter, deleting a letter, or adding a letter.
+
+The process goes something like this.
+
+@enumerate
+@item
+Convert the misspelled word to its soundslike equivalent (its
+metaphone for English words).
+
+@item
+Find all words that have a soundslike within one or two edit distances
+from the original word's soundslike.  The edit distance is the total
+number of deletions, insertions, exchanges, or adjacent swaps needed
+to make one string equivalent to the other.  When set to only look for
+soundslikes within one edit distance it tries all possible soundslike
+combinations and checks if each one is in the dictionary.  When set to
+find all soundslike within two edit distances it scans through the
+entire dictionary and quickly scores each soundslike.  The scoring is
+quick because it will give up if the two soundslikes are more than two
+edit distances apart.
+
+@item
+Find misspelled words that have a correctly spelled replacement by the
+same criteria of step number 2 and 3.  That is the misspelled word in
+the word pair (such as ``teh -> the'') would appear in the suggestions
+list as if it was a correct spelling.
+
+@item
+Score the result list and return the words with the lowest score.  The
+score is roughly the weighed average of the weighed edit distance of
+the word to the misspelled word and the soundslike equivalent of the
+two words.  The weighted edit distance is like the edit distance
+except that the various edits have weights attached to them.
+
+@item
+Replace the misspelled words that have correctly spelled replacements
+with their replacements and remove any duplicates that might arise
+because of this.
+@end enumerate
+
+Please note that the soundslike equivalent is a rough approximation of
+how the words sounds.  It is not the phoneme of the word by any means.
+For more details about exactly how each step is performed please see
+the file @file{suggest.cc}.  For more information on the metaphone
+algorithm please see the data file @file{english_phonet.dat}.
+
+@node Notes on 8-bit Characters
+@appendixsec Notes on 8-bit Characters
+
+There is a very good reason I use 8-bit characters in Aspell. Speed
+and simplicity. While many parts of my code can fairly easily be
+converted to some sort of wide character as my code is clean. Other
+parts cannot be.
+
+One of the reasons why is because in many, many places I use a direct
+lookup to find out various information about characters. With 8-bit
+characters this is very feasible because there is only 256 of
+them. With 16-bit wide characters this will waste a LOT of space. With
+32-bit characters this is just plain impossible. Converting the lookup
+tables to another form is certainly possible but degrades performance
+significantly.
+
+Furthermore, some of my algorithms rely on words consisting only on a
+small number of distinct characters (often around 30 when case and
+accents are not considered). When the possible character can consist
+of any Unicode character this number becomes several thousand, if
+that. In order for these algorithms to still be used, some sort of
+limit will need to be placed on the possible characters the word can
+contain. If I impose that limit, I might as well use some sort of
+8-bit characters set which will automatically place the limit on what
+the characters can be.
+
+There is also the issue of how I should store the word lists in
+memory? As a string of 32 bit wide characters. Now that is using up 4
+times more memory than characters would and for languages that can fit
+within an 8-bit character that is, in my view, a gross waste of
+memory. So maybe I should store them is some variable width format
+such as UTF-8. Unfortunately, way, way too many of the algorithms will
+simply not work with variable width characters without significant
+modification which will very likely degrade performance. So the
+solution is to work with the characters as 32-bit wide characters and
+then convert it to a shorter representation when storing them in the
+lookup tables. Now that can lead to an inefficiency. I could also use
+16 bit wide characters, however that may not be good enough to hold all
+future versions of Unicode and therefore has the same problems.
+
+As a response to the space waste used by storing word lists in some
+sort of wide format some one asked:
+
+@quotation
+Since hard drives are cheaper and cheaper, you could store a dictionary
+in a usable (uncompressed) form and use it directly with memory
+mapping. Then the efficiency would directly depend on the disk caching
+method, and only the used part of the dictionaries would really be
+loaded into memory. You would no more have to load plain dictionaries
+into main memory, you'll just want to compute some indexes (or
+something like that) after mapping.
+@end quotation
+
+However, the fact of the matter is that most of the dictionary will be
+read into memory anyway if it is available. If it is not available
+then there would be a good deal of disk swaps. Making characters
+32-bit wide will increase the chance that there are more disk swaps.
+So the bottom line is that it is more efficient to convert characters
+from something like UTF-8 into some sort of 8-bit character. I could
+also use some sort of disk space lookup table such as the Berkeley
+Database. However this will @strong{definitely} degrade performance.
+
+The bottom line is that keeping Aspell 8-bit internally is a very well
+though out decision that is not likely to change any time soon. Feel
+free to challenge me on it, but, don't expect me to change my mind
+unless you can bring up some point that I have not thought of before
+and quite possibly a patch to solve cleanly convert Aspell to Unicode
+internally without a serious performance lost OR serious memory usage
+increase.
+
+@node Languages Which Aspell can Support
+@appendix Languages Which Aspell can Support
+
+Even though Aspell will remain 8-bit internally it should still be
+able to support any written languages not based on a logographic
+script.  The only logographic writing system in current use are those
+based on h@`anzi which includes Chinese, Japanese, and sometimes Korean.
+
+@menu
+* Supported::                   
+* Unsupported::                 
+* Multiple Scripts::            
+* Planned Dictionaries::        
+* References::                  
+@end menu
+
+@node Supported
+@appendixsec Supported
+
+Aspell 0.60 should be able to support the following languages:
+
+@include lang-supported.texi
+
+Dictionaries marked as @dfn{0.50} are available for Aspell 0.50.  Ones
+marked as @dfn{0.60} are available for Aspell 0.60 only.  Ones marked as
+@dfn{Planned} should eventually be available.  Ones marked as
+@dfn{Maybe} might be available in the future.
+@xref{Planned Dictionaries}, for more info.
+
+@appendixsubsec Notes on Latin Languages
+
+Any word that can be written using one of the Latin ISO-8859 character
+sets (ISO-8859-1,2,3,4,9,10,13,14,15,16) can be written, in decomposed
+form, using the ASCII characters, the 23 additional letters:
+
+@example
+U+00C6 LATIN CAPITAL LETTER AE
+U+00D0 LATIN CAPITAL LETTER ETH
+U+00D8 LATIN CAPITAL LETTER O WITH STROKE
+U+00DE LATIN CAPITAL LETTER THORN
+U+00DE LATIN SMALL LETTER THORN
+U+00DF LATIN SMALL LETTER SHARP S
+U+00E6 LATIN SMALL LETTER AE
+U+00F0 LATIN SMALL LETTER ETH
+U+00F8 LATIN SMALL LETTER O WITH STROKE
+U+0110 LATIN CAPITAL LETTER D WITH STROKE
+U+0111 LATIN SMALL LETTER D WITH STROKE
+U+0126 LATIN CAPITAL LETTER H WITH STROKE
+U+0127 LATIN SMALL LETTER H WITH STROKE
+U+0131 LATIN SMALL LETTER DOTLESS I
+U+0138 LATIN SMALL LETTER KRA
+U+0141 LATIN CAPITAL LETTER L WITH STROKE
+U+0142 LATIN SMALL LETTER L WITH STROKE
+U+014A LATIN CAPITAL LETTER ENG
+U+014B LATIN SMALL LETTER ENG
+U+0152 LATIN CAPITAL LIGATURE OE
+U+0153 LATIN SMALL LIGATURE OE
+U+0166 LATIN CAPITAL LETTER T WITH STROKE
+U+0167 LATIN SMALL LETTER T WITH STROKE
+@end example
+
+and the 14 modifiers:
+
+@example
+U+0300 COMBINING GRAVE ACCENT
+U+0301 COMBINING ACUTE ACCENT
+U+0302 COMBINING CIRCUMFLEX ACCENT
+U+0303 COMBINING TILDE
+U+0304 COMBINING MACRON
+U+0306 COMBINING BREVE
+U+0307 COMBINING DOT ABOVE
+U+0308 COMBINING DIAERESIS
+U+030A COMBINING RING ABOVE
+U+030B COMBINING DOUBLE ACUTE ACCENT
+U+030C COMBINING CARON
+U+0326 COMBINING COMMA BELOW
+U+0327 COMBINING CEDILLA
+U+0328 COMBINING OGONEK
+@end example
+
+Which is a total of 37 additional Unicode code points.
+
+All ISO-8859 character leaves the characters 0x00 - 0x1F, and 0x80 -
+0x9F unmapped as they are generally used as control characters.  Of
+those, 0x01 - 0x0F, 0x11 - 0x1F and 0x80 - 0x9F may be mapped to
+anything in Aspell.  This is a total of 62 characters which can be
+remapped in any ISO-8859 character set.  Thus, by remapping 37 of the 62
+characters to the previously specified Unicode code-points, any modified
+ISO-8859 character set can be used for any Latin languages covered by
+ISO-8859.  Of course decomposing every single accented character wastes
+a lot of space, so only characters that cannot be represented in the
+precomposed form should be broken up.  By using this trick it is
+possible to store foreign words in the correctly accented form in the
+dictionary even if the precomposed character is not in the current
+character set.
+
+Any letter in the Unicode range U+0000 - U+0249, U+1E00 - U+1EFF (Basic
+Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B, and Latin
+Extended Additional) can be represented using around 175 basic letters,
+and 25 modifiers which is less than 210 and can thus fit in an Aspell
+8-bit character set.  Since this Unicode range covers any possible Latin
+language this special character set can be used to represent any word
+written using the Latin script if so desired.
+
+@appendixsubsec Syllabic
+
+Syllabic languages use a separate symbol for each syllable of the
+language.  Even thought most of them have more than 210 distinct
+symbols Aspell can still support them by breaking them up.
+
+@appendixsubsubsec The Ethiopic Syllabary
+
+Even though the Ethiopic script has more than 210 distinct characters
+Aspell can still handle it.  The idea is to split each character into
+two parts based on the Consonant and Vowel parts.  This encoding of the
+syllabary is far more useful to Aspell than if they were stored in UTF-8
+or UTF-16.  In fact, the exiting suggestion strategy of Aspell will work
+well with this encoding without any additional modifications.  However,
+additional improvements may be possible by taking advantage of the
+consonant-vowel structure of this encoding.
+
+In fact, the split consonant-vowel representation may prove to be so
+useful that it may be beneficial to encode other syllabary in this
+fashion, even if they are less than 210 of them.
+
+The code to break up a syllabary into the consonant-vowel part is part
+of the Unicode normalization process.
+
+@appendixsubsubsec The Yi Syllabary
+
+A very large syllabary with 819 distinct symbols.  However, like
+Ethiopic, it should be possible to support this script by breaking it
+up.
+
+@appendixsubsubsec The Ojibwe Syllabary
+
+With only 120 distinct symbols, Aspell can actually support this one as
+is.  However, as previously mentioned, it may be beneficial to break it
+up into the consonant-vowel representation anyway.
+
+@node Unsupported
+@appendixsec Unsupported
+
+These languages, when written in the given script, are currently
+unsupported by Aspell for one reason or another.
+
+@include lang-unsupported.texi
+
+@appendixsubsec The Thai, Khmer, and Lao Scripts
+
+The Thai, Khmer, and Lao scripts presents a different problem for
+Aspell.  The problem is not that there are more than 210 unique symbols,
+but that there are no spaces between words.  This means that there is no
+easy way to split a sentence into individual words.  However, it is
+still possible to spell check these scripts, it is just a lot more
+difficult.  I will be happy to work with someone who is interested in
+adding Thai, Khmer, or Lao support to Aspell, but it is not likely
+something I will do on my own in the foreseeable future.
+
+@appendixsubsec Languages which use H@`anzi Characters
+
+H@`anzi Characters are used to write Chinese, Japanese, Korean, and were
+once used to write Vietnamese.  Each h@`anzi character represents a
+syllable of a spoken word and also has a meaning.  Since there are
+around 3,000 of them in common usage it is unlikely that Aspell will
+ever be able to support spell checking languages written using h@`anzi
+until full Unicode support is implemented.  However, I am not even sure
+if these languages need spell checking since h@`anzi characters are
+generally not entered in directly.  Furthermore even if Aspell could
+spell check h@`anzi the existing suggestion strategy will not work well
+at all, and thus a completely new strategy will need to be developed.
+However, if it is the case that h@`anzi needs to be spell checked and
+you know something about the issues involved please fell free to contact
+me.
+
+@appendixsubsec Japanese
+
+Modern Japanese is written in a mixture of @dfn{hiragana},
+@dfn{katakana}, @dfn{kanji}, and sometimes @dfn{romaji}.  @dfn{Hiragana}
+and @dfn{katakana} are both syllabaries unique to Japan, @dfn{kanji} is
+a modified form of h@`anzi, and @dfn{romaji} uses the Latin alphabet.
+With some work, Aspell should be able to check the non-kanji part of
+Japanese text.  However, based on my limited understanding of Japanese
+hiragana is often used at the end of kanji.  Thus if Aspell was to
+simply separate out the hiragana from kanji it would end up with a lot
+of word endings which are not proper words and will thus be flagged as
+misspellings.  However, this can be fairly easily rectified as text is
+tokenized into words before it is converted into Aspell's internal
+encoding.  In fact, some Japanese text is written in entirely in one
+script.  For example books for children and foreigners are sometimes
+written entirely in hiragana.  Thus, Aspell, in its current state, could
+prove at least somewhat useful for spell checking Japanese.
+
+@appendixsubsec Hangul
+
+Korean is generally written in hangul or a mixture of han and hangul.  In
+Hangul letters individual letters, known as jamo, are grouped together
+in syllable blocks.  Unicode allows Hangul to be stored in one of three
+ways, (A) Individual jamo letters (Hangul Compatibility Jamo, U+3130 -
+U+318F), (D) decomposed jamo (Hangul Jamo, U+1100 - U+11FF), and (C)
+precoposed sylable blocks (Hangul Syllables, U+AC00 - U+D7AF).  In order
+for Aspell to work with Hangul it needs to be form A.  Unfortunately the
+existing Normalization code in Aspell will not be able to adequately
+deal with converting Hangul from form D and C to form A and back again.
+However, once this code is written, Aspell should be able to spell check
+Hangul without any problem.
+
+@node Multiple Scripts
+@appendixsec Languages Written in Multiple Scripts
+
+Aspell should be able to check text written in the same language but
+in multiple scripts with some work.  If the number of unique symbols
+in both scripts is less than 210, then a special character set can be
+used to allow both scripts to be encoded in the same dictionary.
+However this may not be the most efficient solution.  An alternate
+solution is to store each script in its own dictionary and allow
+Aspell to choose the correct dictionary based on which script the
+given word is written in.  Aspell currently does not support this mode
+of spell checking but it is something that I hope to eventually
+support.
+
+@node Planned Dictionaries
+@appendixsec Notes on Planned Dictionaries
+
+According to
+@uref{http://wiki.services.openoffice.org/@/wiki/Dictionaries}, Open
+Office dictionaries are available for the following languages, but no
+corresponding Aspell dictionary exists:
+
+@include oo-only.texi
+
+@noindent
+If you are interested in converting any of them please coordinate your
+efforts with the dictionary author and submit it to 
+aspell-dict at gnu org when you have something ready.
+
+An unofficial dictionary for Albanian (sq) is available at
+@uref{http://psychology.rutgers.edu/@/~zaimi/software.html}.  However,
+I can not find any contact information for the author, thus I have
+been unable to contact him.  In addition an Albanian (sq) dictionary
+is available for Ispell at
+@uref{http://@/www.7kosova.com/kde-shqip/@/ispell/ispell.html}.  
+However, the raw word list is not provided and the author has not
+been responding to emails, possibly because he doesn't speak English.
+If you have any additional information on either of these dictionaries,
+or can speak Albanian and can translate for me please let me know at
+@email{kevina@@gnu.org}
+
+An unofficial dictionary for Malayalam (ml) is available at
+@uref{http://in.geocities.com/@/paivakil/downloads/aspell/}.
+I am working with the author to create an official one.
+
+Kevin Patrick Scannell has word lists available for the following
+languages based on his web crawling software
+(@uref{http://borel.slu.edu/crubadan/}) but needs someone to proofread
+them:
+
+@include crubadan.texi
+
+@noindent
+If you are interested, please contact him at scannell at slu edu.
+
+A dictionary marked as "Planned" or "Maybe" but not listed in
+the section means that someone has expressed an interest in creating
+one.  If you are interested in helping please contact me at
+@email{kevina@@gnu.org} so that I can put you in touch with them.
+
+@node References
+@appendixsec References
+
+The information in this chapter was gathered from numerous sources,
+including:
+
+@itemize
+
+@item
+ISO 639-2 Registration Authority,
+@uref{http://www.loc.gov/@/standards/iso639-2/}
+
+@item
+Languages and Scripts (Official Unicode Site),
+@uref{http://www.unicode.org/@/onlinedat/languages-scripts.html}
+
+@item
+Omniglot - a guide to written language, @uref{http://www.omniglot.com/}
+
+@item
+Wikipedia - The Free Encyclopedia, @uref{http://wikipedia.org/}
+
+@item
+Ethnologue - Languages of the World,
+@uref{http://www.ethnologue.com/}
+
+@item
+World Languages - The Ultimate Language Store,
+@uref{http://www.worldlanguage.com/}
+
+@item
+South African Languages Web,
+@uref{http://www.languages.web.za/}
+
+@item
+The Languages and Writing Systems of Africa (Global Advisor Newsletter),
+@uref{http://www.intersolinc.com/@/newsletters/africa.htm}
+
+@end itemize
+
+Special thanks goes to Era Eriksson for helping me with the information in
+this chapter.
+
+@node Language Related Issues
+@appendix Language Related Issues
+
+Here are some language related issues that a good spell checker needs to
+handle.  If you have any more information about any of these issues, or
+of a new issue not discussed here, please email me at
+@email{kevina@@gnu.org}.
+
+@menu
+* Compound Words::              
+* Words With Symbols in Them::  
+* Unicode Normalization::       
+* German Sharp S::              
+* Context Sensitive Spelling::  
+@end menu
+
+@node Compound Words
+@appendixsec Compound Words
+
+In some languages, such as German, it is acceptable to string two words
+together, thus forming a compound word.  However, there are rules to
+when this can be done.  Furthermore, it is not always sufficient to
+simply concatenate the two words.  For example, sometimes a letter is
+inserted between the two words.  Aspell currently has support for
+unconditionally stringing words together.  I tried implementing more
+sophisticated support for compound words in Aspell but it was too
+limiting and no one used it.
+
+After receiving feedback from several people it seems that acceptable
+support for compound words involved two basically independent parts.
+If this is not sufficient for your language please let me know.
+
+@heading Part One
+
+Describes how the word needs to be changed when forming a compound
+
+@example
+CMP <flag> <strip> <add> <cond> <cond2>
+
+<flag>  is the compound flag
+<strip> is the string to strip or 0 for the null string
+<add>   is the string to add or 0 for the null string
+<cond>  is the condition to match at the end of the current word
+<cond2> is the condition to match at the beginning of the next word
+@end example
+
+@noindent
+All but the last field are the same as a suffix entry in the existing
+affix code.
+
+<cond> is a simplified regular expression.  Some examples:
+@example
+. (for anything)
+e
+[^aeiou]y
+[^ey]
+[aeiou]y
+@end example
+
+It does not seem necessary to change the beginning of a word when
+forming compounds
+
+@heading Part Two
+
+Describes the position a word can appear in (beginning, middle, or
+end) and with which words.
+
+To do this each word can be assigned a category.  Then each category
+can be given a set of rules to describe how it can be used in a
+compound word for example
+
+@example
+A + B: indicates that category A may appear at the beginning of a
+  word when followed by a category B word.  When combined it is then
+  considered a category B word.
+A + C + B: here a C word may only appear between an A or B word
+A + A + B
+A + A
+A + A + A
+etc..
+@end example
+
+I have not decided if a word should be allowed to belong to more than
+one category as a new category can be created in necessary to mean
+words in both category A and B for example.
+
+@appendixsubsec To Implement
+
+To implement support for compound words based on the above description
+the following will need to be done:
+
+@enumerate
+
+@item
+expand the affix code to support special compound flags as
+described in part one
+
+@item
+write code to store the conditions as described in part two
+
+@item
+expand the compound checking code to check against the conditions
+
+@item
+expand the dictionary format to store the necessary compound info
+with the word
+
+@end enumerate
+
+I don't know when I will be able to actually implement this.  If you
+would like to try please let me know.
+
+@node Words With Symbols in Them
+@appendixsec Words With Spaces or Other Symbols in Them
+
+Many languages, including English, have words with non-letter symbols in
+them.  For example the apostrophe.  These symbols generally appear in
+the middle of a word, but they can also appear at the end, such as in an
+abbreviation.  If a symbol can @emph{only} appear as part of a word then
+Aspell can treat it as if it were a letter.
+
+However, the problem is most of these symbols have other uses.  For
+example, the apostrophe is often used as a single quote and the
+abbreviations marker is also used as a period.  Thus, Aspell cannot
+blindly treat them as if they were letters.
+
+Aspell currently handles the case where the symbol can only appear in
+the middle of the word fairly well.  It simply assumes that if there is
+a letter both before and after the symbol than it is part of the word.
+This works most of the time but it is not fool proof.  For example,
+suppose the user forgot to leave a space after the period:
+
+@display
+  @dots{} and the dog went up the tree.Then the cat @dots{}
+@end display
+
+@noindent
+Aspell would think ``tree.Then'' is one word.  A better solution
+might be to then try to check ``tree'' and ``Then'' separately.
+But what if one of them is not in the dictionary?  Should Aspell assume
+``tree.Then'' is one word?
+
+The case where the symbol can appear at the beginning or end of the word
+is more difficult to deal with.  The symbol may or may not actually be
+part of the word.  Aspell currently handles this case by first trying to
+spell check the word with the symbol and if that fails, try it without.
+The problem is, if the word is misspelled, should Aspell assume the
+symbol belongs with the word or not?  Currently Aspell assumes it does,
+which is not always the correct thing to do.
+
+Numbers in words present a different challenge to Aspell.  If Aspell
+treats numbers as letters then every possible number a user might write
+in a document must be specified in the dictionary.  This could easily
+be solved by having special code to assume all numbers are correctly
+spelled.  Yet, what about something like ``4th''.  Since the ``th''
+suffix can appear after any number we are left with the same
+problem.  The solution would be to have a special symbol for ``any
+number''.
+
+Words with spaces in them, such as foreign phrases, are even more
+trouble to deal with.  The basic problem is that when tokenizing a
+string there is no good way to keep phrases together. One solution is to
+use trial and error.  If a word is not in the dictionary try grouping it
+with the previous or next word and see if the combined word is in the
+dictionary.  But what if the combined word is not, should the misspelled
+word be grouped when looking for suggestions?  One solution is to also
+store each part of the phrase in the dictionary, but tag it as part of a
+phrase and not an independent word.
+
+To further complicate things, most applications that use spell checkers
+are accustom to parsing the document themselves and sending it to the
+spell checker a word at a time.  In order to support words with spaces in
+them a more complicated interface will be required.
+
+@node Unicode Normalization
+@appendixsec Unicode Normalization
+
+Because Unicode contains a large number of precomposed characters there
+are multiple ways a character can be represented.  For example letter
+@"o can either be represented as
+
+@example
+U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+@exdent or
+U+0061 LATIN SMALL LETTER O + U+0308 COMBINING DIAERESIS
+@end example
+
+By performing normalization first, Aspell will only see one of these
+representations.  The exact form of normalization depends on the
+language.  Give the choice of:
+
+@enumerate
+@item Precomposed character
+@item Base letter + combining character(s)
+@item Base letter only
+@end enumerate
+
+@noindent
+if the precomposed character is in the target character set, then (1),
+if both base and combining character is present, then (2), otherwise (3).
+
+Unicode Normalization is now implemented in Aspell 0.60.
+
+@node German Sharp S
+@appendixsec German Sharp S
+
+The German Sharp S or Eszett does not have an uppercase equivalent.
+Instead when @samp{@ss{}} is converted to @samp{SS}.  The conversion of
+@samp{@ss{}} to @samp{SS} requires a special rule, and increases the
+length of a word, thus disallowing inplace case conversion.
+Furthermore, my general rule of converting all words to lowercase before
+looking them up in the dictionary won't work because the conversion of
+@samp{SS} to lowercase is ambiguous; it can be @samp{ss} or
+@samp{@ss{}}.  I do plan on dealing with this eventually.
+
+@node Context Sensitive Spelling
+@appendixsec Context Sensitive Spelling
+
+In some language, such as Luxembourgish, the spelling of a word depends
+on which words surround it.  For example the the letter @samp{n} at the
+end of a word will disappear if it is followed by another word starting
+with a certain letter such as an @samp{s}.  However, it can probably get
+more complicated than that.  I would like to know how complicated before
+I attempt to implement support for context sensitive spelling.
+
+@node To Do
+@appendix To Do
+
+@menu
+* Important Items::             
+* Other Items::                 
+* Notes on Various Items::      
+@end menu
+
+@node Important Items
+@appendixsec Important Items
+
+Words in bold indicate how you should refer to the item when
+discussing it with me or others.
+
+@appendixsubsec Things that need to be done
+
+These items need to be done before I consider Aspell finished. If you
+are interested in helping me with one of these tasks please email
+me. Good C++ skills are needed for most of these tasks involving
+coding.
+
+@itemize @bullet
+@item
+Create a generic filter to handle multi-character letters such as
+@samp{"a} or @samp{\"a} for @"a.  This filter should make use of the
+already exiting normalization code if possible.
+@item
+Make Aspell @strong{Thread safe}. Even though Aspell itself is not
+multi-threaded I would like it to be thread safe so that it can be
+used by multi-threaded programs. There are several areas of Aspell
+that are potentially thread unsafe (such as accessing a global pool)
+and several classes which have the potential of being used by more
+than one thread (such as the personal dictionary). @emph{[In
+Progress]}.
+@item
+Enhance @strong{ispell.el} so that it will work better with GNU
+Aspell.  @emph{[In Progress]}.
+@item
+Clean up copyright notices and bring the Aspell package up to
+@strong{GNU Standards}. @emph{[In Progress]}.
+@end itemize
+
+@appendixsubsec Things I would like to get done
+
+I would like to get these done. However, I may still consider Aspell
+finished without. They will probably eventually get
+implemented. However, I could still use help with them.
+
+@itemize @bullet
+@item
+Better support for @strong{compound words}. The support for
+@emph{conditional} compound words found in Aspell versions 0.50
+and earlier is no longer available since no one seems to be using
+it. Support for @emph{unconditional} compound words is still 
+available. @xref{Compound Words}.
+@item
+Be able to accept @strong{words with spaces in them} as many languages
+have words, such as a word in a foreign phrase, which only makes sense
+when followed by other words. @xref{Words With Symbols in Them}.
+@item
+Reorganize manual to make it easier to understand and to make it
+possible to break out useful man pages.
+@item
+Support @strong{soundslike lookup with affix compression}.  I think it
+is possible, although I don't know how effective it will be.  The basic
+idea is to affix compress the soundslike codes and then match the
+codes up with affix compressed words.  If you are interested,
+email @email{aspell-devel@@gnu.org}, and I will explain it in more
+detail.
+@item
+Use Lawrence Philips' new @strong{Double Metaphone algorithm}. See
+@uref{http://aspell.net/@/metaphone/}. The main task involved
+here is converting the algorithm into table form. This will take some
+time but there is no real programming experience required. If you want
+to help with Aspell but don't have any real programming experience,
+this would be a great place to start.
+@item
+Rank suggestions based on @strong{frequency information}.  Both global
+frequency and document specific frequency can be used.  The latter will
+require that the whole document be made available to the spell checker.
+Also use frequency information to flag words which are found in the
+dictionary but not in common usage, and thus might not be what was
+intended.
+@item
+Support a @strong{"dual-script" mode} where Aspell can use a separate
+dictionary depending on which script it detects the current word in, the
+two dictionaries can have nothing in common, ie an English one and a
+Russian one for example.  This will @emph{not} support two languages that
+use the same script as that is a lot more complicated.  For example if
+the word is misspelled which dictionary should it use for the
+suggestions?
+@item
+Write a @strong{GUI} for the Aspell utility. Ideally it should be able to do
+everything the Aspell utility can do and not just be able spell check
+a document.
+@item
+Develop a @strong{more powerful C API} for Aspell.  Ideally this API should
+allow one to perform all the tasks the Aspell utility can do.  This
+included the ability to check whole documents, and create
+dictionaries, among other things.  
+@item
+Create a @strong{C++ interface} for Aspell, possibly on top of the C one.
+
+@end itemize
+
+@node Other Items
+@appendixsec Other Items
+
+These items all sound like good ideas however I am not sure when I
+will get to implementing them if ever.  Words in bold indicate how you
+should refer to the item when discussing it with me or others.
+
+@itemize @bullet
+@item
+Come up with a plug-in for @command{gEdit} the gnome text editor.
+
+@item
+Change languages (and thus dictionaries) based on the information in
+the actual document.
+
+@item
+Come up with a mode that will skip words based on the symbols that
+(almost) always surround the word.  @xref{Word skipping by context}.
+
+@item
+Create two @strong{server modes} for Aspell.  One that uses the DICT
+protocol and one that uses @command{ispell -a} method of communication
+via some arbitrary port.
+
+@item
+Come up with @strong{thread safe personal dictionaries}.
+
+@item
+Use the @strong{Hidden Markov Model} to base the suggestions on not
+only the word itself but on the context around the word. @xref{Hidden
+Markov Model}.
+
+@item
+Having a way to @strong{email the personal dictionary} and/or
+replacement list to a particular address either periodically or when
+it grows to a certain size. @xref{Email the Personal Dictionary}.
+@end itemize
+
+The following good ideas were found in the Ispell @file{WISHES} file
+so I thought I would pass them on.
+
+@itemize @bullet
+@item
+Ispell should be smart enough to ignore hyphenation signs, such as the
+@TeX{} @samp{\-} hyphenation indicator.
+
+@item
+(Jeff Edmonds) The personal dictionary should be able to remove
+certain words from the master dictionary, so that obscure words like
+"wether" wouldn't mask favorite typos.
+
+@item
+(Jeff Edmonds) It would be wonderful if Ispell could correct inserted
+spaces such as "th e" for "the" or even "can not" for "cannot".
+
+@item
+Since Ispell has dictionaries available to it, it is conceivable that
+it could automatically determine the language of a particular file by
+choosing the dictionary that produced the fewest spelling errors on
+the first few lines.
+@end itemize
+
+@node Notes on Various Items
+@appendixsec Notes on Various Items
+
+@menu
+* Word skipping by context::    
+* Hidden Markov Model::         
+* Email the Personal Dictionary::  
+@end menu
+
+@node  Word skipping by context
+@appendixsubsec Word skipping by context
+
+This was posted on the Aspell mailing list on January 1, 1999:
+
+I had an idea on a great general way to determine if a word should be
+skipped.  Determine the words to skip based on the symbols that
+(almost) always surround the word.
+
+For example when asked to check the following C++ code:
+@example
+cout << "My age is: " << num << endl;
+cout << "Next year I will be " << num + 1 << endl;
+@end example
+
+@code{cout}, @code{num}, and @code{endl} will all be skipped.
+@code{cout} will be skipped because it is always preceded by a
+@samp{<<}.  @code{num} will be skipped because it is always preceded
+by a @samp{<<}.  And @code{endl} will be skipped because it is always
+between a @samp{<<} and a @samp{;}.
+
+Given the following HTML code.
+@example
+<table width=50% cellspacing=0 cellpadding=1>
+<tr><td>One<td>Two<td>Three
+<tr><td>1<td>2<td>3
+</table>
+
+<table cellspacing=0 cellpadding=1>
+</table>
+@end example
+
+@code{table}, @code{width} @code{cellspacing}, @code{cellpadding},
+@code{tr}, @code{td} will all be skipped because they are always
+enclosed in @samp{<>}.  Now of course @code{table} and
+@code{width} would be marked as correct anyway however there is no
+harm in skipping them.
+
+So I was wondering if anyone on this list has any experience in
+writing this sort of context recognition code or could give me some
+pointers in the right direction.
+
+This sort of word skipping will be very powerful if done right.  I
+imagine that it could replace specific spell checker modes for @TeX{},
+Nroff, SGML etc because it will automatically be able to figure out
+where it should skip words.  It could also probably do a very good job
+on programming languages code.
+
+If you are interested in helping me out with this or just have general
+comments about the idea please let me know.
+
+@node Hidden Markov Model
+@appendixsubsec Hidden Markov Model
+
+Knud Haugaard S@o{}rensen suggested this one.  From his email on the
+Aspell mailing list:
+
+consider these examples:
+
+@example
+a fone number.
+ -> a phone number.
+
+a fone dress.
+ -> a fine dress.
+@end example
+
+the example illustrates that the right correction might depend on the
+context of the word.
+
+So I suggested that you take a look on HMM to solve this problem.
+
+This might also provide a good base to include grammar correction in
+Aspell.
+
+see this link
+@uref{http://www.cse.ogi.edu/CSLU/HLTsurvey/ch1node7.html}.
+
+I think it is a great idea.
+ However unfortunately it will probably be very complicated to implement.
+ Perhaps in the far future.
+
+@node Email the Personal Dictionary
+@appendixsubsec Email the Personal Dictionary
+
+Someone suggested in a personal email:
+
+@quotation
+Have you thought of adding a function to Aspell, that - when the
+personal dictionary has grown significantly - sends the user's
+personal dictionary to the maintainer of the corresponding Aspell
+dictionary? (if the user allows it)
+
+It would be a very useful service to the dictionary maintainers, and I
+think most users can see their benefit in it too.
+@end quotation
+
+And I replied:
+
+@quotation
+Yes I have considered something like that but not for the personal
+dictionaries but rather the replacement word list in order to get
+better test data for @uref{http://aspell.sourceforge.net/test/}.
+@end quotation
+
+The problem is I don't know of a good way to do this since Aspell can
+also be used as a library.  It also is not a real high priority,
+especially since I would first need to learn how to send email within
+a C++ program.
+
+@c @node Installing
+@c @appendix Installing
+
+@include readme.texi
+
+@node ChangeLog
+@appendix ChangeLog
+
+@heading Changes from 0.60.6 to 0.60.6.1 (July 4, 2011)
+@itemize @bullet
+@item
+Update to Automake 1.10.3.
+@item
+Fix a bug which caused a race condition (leading to a likely crash)
+when two threads try to update the dictionary cache at the same time.
+@item
+Make it very clear that compiling Aspell with NDEBUG is a bad idea
+(see @uref{http://aspell.net/ndebug.html}) by outputting a
+warning when building with NDEBUG defined.
+@item
+Numerous other minor updates and bug fixes.
+@end itemize
+
+@heading Changes from 0.60.5 to 0.60.6 (April 16, 2007)
+@itemize @bullet
+@item
+Compile fixes for Gcc 4.3.
+@item
+Updated to Libtool 2.2.2 and Automake 1.10.1
+@item
+Minor tweak to suggestion code which improved suggestion results in
+certain cases.
+@item
+Always line buffer stdout and stderr in the Aspell utility when there is 
+the potential for it to be used interactively through a pipe.
+@item
+Removed debug output in @command{aspell munch-list}.
+@item
+Other minor updates and bug fixes.
+@end itemize
+
+@heading Changes from 0.60.4 to 0.60.5 (December 18, 2006)
+@itemize @bullet
+@item
+Compile fix for Gcc 4.1
+@item
+Updated to Gettext 0.16.1, Libtool 1.5.22, Automake 1.10, Autoconf 2.61
+@item
+Documentation improvements, including an updated @command{man} page.
+@item
+Complain if more than one file is specified when checking files using
+the @command{aspell check} command, rather than ignoring the other files.
+@item
+Large number of bug fixes.
+@end itemize
+
+@heading Changes from 0.60.3 to 0.60.4 (October 19, 2005)
+@itemize @bullet
+@item
+Fixed a bug that caused Aspell to crash when checking certain Russian
+words, this bug likely affected other languages as well.
+@item
+Updated to Gettext 0.14.5 which is required for AMD64, also updated to
+to Libtool 1.5.20.
+@item
+Fixed an alignment bug which caused mmap to always fail when reading
+in dictionaries.
+@item
+Added note about how @command{make clean} will remove the HTML manuals.
+@item
+Added manual page for prezip-bin and enhanced word-list-compress manual
+page thanks to the work of Jose Da Silva.
+@item
+Other minor updates and bug fixes.
+@end itemize
+
+@heading Changes from 0.60.2 to 0.60.3 (June 28, 2005)
+
+@itemize @bullet
+@item
+Fixed bugs involving several of the C API functions.
+@item
+Fixed bug where @samp{ultra} or @samp{fast} mode would not return any
+suggestions when soundslike lookup was not used.
+@item
+Made a minor, yet significant, optimization to the suggestion code.
+This sped things up by an order of magnitude in some cases.
+@item
+Avoid using the slow ngram scan except when the @option{sug-mode} is 
+@samp{slow} or @samp{bad-speller}.
+@item
+Fixed a bug in curses mode which caused word-wrap to not work
+correctly in some cases.
+@item
+Fixed a bug in pipe mode with a missing newline.
+@item
+Fixed the @command{spell} compatibility script.
+@item
+Several other minor bugs fixed.
+@item
+Made note about the change in behavior of the @option{-l} command line
+switch.
+@item
+Other manual update/fixes.
+@item
+Updated to Libtool 1.5.18, Automake 1.9.6, and Makeinfo 4.8.
+@end itemize
+
+@heading Changes from 0.60.1 to 0.60.2 (December 18, 2004)
+
+@itemize @bullet
+@item
+Added the @command{munch-list} command to the Aspell utility.  The
+@command{munch} program in the @file{myspell/} directory will
+disappear in Aspell 0.61.  The @command{munchlist} script will also
+likely disappear or be replaced when Aspell 0.61 is released since it
+doesn't work correctly anyway.
+@item
+Several important bug fixes some of which rendered some non-English
+languages unusable.
+@item
+Other minor changes.
+@end itemize
+
+@heading Changes from 0.60.1 to 0.60.1.1 (November 20, 2004)
+
+@itemize @bullet
+@item
+Fix bug involving checking of capitalized word when affix compression
+is used.
+@item
+Compile fixes.
+@item
+Added an option to disable using the ``wide'' curses version in case it
+causes compile problems.
+@item
+Minor manual updates
+@item
+Avoided including some unnecessary files in the distribution.
+@end itemize
+
+@heading Changes from 0.60 to 0.60.1 (November 7, 2004)
+
+@itemize @bullet
+@item
+Lots of compile fixes for various platforms.
+@item
+Miscellaneous bug fixes.
+@item
+Added Nroff filter thanks to Sergey Poznyakoff.
+@item
+The default filter mode when in pipe mode is now nroff for compatibility with
+Ispell.
+@item
+Added Texinfo filter.
+@item
+Added a section detailing the differences between Ispell and Aspell.
+@item
+Updated the section on thread safety.
+@item
+Other miscellaneous manual changes such as updating the To Do and Authors
+section.
+@end itemize
+
+@heading Changes from 0.50.5 to 0.60 (August 27, 2004)
+
+@itemize @bullet
+@item
+Added support for Affix Compression.  Affix compression stores the root
+word and then a list of prefixes and suffixes that the word can take,
+and thus saves a lot of space.  The codebase comes from MySpell found in
+OpenOffice.  It uses the same affix file that OpenOffice (and Mozilla)
+use.  Affix compression will even work with soundslike lookup to a
+limited extent.
+@item
+Added support for accepting all input and printing all output in UTF-8
+or some other encoding different from the one Aspell uses.  This
+includes support for Unicode normalization.  Aspell can now support any
+language with no more than 210 distinct characters, including different
+capitalizations and accents, @emph{even if} there is not an existing
+8-bit encoding that supports the language.
+@item
+Added support for loadable filters and customizable filter modes thanks
+to Christoph Hinterm@"uller.
+@item
+Enhanced SGML filter to also support skipping sgml tags such as "script"
+blocks thanks to Tom Snyder.
+@item
+Added gettext support thanks to Sergey Poznyakoff
+@item
+Reworked the compiled dictionary format.  Compiled dictionaries now take
+up less space (less than 80% for the English language) and
+creating them is significantly faster (over 4 times for the
+English language).
+@item
+Reworked suggestion code.  It is significantly faster when dealing with
+short words (up to 10 times).  Also added support for MySpell
+Replacement Tables and n-gram lookup.  In addition, added basic support
+for compound words.
+@item
+Manual has has been converted to texinfo format thanks to the work of
+Chris Martin.
+@item
+Reworked the build system so that a single Makefile is used for most
+of the code.
+@item
+All data, by default, is now included in
+@file{@var{libdir}/aspell-0.60}.  Also added a built time option to
+increment the major version number of the shared library.  This should
+allow both Aspell version 0.50 and 0.60 to coexist.  The major version
+number is @emph{not} incremented by default as Aspell 0.60 is binary
+compatible with Aspell 0.50.  @xref{Binary Compatibility}.
+@item
+The code to handle dictionaries has been rewritten.  Because of this
+support for the dictionary option @option{strip-accents} has been
+removed.  In addition the @option{ignore-accents} option is currently
+unimplemented.
+@item
+Lots of other minor changes due to massive overhaul of the source code.
+
+@end itemize
+
+@heading Changes from 0.50.4.1 to 0.50.5 (Feb 10, 2004)
+
+@itemize @bullet
+@item
+Reworked url filter which fixed several bugs and now accepts
+"bla.bla/kdkdl" as a url.
+@item
+Fixed bug in which the url filter was coming before all other filters
+when it was supposed to come after. This solved a number of problems
+where the url filter was interfering with other filters.
+@item
+Small bug fix in SGML filter.
+@item
+Added code page charsets, ie cp125?.dat.
+@item
+Added natural (split) keyboard data file as "split.kbd"
+@item
+Compile fixes for the upcoming Gcc 3.4
+@item
+Removed Solaris link hack as it was causing more problems than it
+fixes.
+@item
+Compile fixes for Sun WorkShop 6 compiler, but there may still be some
+problems, especially with linking.
+@item
+Included patch to help compile with Microsoft Visual C++ 6.
+@item
+Minor manual fixes.
+@item
+Updated the TODO section to reflect the current progress with the next
+major version of Aspell (0.51).
+@item
+Updated to Autoconf 2.59, Automake 1.82, and Libtool 1.5.2.
+@end itemize
+
+@heading Changes from 0.50.4 to 0.50.4.1 (Oct 11, 2003)
+
+@itemize @bullet
+@item
+Fixed major bug in pipe mode which caused the last character to be
+chopped off words before they were stored.
+@item
+Minor formating fixes in the manual.
+@end itemize
+
+@heading Changes from 0.50.3 to 0.50.4 (Sep 26, 2003)
+
+@itemize @bullet
+@item
+Minor changes in URL filter to avoid treating the double quote
+character as part of the URL, and to avoid treating words ending in
+more than one period as a URL.
+
+@item
+Document fixes in Aspell API
+
+@item
+Small compile fixes, including one for GCC 3.3
+
+@item
+Updated Win32 section since a port now exists thanks to Thorsten
+Maerz.
+
+@item
+Complain instead of doing nothing or aborting for unimplemented
+functions in Aspell utility.
+
+@item
+Portability bug fixes.
+
+@item
+Upgraded to Autoconf 2.57, Automake 1.7.7, Libtool 1.5 (no longer use
+CVS version  of libtool).
+@end itemize
+
+@heading Changes from 0.50.2 to 0.50.3 (Nov 23, 2002)
+
+@itemize @bullet
+@item
+Hopefully fixed the Ispell alignment error problem when Aspell is used
+with ispell.el.
+
+@item
+Fixed a problem with personal dictionaries on NFS mounted home
+directories.
+
+@item
+Compiled libaspell-common directory into libaspell for now to avoid
+forcing applications to relink whenever a new Aspell version is out
+which was due to the use of the libtool '-release' flag.
+
+@item
+Fixed Makefiles so that Aspell can be built outside the source tree
+(i.e.  with VPATH).
+
+@item
+Updated the section on compiling with Win32.
+
+@item
+Updated to Autoconf 2.56.
+@end itemize
+
+@heading Changes from 0.50.1 to 0.50.2 (Sep 28, 2002)
+
+@itemize @bullet
+@item
+Fixed a number of bugs in Ispell compatibility mode
+
+@item
+Fixed a number of bugs with the handling of replacement pairs
+
+@item
+Other miscellaneous bug fixes
+
+@item
+Additional Win32 portability fixes
+
+@item
+Added the Ukrainian KOI8-U charset.
+@end itemize
+
+@heading Changes from 0.50 to 0.50.1 (Aug 28, 2002)
+
+@itemize @bullet
+@item
+A rather large number of portability fixes for non GNU/Linux platforms.
+
+@item
+Fixed pkglibdir and pkgdatadir in configure.
+
+@item
+Reintroduced some configure options from Aspell .33.7 included
+dict-dir, data-dir, curses, curses-include, win32-relocatable.
+
+@item
+Fixed Aspell so it will now compile with -O3 when using gcc.
+
+@item
+Updated note on Win32 support.
+
+@item
+Other minor manual improvements.
+
+@item
+Portability fixes in dictionary files
+
+@item
+Official dictionary package for the Slovak language.
+@end itemize
+
+@heading Changes from .33.7.1 to 0.50 (Aug 23, 2002)
+
+@itemize @bullet
+@item
+A complete overhaul of the source code which included merging Pspell
+into Aspell.
+
+@item
+Changed the way dictionaries and languages are handled.
+
+@item
+Added Dvorak keymap.
+
+@item
+Added the ability to list the available dictionaries
+
+@item
+Improved the spell checking interface a bit.
+
+@item
+Added support for using the Ispell keymapping when checking files.
+
+@item
+Complete rewrite of the filter interface.
+ It should now be fairly easy to add new filters to Aspell.
+
+@item
+Added some preliminary developer documentation.
+
+@item
+Lots of other changes due to the massive overhaul of the source code.
+@end itemize
+
+@heading Changes from .33.7 to .33.7.1 (Aug 20, 2001)
+
+@itemize @bullet
+@item
+Minor manual fixes.
+
+@item
+Compile fix for Gcc 3.0 and Solaris.
+@end itemize
+
+@heading Changes from .33.6.3 to .33.7 (Aug 2, 2001)
+
+@itemize @bullet
+@item
+Updates to Autoconf 2.50 and switched to the HEAD branch of libtools.
+
+@item
+Fixed a bug which caused Aspell to crash when typo-analysis was not
+used such as when sug-mode is @strong{fast} or @strong{bad spellers}.
+
+@item
+Added support for typo-analysis even when a soundslike was not used.
+
+@item
+Fixed a bug which causes extended charters to display incorrectly on
+some platforms
+
+@item
+Compile fixes so that it will compile with Gcc 3.0.
+
+@item
+Compile fixed which should allow Aspell to compile with Egcs 1.1.  I
+have not been able to actually test it though.  Please let me know at
+kevina@@users.sourceforge.net if you have tried with Egcs 1.1.
+
+@item
+Compile and configuration script fixes so that USE_FILE_INO will
+properly be defined and Aspell will compile correctly when it is
+defined.
+
+@item
+More ANSI C++ compliance fixes.
+@end itemize
+
+@heading Changes from .33.6.2 to .33.6.3 (June 3, 2001)
+
+@itemize @bullet
+@item
+Fixed a build problem in the manual/ directory by including
+manual-text and manual-html in the distribution.
+@end itemize
+
+@heading Changes from .33.6.1 to .33.6.2 (June 3, 2001)
+
+@itemize @bullet
+@item
+Compile fix so that Aspell will work correctly when not installed in
+/usr/local.
+
+@item
+Avoided regenerating the manual unless configured with enable-maintainer-mode.
+
+@item
+Added the missing documentation files in the scowl directory.
+@end itemize
+
+@heading Changes from .33.6 to .33.6.1 (May 29, 2001)
+
+@itemize @bullet
+@item
+Fixed a formating problem with the manual involving <.
+
+@item
+Added a note about creating pwli files.
+
+@item
+Removed the space after between the -L and the directory name in the
+pspell-module/Makefile  which caused problems on some platforms.
+
+@item
+Added the configure option AM_MAINTAINER_MODE to avoid enabling rules
+which often causes generated build files to be rebuilt with the wrong
+version of Libtool by default.  I don't know why I didn't think to do
+this a long time ago.
+@end itemize
+
+@heading Changes from .33.5 to .33.6 (May 18, 2001)
+
+@itemize @bullet
+@item
+Fixed a minor bug where some words would have random compound tags
+attached to them.
+
+@item
+Fixed a compile problem on many platforms where fileno is defined as a
+macro.
+
+@item
+Updated the description for a few of Aspell's options.
+
+@item
+Removed the note of Aspell not being able to run when compiled with
+the upcoming Gcc 3.0 compiler as things seam to work now.
+
+@item
+Added a note about Aspell not being able to compile with Egcs 1.1.
+
+@item
+Added hack to deal with Libtool's interdependencies problem.  See bug
+#416981 for Pspell for more info.
+@end itemize
+
+@heading Changes from .33 to .33.5 (April 5, 2001)
+
+@itemize @bullet
+@item
+@strong{dump master} correctly detects which dictionary and language
+to use based on the @env{LANG} environment variable.
+
+@item
+Fixed a problem on Win32 which involves path names that began with
+<Drive Letter>:.
+
+@item
+Bug fixes and enhancements so that Aspell can once again run under
+MinGW.  You can even use the new full screen interface if Aspell is
+compiled with PDCurses.
+
+@item
+Some major modifications to make Aspell more C++ compliant in order to
+get Aspell to compile under the upcoming Gcc 3.0 compiler.  This
+included only using STL features found in the standard version of C++.
+(Which means Aspell will no longer require using the SGI version of
+the STL) This should also make compiling C++ under non-gcc compilers a
+lot simpler.  Please note that Aspell still has some problems with the
+upcoming Gcc 3.0 compiler.
+
+@item
+Minor changes to remove some -Wall warnings.
+
+@item
+Added a hack so that Aspell would properly compile as a shared library
+under Solaris.
+
+@item
+Added a few important missing words to the English word list.
+@end itemize
+
+@heading Changes from .32.6 to .33 (January 28, 2001)
+
+@itemize @bullet
+@item
+Added a new new curses based interface to replace the dumb terminal
+interface everyone has been bitching about.
+
+@item
+Added the ability to give higher priority to words such as "the"
+instead of "teh" which are likely to be due to typos.
+
+@item
+Reorganized the manual so that it is hopefully easier to follow.
+
+@item
+Ability to automatically select the best dictionary to use based on
+the setting of the @env{LANG} environment variable.
+
+@item
+Expanded the medium dictionary size to include more words which
+included the original words found in Ispell and eliminated the large
+size for now.
+
+@item
+Added three special variant add-on dictionaries.
+
+@item
+Switched to the multi-language branch of the CVS version of libtool.
+
+@end itemize
+
+@heading Changes from .32.5 to .32.6 (Nov 8, 2000)
+
+@itemize @bullet
+@item
+Fixed a bug where Aspell would crash when reading-in accented
+characters on some platforms.  This fixed bug # 112435.
+
+@item
+Fixed some other bugs so that it will run under Win32 under CygWin.
+Unfortunately it still won't run properly under Mingw.
+
+@item
+Fixed the mmap test in configure so that it won't fail on some
+platforms that use munmap(char *, int) instead of munmap(void *, int).
+
+@item
+Upgraded to the latest CVS version of libtool which fixed the problem
+with using GNU Make under Solaris.
+
+@item
+Added an option to copy files instead of using symbolic links for the
+special @strong{multi} dictionary files.
+@end itemize
+
+@heading Changes from .32.1 to .32.5 (August 18, 2000)
+
+@itemize @bullet
+@item
+Changed my email from kevinatk at home com to kevina at users
+sourceforge net please make a note of the new email address.
+
+@item
+Added an option to control if the personal replacement dictionary is
+saved when the save_all_wls method is called.
+
+@item
+Brought back the ability to dump the master word list even in the case
+of the special @strong{multi} lists.
+
+@item
+Added a large number of hacker related words and some other slang
+terms to the medium size word list.
+
+@item
+Added an @strong{ispell} and @strong{spell} compatibility script for
+systems which don't have Ispell installed.  They are located in the
+scripts/ directory and are not installed by default.
+
+@item
+Manual fixes.
+
+@item
+Added a note on not using GNU Make on Solaris.
+@end itemize
+
+@heading Changes from .32 to .32.1 (August 5, 2000)
+
+@itemize @bullet
+@item
+Minor compile fixes for recent gcc snapshot.
+
+@item
+Fixed naming of pwli files.
+
+@item
+Fixed a bug when Aspell will crash when used with certain single
+letter flags.  This bug was most noticeable when used with Emacs.
+
+@item
+Word list changes, see SCOWL Readme.
+
+@item
+Other miscellaneous changes.
+@end itemize
+
+@heading Changes from .31.1 to .32 (July 23, 2000)
+
+@itemize @bullet
+@item
+Added support for optionally doing without the soundslike data.
+
+@item
+Greatly reduced the amount of memory used when creating word lists.
+
+@item
+Added support for ignoring accents when coming up with suggestions.
+
+@item
+Added support for local-data-dir which is searched before data-dir.
+
+@item
+Added support for specifying which words may be used in compounds and where
+ they may be used.
+
+@item
+Added support for having more than one main word list as well as a
+special @strong{multi} word list files which will allow multiple word
+lists to be treated as one.
+
+@item
+Aspell now uses a completely new word list.
+
+@item
+The apostrophe (') is no longer considered part of the word when it as
+at the end of the word such as in @samp{dogs'}.
+@end itemize
+
+@heading Changes from .31 to .31.1 (June 18, 2000)
+
+@itemize @bullet
+@item
+Fixed a bug where Aspell would not create a complete dictionary file
+on some platforms when the data is 8-bit.
+
+@item
+Added a workaround so Aspell will work with ispell.el 3.3.
+
+@item
+Minor compile fixes so it would compile better with the very latest
+gcc (CVS Version).
+
+@item
+Removed note about compiling in Win32 as I was now able to get it to work.
+@end itemize
+
+@heading Changes from .30.1 to .31 (June 11, 2000)
+
+@itemize @bullet
+@item
+Added support for spell checking run together words.
+
+@item
+Added an option to produce a list of misspelled words from standard input.
+
+@item
+More robust error reporting when reading in language data files.
+
+@item
+Fixed a bug that would cause Aspell to crash if the
+@strong{special} line was not defined in the language data file.
+
+@item
+Updated Pspell Module.
+
+@item
+Minor bug fixes.
+
+@item
+Added cross references in ``The Aspell Utility Chapter'' for easier
+use.
+@end itemize
+
+@heading Changes from .30 to .30.1 (April 29, 2000)
+
+@itemize @bullet
+@item
+Ported Aspell to Win32 platforms.
+
+@item
+Portability fixes which may help Aspell compile on other platforms.
+
+@item
+Aspell will no longer fail if for some reason the mmap fails, instead
+it will just read the file in as normal and free the memory when done.
+
+@item
+Minor changes in the format of the main word list as a result of the
+changes, the old format should still work in most cases.
+
+@item
+Fixed a bug where Aspell was ignoring the extension of file names such
+as .html or .tex when checking files.
+
+@item
+Fixed a bug where Aspell will go into an infinite loop when creating
+the main word list from a word list which has duplicates in it.
+
+@item
+Minor changes to the manual for better clarity.
+@end itemize
+
+@heading Changes from .29.1 to .30 (April 2, 2000)
+
+@itemize @bullet
+@item
+Fixed many of the capitalization bugs found in previous versions of
+Aspell.
+
+@item
+Changed the format of the main word list yet again.
+
+@item
+Fixed a bug so that @code{aspell check} will work on the PowerPC.
+
+@item
+Added ability to change configuration options in the middle of a session.
+
+@item
+Added words from /usr/dict/words found on most Linux systems as well
+as a bunch of commonly used abbreviations to the word list.
+
+@item
+Fixed a bug where Aspell would dump core after reporting certain errors
+when compiled with gcc 2.95 or higher.  This involved reworking the
+Exception heritage to get around a bug in gcc 2.95.
+
+@item
+Added a few more commands to the list of default commands the @TeX{}
+filter knows about.
+
+@item
+Aspell will now check if a word only contains valid characters before
+adding it to any dictionaries.  This might mean that you have to
+manually delete a few words from your personal word list.
+
+@item
+Added option to ignore case when checking a document.
+
+@item
+Adjusted the parameters of the @strong{normal} suggest mode to so that
+significantly less far fetched results are returned in cases such as
+tomatoe, which went from 100 suggestions down to 32, at the expense of
+getting slightly lower results (less than 1%),
+
+@item
+Improved the edit distance algorithm for slightly faster results.
+
+@item
+Removed the @samp{$$m} command in pipe mode, you should now use
+@samp{$$cs mode,@var{mode}} to set the mode and @strong{$$cr mode} to
+find out the current mode.
+
+@item
+Reworked parts of Aspell to use Pspell services to avoid duplicating code.
+
+@item
+Added a module for the newly released Pspell.  It will get installed
+with the rest of Aspell.
+
+@item
+Miscellaneous other bug fixes.
+@end itemize
+
+@heading Changes from .29 to .29.1 (Feb 18, 2000)
+
+@itemize @bullet
+@item
+Improved the @TeX{} filter so that it will accept '@@' at the beginning
+of a command name and ignored trailing '*'s.  It also now has better
+defaults for which parameters to skip.
+
+@item
+Reworked the main dictionary so that it can be memory mapped in.  This
+decreases startup time and allows multiple Aspell processes to use the
+same memory for the main word list.  This also also made Aspell 64 bit
+clean so that it should work on an alpha now.
+
+@item
+Fix so that Aspell could compile on platforms that gnu is not yet
+available for.
+
+@item
+Fixed issue with flock so it would compile on FreeBSD.
+
+@item
+Minor changes in the code to make it more C++ compliant although I am
+sure there will still be problems when using some other compiler other
+than gcc or egcs.
+
+@item
+Added some comments to the header files to better document a few of
+the classes.
+@end itemize
+
+@heading Changes from .28.3 to .29 (Feb 6, 2000)
+
+@itemize @bullet
+@item
+Fixed a bug in the pipe mode with lines that start with
+@samp{^$$}.
+
+@item
+Added support for ignoring all words less than or equal to a specified length
+
+@item
+New soundslike code based thanks to the contribution of Bj@"orn Jacke.
+It now gets all of its data from a table making it easier for other
+people to add soundslike code for their native language.  He also
+converted the metaphone algorithm to table form, eliminating the need
+for the old metaphone code.
+
+@item
+Major redesign of the suggestion code for better results.
+
+@item
+Changed the format of the personal word lists.  In most cases it
+should be converted automatically.
+
+@item
+Changed the format of the main word list.
+
+@item
+Name space cleanup for more consistent naming.  I now use name spaces
+which means that gcc 2.8.* and egcs 1.0.* will no longer cut it.
+
+@item
+Used file locks when reading and saving the personal dictionaries so
+that it truly multiprocesses safely.
+
+@item
+Added rudimentary filter support.
+
+@item
+Reworked the configuration system once again.  However, the changes to
+the end user who does not directly use my library should be minimal.
+
+@item
+Rewrote my code that handles parsing command line parameters so that
+it no longer used popt as it was causing too many problems and didn't
+integrate well with my new configuration system.
+
+@item
+Fixed pipe mode so that it will properly ignore lines starting with
+'~' for better Ispell compatibility.
+
+@item
+Aspell now has a new home page at
+@uref{http://aspell.sourceforge.net/}.  Please make note of the new
+URL.
+
+@item
+Miscellaneous manual fixes and clarifications.
+@end itemize
+
+@heading Changes from .28.2.1 to .28.3 (Nov 20, 1999)
+
+@itemize @bullet
+@item
+Fixed a bug that caused Aspell to crash when spell checking words over
+60 characters long.
+
+@item
+Reworked @strong{aspell check} so that
+@enumerate
+@item
+You no longer have to hit enter when making a choice.
+
+@item
+It will now overwrite the original file instead of creating a new
+file.  An optional backup can be made by using the -b option.
+@end enumerate
+
+@item
+Fixed a few bugs in data.cc.
+@end itemize
+
+@heading Changes from .28.2 to .28.2.1 (Aug 25, 1999)
+
+@itemize @bullet
+@item
+Fixed the version number for the shared library.
+
+@item
+Fixed a problem with undefined references when linking to the shared library.
+@end itemize
+
+@heading Changes from .28.1 to .28.2 (Aug 25, 1999)
+
+@itemize @bullet
+@item
+Fixed a bunch of bugs in the language and configuration classes.
+
+@item
+Minor changes in the code so that it could compile with the new gcc
+2.95(.1).
+
+@item
+Changed the output of @code{dump config} so that default values are
+given the value @code{<default>}.  This means that the output can
+be used to create a configuration file.
+
+@item
+Added notes on using Aspell with VIM.
+@end itemize
+
+@heading Changes from .28 to .28.1 (July 27, 1999)
+
+@itemize @bullet
+@item
+Removed some debug output
+
+@item
+Changed notes on compiling with gcc 2.8.* as I managed to get it to
+compile on my school account
+
+@item
+Avoided including @strong{stdexcept} in @file{const_string.hh} so that
+I could get Aspell to compile on my school account with gcc 2.8.1.
+@end itemize
+
+@heading Changes from .27.2 to .28 (July 25, 1999)
+
+@itemize @bullet
+Provided an iterator for the replacement classes.
+
+@item
+Added support for dumping and creating and merging the personal and
+replacement word lists.
+
+@item
+Changed the Aspell utility command line a bit, it now used popt.
+
+@item
+Totally reworked Aspell configuration system.  Now Aspell could get
+configuration from any of 5 sources: the command line, the environment
+variable @env{ASPELL_CONF}, the personal configuration file, the
+global configuration file, and finally the compiled-in defaults.
+
+@item
+Totally reworked the language class in preparation for my new language
+code.  See @url{http://aspell.sourceforge.net/international/} for more
+information of what I have in store.
+
+@item
+Added some options to the configure script: --enable-dict-dir=DIR,
+--enable-doc-dir=DIR, --enable-debug, and --enable-opt
+
+@item
+Removed some old header files.
+
+@item
+Reorganized the directory structure a bit
+
+@item
+Made the text version of the manual pages slightly easier to read
+
+@item
+Used the @samp{\url} command for urls for better formating of the
+printed version.
+@end itemize
+
+@heading Changes from .27.1 to .27.2 (Mar 1, 1999)
+
+@itemize @bullet
+@item
+Fixed a major bug that caused Aspell to dump core when used without
+any arguments
+
+@item
+Fixed another major bug that caused Aspell to do nothing when used in
+interactive mode.
+
+@item
+Added an option to exit in Aspell's interactive mode.
+
+@item
+Removed some old documentation files from the distribution.
+
+@item
+Minor changes to the the section on using Aspell with egcs.
+
+@item
+Minor changes to remove -Wall warnings.
+@end itemize
+
+@heading Changes from .27 to .27.1 (Feb 24, 1999)
+
+@itemize @bullet
+@item
+Fixed a minor compile problem.
+
+@item
+Updated the section on using Aspell with egcs to it.  It was now more
+clear why the patch was necessary.
+@end itemize
+
+@heading Changes from .26.2 to .27 (Feb 22, 1999)
+
+@itemize @bullet
+@item
+Totally reworked the C++ library which means you may need to change
+some things in your code.
+
+@item
+Added support for detachable and multiple personal dictionaries in the
+C++ class library.
+
+@item
+The C++ class library now throws exceptions.
+
+@item
+Reworked Aspell ability to learn from users misspellings a bit so that
+it now has a memory.  For more information see @ref{Notes on Storing
+Replacement Pairs}.
+
+@item
+Upgraded autoconf to version 2.13 and automake to version 1.4 for
+better portability.
+
+@item
+Fixed the configuration so the @code{make dist} will work.  From now on
+Aspell will be distributed with @code{make dist}.
+
+@item
+Added support to skip over URL's, email addresses and host names.
+
+@item
+Added support for dumping the master and personal word list.  You can
+now also merge a personal word list.  Type aspell -help for help on
+using this feature.
+
+
+@item
+Reorganized the source code.
+
+@item
+Started using proper version numbers for the shared library.
+
+@item
+Fixed a bug that caused Aspell to crash when adding certain
+replacement pairs.
+
+@item
+Fixed the problem with duplicate lines when exiting pipe mode for
+good.
+@end itemize
+
+@heading Changed from .26.1 to .26.2 (Jan 3, 1998)
+
+@itemize @bullet
+@item
+Fixed another compile problem.  Hopefully this time it will really
+compile OK on other peoples machines.
+@end itemize
+
+@heading Changed from .26 to .26.1 (Jan 3, 1998)
+
+@itemize @bullet
+@item
+Fixed a small compile problem in @file{as_data.cc}.
+@end itemize
+
+@heading Changed from .25.1 to .26 (Jan 3, 1999)
+
+@itemize @bullet
+@item
+Fixed a bug that caused duplicate items to be displayed in the
+suggestion list for good.  (If it still does it please send me email.)
+
+@item
+Added the ability for Aspell to learn form the users misspellings.
+
+@item
+Library Interface changes.  Still more to come @dots{}.
+
+@item
+Is now multiprocess safe.  When a personal dictionary (or replacement
+list) is saved it will now first update the list against the dictionary
+on disk in case another process modified it.
+
+@item
+Fixed the bug that caused duplicate output when used non interactively
+in pipe mode.
+
+@item
+Dropped support for gcc 2.7.2 as the C++ compiler.
+
+@item
+Updated the How Aspell Works (@ref{Aspell Suggestion Strategy}.)
+
+@item
+Added support for the @env{ASPELL_DATA_DIR} environment variable.
+@end itemize
+
+@heading Changes from .25 to .25.1 (Dec 10, 1998)
+
+@itemize @bullet
+@item
+Fixed the version number so that Aspell reports the correct version
+number.
+
+@item
+Changed the note on gcc 2.7.2 compilers to make it clear that only the
+C++ compiler cannot be gcc 2.7.2, it is OK if the C compiler is gcc
+2.7.2.
+
+@item
+Updated the TODO list and reorganized it a bit.
+
+@item
+Fixed the directory so that all the documentation will get installed
+in @verb{#${prefix}/doc/aspell#} instead of half of it in
+@verb{#${prefix}/doc/aspell#} and half of it in
+@verb{#${prefix}/doc/kspell#}.
+@end itemize
+
+@heading Changes from .24 to .25 (Nov 23, 1998)
+
+@itemize @bullet
+@item
+Total rework of how the main word list is stored.  Start up time
+decreased to about 1/3 of what it was in .24 and memory usage
+decreased to about 2/3.  (When used with the provided word list on a
+Linux system).
+
+Also the format and default locations of the main word list data files
+changed in the process and the data is now machine dependent.  The
+personal word list format, however, stayed the same.
+
+@item
+Changed the scoring method to produce slightly better results with
+words like the vs.  teh.  And other simpler misspellings where two
+letters are swapped.
+
+@item
+Fixed the very unpredictable behavior of the @samp{*}, @samp{&},
+@samp{@@} commands in the pipe mode.
+
+@item
+Added documentations for Aspell pipe mode (also known as
+@command{ispell -a} compatibility mode)
+
+@item
+Added a bunch of Aspell specific extensions to the pipe mode and
+documented them.
+
+@item
+Documented the @code{to_soundslike} and @code{soundslike} methods for
+the @code{aspell} class.
+
+@item
+Changed the scoring method to produce better results for words like
+@emph{fone} vs @emph{phone} and other words that have a spelling that
+doesn't directly relate to how the word sounds by using the phoneme
+equivalent of the word in the scoring of it.
+
+@item
+Added the @code{to_phoneme} and @code{have_phoneme} methods to the
+@code{SC_Language} class.
+
+@item
+Added the @code{to_phoneme} method to the @code{aspell} class.
+
+@item
+Added the framework for being able to learn from the users
+misspelling.  Right now it just keeps a log of replacements.
+
+@item
+Redid @file{stl_rope-30.diff}.  For some reason the version of patch
+on my system refused it.
+
+@item
+Rewrite of the ``@emph{Using as a replacement for Ispell}'' section
+and added the @code{run-with-aspell} utility as a replacement of the
+old method of mapping Ispell to Aspell.
+
+@item
+Fixed a bug that caused duplicate words to appear in the suggestion
+list.
+@end itemize
+
+@heading Changes from .23 to .24 (Nov 8, 1998)
+
+@itemize @bullet
+@item
+Fixed my code so that it can once again compile with g++ 2.7.2.
+
+@item
+Rewrote the How It Works chapter.
+
+@item
+Rewrote the Requirement section and added notes on compiling with g++
+2.7.2.
+
+@item
+Added a To Do chapter.
+
+@item
+Added a Glossary and References chapter.
+
+@item
+Other minor documentation improvements.
+
+@item
+Internal code documentation improvements.
+@end itemize
+
+@heading Changes from .22.1 to .23 (Oct 31, 1998)
+
+@itemize @bullet
+@item
+Minor documentation fixes.
+
+@item
+Changed the scoring strategy for words with 3 or less letters.  This
+cut the number of words returned for these roughly in half.
+
+@item
+Expanded the word list to also include @strong{american.0} and
+@strong{american.1} from the Ispell distribution.  It now includes
+@strong{english.0}, @strong{english.1}, @strong{american.0} and
+@strong{american.1} from the directory @file{languages/english}
+provided with Ispell 3.1.20.
+
+@item
+Added a link to the location of the latest Ispell.el in the
+documentation.
+
+@item
+Started a C interface and added some rough documentation for it.
+@end itemize
+
+@heading Changes from .22 to .22.1 (Oct 27, 1998)
+
+@itemize @bullet
+@item
+Minor bug fixes.  I was deleting arrays with delete rather than
+delete[].  I was suprised that this had not created a problem.
+
+@item
+Added a simple test program to test for a memory leak present on some
+systems.  (Only debian slink at the moment.) See the file
+memleak-test.cc for more info.
+@end itemize
+
+@heading Changes from .21 to .22 (Oct 26, 1998)
+
+@itemize @bullet
+@item
+Major redesign of the scoring method.  It now uses absolute distances
+rather than relative scores for more consistent results.  See
+@file{suggest.cc} for more info.
+
+@item
+Suggest code rewritten in several places, however the core process
+stayed the same.
+
+@item
+The @code{suggest_ultra} method temporarily does nothing.  It should
+be working again by the next release.
+@end itemize
+
+@heading Changes from .20 to .21 (Oct 13, 1998)
+
+@itemize @bullet
+@item
+Added documentation for aspell::Error
+
+@item
+
+Changed the library name from @code{libspell} to @code{libaspell}.  It
+should never have been @code{libspell} in the first place.  Sorry for
+the incompatibility.
+
+@item
+Added @file{as_error.hh} to the list of files copied to the include
+directory so that you can actually use the library outside of the
+source dir.
+
+@item
+Fixed bug that caused a segmentation fault with words where the only
+suggestions was inserting a space or hyphen such as in
+@strong{ledgerline}.
+
+@item
+Added the @strong{score} method to @code{aspell}.
+
+@item
+Changed the scoring method to deal with word when the user uses "f" in
+place of "ph" a lot better.
+@end itemize
+
+@heading Changes from .11 to .20 (Oct 10, 1998)
+
+@itemize @bullet
+@item
+@emph{Name change}.  Everything that was Kspell is now Aspell.  Sorry,
+the name Kspell was already used by KDE and I didn't want to cause any
+confusion.
+
+@item
+Fixed a bug that causes a segmentation fault when the @env{HOME}
+environment variable doesn't exist.
+@end itemize
+
+@heading Changes from .10 to .11 (Sep 12, 1998)
+
+@itemize @bullet
+@item
+Overhaul of the SC_Language class
+
+@item
+Added documentation for international support
+
+@item
+Added documentation for the C++ library
+
+@item
+Other minor bug fixes.
+@end itemize
+
+@node Authors
+@appendix Authors
+
+The following people or companies have contributed a non-trival amount of
+code to Aspell and thus own the Copyright to part of Aspell.
+
+@table @asis
+
+@item Jose Da Silva
+Bug fixes and enhancements to @command{word-list-compress}.
+
+@item Sergey Poznyakoff
+Wrote the Nroff filter.
+
+@item Tom Snyder
+Enhanced the SGML filter to also support skipping sgml tags such as
+"script" blocks.
+
+@item Kevin B. Hendricks (and Contributers)
+Wrote MySpell which is a simple spell checker library that supports
+affix compression.  Aspell affix compression code is based on his code.
+
+@item Christoph Hinterm@"uller
+Added support for loadable filters.
+
+@item Melvin Hadasht
+Wrote a locale independent version of strtol and strtod.  
+Wrote the original loadable filter support however his code has been 
+completely rewritten by Christoph Hinterm@"uller and Kevin Atkinson.
+
+@item Bj@"orn Jacke
+Wrote the generic soundslike algorithm which gets all of its data from a
+file, thus eliminating almost all need for language specific code from
+Aspell.
+
+@item Silicon Graphics Computer Systems, Inc.
+@itemx Hewlett-Packard Company
+Parts of the SGI STL code were used in various places throughout the
+Aspell source.
+
+@end table
+
+In addition the authors of some of translated messages did not release
+their work into the Public Domain, and thus own the copyright to the
+translated text.  See the files @file{*.po} in the @file{po} directory
+for more details.
+
+The folowing people also contributed to the development of Aspell but do
+not own the Copyright to part of Aspell.
+
+@table @asis
+
+@item Sergey Poznyakoff
+Added gettext support.
+
+@item Chris Martin
+Converted the manual to texinfo.
+
+@item Lawrence Philips
+Wrote the original metaphone algorithm; however, he released his work
+into the Public Domain.
+
+@item Michael Kuhn
+Converted the metaphone algorithm into C code and made some enhancements
+to the original algorithm.  He also released his work into the Public
+Domain.
+
+@item Geoff Kuenning (and contributers)
+The authors of Ispell.  Many of the ideas used in Aspell, especially with
+the affix code, were taken from Ispell.  However none of the original
+Ispell code is used in Aspell.
+
+@end table
+
+@node Copying
+@appendix Copying
+
+Copyright @copyright{} 2000--2006 Kevin Atkinson.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
+copy of the license is included in the section entitled "GNU Free
+Documentation License".
+
+The library and utility program is copyright @copyright{} 2000--2006 by
+Kevin Atkinson.  You can redistribute it and/or modify it under the
+terms of the GNU Lesser General Public License as (LGPL) published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+Certain parts of the library, as indicated at the top of the source
+file, are under a weaker license.  However, all parts of the library
+are LGPL Compatible.
+
+@menu
+* GNU Free Documentation License::
+* GNU Lesser General Public License::
+@end menu
+
+@include fdl.texi
+@include lgpl.texi
+
+@c @node Index
+@c @unnumbered Index
+
+@c @printindex cp
+
+@bye
+
diff --git a/manual/crubadan.texi b/manual/crubadan.texi
new file mode 100644 (file)
index 0000000..61fcd6d
--- /dev/null
@@ -0,0 +1,93 @@
+@itemize
+@item Afrikaans (af)
+@item Asturian / Bable (ast)
+@item Azerbaijani (az)
+@item Balinese (ban)
+@item Bemba (bem)
+@item Bislama (bi)
+@item Breton (br)
+@item Catalan / Valencian (ca)
+@item Cebuano (ceb)
+@item Chamorro (ch)
+@item Chuukese (chk)
+@item Corsican (co)
+@item Kashubian (csb)
+@item Welsh (cy)
+@item Basque (eu)
+@item Fijian (fj)
+@item Faroese (fo)
+@item Friulian (fur)
+@item Frisian (fy)
+@item Irish (ga)
+@item Scottish Gaelic (gd)
+@item Gallegan (gl)
+@item Guarani (gn)
+@item Manx Gaelic (gv)
+@item Hausa (ha)
+@item Hawaiian (haw)
+@item Hiligaynon (hil)
+@item Haitian Creole (ht)
+@item Iban (iba)
+@item Igbo (ig)
+@item Iloko (ilo)
+@item Javanese (jv)
+@item Kachin (kac)
+@item Khasi (kha)
+@item Kalaallisut / Greenlandic (kl)
+@item Konkani (kok)
+@item Kurdish (ku)
+@item Cornish (kw)
+@item Luxembourgish (lb)
+@item Ganda (lg)
+@item Limburgian (li)
+@item Lingala (ln)
+@item Lozi (loz)
+@item Luo (Kenya and Tanzania) (luo)
+@item Malagasy (mg)
+@item Marshallese (mh)
+@item Maori (mi)
+@item Minangkabau (min)
+@item Mongolian (mn)
+@item Maltese (mt)
+@item North Ndebele (nd)
+@item Low Saxon (nds)
+@item Ndonga (ng)
+@item Niuean (niu)
+@item Norwegian Nynorsk (nn)
+@item Northern Sotho (nso)
+@item Navajo (nv)
+@item Nyanja (ny)
+@item Occitan / Provencal (oc)
+@item Pampanga (pam)
+@item Papiamento (pap)
+@item Quechua (qu)
+@item Rarotongan (rar)
+@item Rundi (rn)
+@item Kinyarwanda (rw)
+@item Sardinian (sc)
+@item Northern Sami (se)
+@item Sango (sg)
+@item Samoan (sm)
+@item Shona (sn)
+@item Somali (so)
+@item Swati (ss)
+@item Southern Sotho (st)
+@item Sundanese (su)
+@item Swahili (sw)
+@item Tetum (tet)
+@item Tajik (tg)
+@item Turkmen (tk)
+@item Tokelau (tkl)
+@item Tagalog (tl)
+@item Tswana (tn)
+@item Tonga (to)
+@item Tok Pisin (tpi)
+@item Tsonga (ts)
+@item Tahitian (ty)
+@item Venda (ve)
+@item Walloon (wa)
+@item Wolof (wo)
+@item Xhosa (xh)
+@item Yoruba (yo)
+@item Zulu (zu)
+@end itemize
diff --git a/manual/fdl.texi b/manual/fdl.texi
new file mode 100644 (file)
index 0000000..595fff1
--- /dev/null
@@ -0,0 +1,448 @@
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@center Version 1.2, November 2002
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License.  Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License.  However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+@end enumerate
+
+@page
+@appendixsubsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.2
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with...Texts.'' line with this:
+
+@smallexample
+@group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+
diff --git a/manual/lang-supported.texi b/manual/lang-supported.texi
new file mode 100644 (file)
index 0000000..1c1b4d9
--- /dev/null
@@ -0,0 +1,197 @@
+@multitable @columnfractions 0.05 0.31 0.29 0.20 0.15
+@item @b{Code} @tab @b{Language Name} @tab @b{Script} @tab @b{Dictionary Available} @tab @b{Gettext Translation}
+@item
+@item aa @tab Afar @tab Latin @tab - @tab -
+@item af @tab Afrikaans @tab Latin @tab 0.50 @tab -
+@item ak @tab Akan @tab Latin @tab Maybe @tab -
+@item am @tab Amharic @tab Ethiopic @tab 0.60 @tab -
+@item ar @tab Arabic @tab Arabic @tab 0.60 @tab -
+@item as @tab Assamese @tab Bengali @tab - @tab -
+@item av @tab Avar @tab Cyrillic @tab - @tab -
+@item ay @tab Aymara @tab Latin @tab - @tab -
+@item az @tab Azerbaijani @tab Cyrillic, Latin @tab 0.60 @tab -
+@item
+@item ba @tab Bashkir @tab Cyrillic @tab - @tab -
+@item be @tab Belarusian @tab Cyrillic @tab 0.50 @tab Incomplete
+@item bg @tab Bulgarian @tab Cyrillic @tab 0.50 @tab -
+@item bh @tab Bihari @tab Devanagari @tab - @tab -
+@item bm @tab Bambara @tab Latin @tab - @tab -
+@item bn @tab Bengali @tab Bengali @tab 0.60 @tab -
+@item bo @tab Tibetan @tab Tibetan @tab - @tab -
+@item br @tab Breton @tab Latin @tab 0.50 @tab -
+@item bs @tab Bosnian @tab Latin @tab Maybe @tab -
+@item
+@item ca @tab Catalan / Valencian @tab Latin @tab 0.50 @tab Yes
+@item ce @tab Chechen @tab Cyrillic @tab - @tab -
+@item co @tab Corsican @tab Latin @tab Maybe @tab -
+@item cop @tab Coptic @tab Greek @tab Maybe @tab -
+@item cs @tab Czech @tab Latin @tab 0.50 @tab Yes
+@item csb @tab Kashubian @tab Latin @tab 0.60 @tab -
+@item cv @tab Chuvash @tab Cyrillic @tab - @tab -
+@item cy @tab Welsh @tab Latin @tab 0.50 @tab -
+@item
+@item da @tab Danish @tab Latin @tab 0.50 @tab Incomplete
+@item de @tab German @tab Latin @tab 0.50 @tab Yes
+@item dyu @tab Dyula @tab - @tab Maybe @tab -
+@item
+@item ee @tab Ewe @tab Latin @tab - @tab -
+@item el @tab Greek @tab Greek @tab 0.50 @tab -
+@item en @tab English @tab Latin @tab 0.50 @tab Yes
+@item eo @tab Esperanto @tab Latin @tab 0.50 @tab -
+@item es @tab Spanish @tab Latin @tab 0.50 @tab Incomplete
+@item et @tab Estonian @tab Latin @tab 0.60 @tab -
+@item eu @tab Basque @tab Latin @tab Maybe @tab -
+@item
+@item fa @tab Persian @tab Arabic @tab 0.60 @tab -
+@item ff @tab Fulah @tab Latin @tab Maybe @tab -
+@item fi @tab Finnish @tab Latin @tab 0.60 @tab -
+@item fj @tab Fijian @tab Latin @tab Maybe @tab -
+@item fo @tab Faroese @tab Latin @tab 0.50 @tab -
+@item fr @tab French @tab Latin @tab 0.50 @tab Yes
+@item fur @tab Friulian @tab Latin @tab Maybe @tab -
+@item fy @tab Frisian @tab Latin @tab 0.60 @tab -
+@item
+@item ga @tab Irish @tab Latin @tab 0.50 @tab Yes
+@item gd @tab Scottish Gaelic @tab Latin @tab 0.50 @tab -
+@item gl @tab Gallegan @tab Latin @tab 0.50 @tab -
+@item gn @tab Guarani @tab Latin @tab Maybe @tab -
+@item gu @tab Gujarati @tab Gujarati @tab 0.60 @tab -
+@item gv @tab Manx Gaelic @tab Latin @tab 0.50 @tab -
+@item
+@item ha @tab Hausa @tab Latin @tab Maybe @tab -
+@item he @tab Hebrew @tab Hebrew @tab 0.60 @tab -
+@item hi @tab Hindi @tab Devanagari @tab 0.60 @tab -
+@item hil @tab Hiligaynon @tab Latin @tab 0.50 @tab -
+@item ho @tab Hiri Motu @tab Latin @tab - @tab -
+@item hr @tab Croatian @tab Latin @tab 0.50 @tab -
+@item hsb @tab Upper Sorbian @tab Latin @tab 0.60 @tab -
+@item ht @tab Haitian Creole @tab Latin @tab Maybe @tab -
+@item hu @tab Hungarian @tab Latin @tab 0.60 @tab -
+@item hy @tab Armenian @tab Armenian @tab 0.60 @tab -
+@item hz @tab Herero @tab Latin @tab - @tab -
+@item
+@item ia @tab Interlingua (IALA) @tab Latin @tab 0.50 @tab -
+@item id @tab Indonesian @tab Arabic, Latin @tab 0.50 @tab -
+@item ig @tab Igbo @tab Latin @tab Maybe @tab -
+@item ii @tab Sichuan Yi @tab Yi @tab - @tab -
+@item io @tab Ido @tab Latin @tab - @tab -
+@item is @tab Icelandic @tab Latin @tab 0.50 @tab -
+@item it @tab Italian @tab Latin @tab 0.50 @tab Yes
+@item
+@item jv @tab Javanese @tab Javanese, Latin @tab Maybe @tab -
+@item
+@item ka @tab Georgian @tab Georgian @tab - @tab -
+@item kg @tab Kongo @tab Latin @tab Maybe @tab -
+@item ki @tab Kikuyu / Gikuyu @tab Latin @tab - @tab -
+@item kj @tab Kwanyama @tab Latin @tab - @tab -
+@item kk @tab Kazakh @tab Cyrillic @tab - @tab -
+@item km @tab Khmer @tab Khmer @tab Maybe @tab -
+@item kn @tab Kannada @tab Kannada @tab Planned @tab -
+@item kr @tab Kanuri @tab Latin @tab - @tab -
+@item ks @tab Kashmiri @tab Arabic, Devanagari @tab - @tab -
+@item ku @tab Kurdish @tab Arabic, Cyrillic, Latin @tab 0.50 @tab -
+@item kv @tab Komi @tab Cyrillic @tab - @tab -
+@item ky @tab Kirghiz @tab Arabic, Cyrillic, Latin @tab Maybe @tab -
+@item
+@item la @tab Latin @tab Latin @tab 0.60 @tab -
+@item lb @tab Luxembourgish @tab Latin @tab Maybe @tab -
+@item lg @tab Ganda @tab Latin @tab Maybe @tab -
+@item li @tab Limburgian @tab Latin @tab Maybe @tab -
+@item ln @tab Lingala @tab Latin @tab Maybe @tab -
+@item lt @tab Lithuanian @tab Latin @tab 0.60 @tab -
+@item lu @tab Luba-Katanga @tab Latin @tab - @tab -
+@item lv @tab Latvian @tab Latin @tab 0.60 @tab -
+@item
+@item mg @tab Malagasy @tab Latin @tab 0.50 @tab -
+@item mi @tab Maori @tab Latin @tab 0.50 @tab -
+@item mk @tab Macedonian @tab Cyrillic @tab 0.50 @tab -
+@item ml @tab Malayalam @tab Latin, Malayalam @tab 0.60 @tab -
+@item mn @tab Mongolian @tab Cyrillic, Mongolian @tab 0.60 @tab Incomplete
+@item mo @tab Moldavian @tab Cyrillic @tab - @tab -
+@item mos @tab Mossi @tab - @tab Maybe @tab -
+@item mr @tab Marathi @tab Devanagari @tab 0.60 @tab -
+@item ms @tab Malay @tab Arabic, Latin @tab 0.50 @tab -
+@item mt @tab Maltese @tab Latin @tab 0.50 @tab -
+@item my @tab Burmese @tab Myanmar @tab - @tab -
+@item
+@item nb @tab Norwegian Bokmal @tab Latin @tab 0.50 @tab -
+@item nd @tab North Ndebele @tab Latin @tab Maybe @tab -
+@item nds @tab Low Saxon @tab Latin @tab 0.60 @tab -
+@item ne @tab Nepali @tab Devanagari @tab Maybe @tab -
+@item ng @tab Ndonga @tab Latin @tab Maybe @tab -
+@item nl @tab Dutch @tab Latin @tab 0.50 @tab Yes
+@item nn @tab Norwegian Nynorsk @tab Latin @tab 0.50 @tab -
+@item nr @tab South Ndebele @tab Latin @tab Maybe @tab -
+@item nso @tab Northern Sotho @tab Latin @tab Maybe @tab -
+@item nv @tab Navajo @tab Latin @tab Maybe @tab -
+@item ny @tab Nyanja @tab Latin @tab 0.50 @tab -
+@item
+@item oc @tab Occitan / Provencal @tab Latin @tab Maybe @tab -
+@item om @tab Oromo @tab Ethiopic, Latin @tab - @tab -
+@item or @tab Oriya @tab Oriya @tab 0.60 @tab -
+@item os @tab Ossetic @tab Cyrillic @tab - @tab -
+@item
+@item pa @tab Punjabi @tab Gurmukhi @tab 0.60 @tab -
+@item pl @tab Polish @tab Latin @tab 0.50 @tab -
+@item ps @tab Pushto @tab Arabic @tab - @tab -
+@item pt @tab Portuguese @tab Latin @tab 0.50 @tab Incomplete
+@item
+@item qu @tab Quechua @tab Latin @tab 0.60 @tab -
+@item
+@item rn @tab Rundi @tab Latin @tab Maybe @tab -
+@item ro @tab Romanian @tab Latin @tab 0.50 @tab Incomplete
+@item ru @tab Russian @tab Cyrillic @tab 0.50 @tab Yes
+@item rw @tab Kinyarwanda @tab Latin @tab 0.50 @tab -
+@item
+@item sc @tab Sardinian @tab Latin @tab 0.50 @tab -
+@item sd @tab Sindhi @tab Arabic @tab - @tab -
+@item sg @tab Sango @tab Latin @tab Maybe @tab -
+@item si @tab Sinhalese @tab Sinhala @tab - @tab -
+@item sk @tab Slovak @tab Latin @tab 0.50 @tab Yes
+@item sl @tab Slovenian @tab Latin @tab 0.50 @tab Yes
+@item sm @tab Samoan @tab Latin @tab Maybe @tab -
+@item sn @tab Shona @tab Latin @tab Maybe @tab -
+@item so @tab Somali @tab Latin @tab Maybe @tab -
+@item sq @tab Albanian @tab Latin @tab Maybe @tab -
+@item sr @tab Serbian @tab Cyrillic, Latin @tab 0.60 @tab Incomplete
+@item ss @tab Swati @tab Latin @tab Maybe @tab -
+@item st @tab Southern Sotho @tab Latin @tab Maybe @tab -
+@item su @tab Sundanese @tab Latin @tab Maybe @tab -
+@item sv @tab Swedish @tab Latin @tab 0.50 @tab Incomplete
+@item sw @tab Swahili @tab Latin @tab 0.50 @tab -
+@item
+@item ta @tab Tamil @tab Tamil @tab 0.60 @tab -
+@item te @tab Telugu @tab Telugu @tab 0.60 @tab -
+@item tet @tab Tetum @tab Latin @tab 0.50 @tab -
+@item tg @tab Tajik @tab Arabic, Cyrillic, Latin @tab Maybe @tab Incomplete
+@item ti @tab Tigrinya @tab Ethiopic @tab Maybe @tab -
+@item tk @tab Turkmen @tab Arabic, Cyrillic, Latin @tab 0.50 @tab -
+@item tl @tab Tagalog @tab Latin, Tagalog @tab 0.50 @tab -
+@item tn @tab Tswana @tab Latin @tab 0.50 @tab -
+@item to @tab Tonga @tab Latin @tab Maybe @tab -
+@item tr @tab Turkish @tab Arabic, Latin @tab 0.50 @tab -
+@item ts @tab Tsonga @tab Latin @tab Maybe @tab -
+@item tt @tab Tatar @tab Cyrillic @tab - @tab -
+@item tw @tab Twi @tab Latin @tab - @tab -
+@item ty @tab Tahitian @tab Latin @tab Maybe @tab -
+@item
+@item ug @tab Uighur @tab Arabic, Cyrillic, Latin @tab - @tab -
+@item uk @tab Ukrainian @tab Cyrillic @tab 0.50 @tab Yes
+@item ur @tab Urdu @tab Arabic @tab Maybe @tab -
+@item uz @tab Uzbek @tab Cyrillic, Latin @tab 0.60 @tab -
+@item
+@item ve @tab Venda @tab Latin @tab Maybe @tab -
+@item vi @tab Vietnamese @tab Latin @tab 0.60 @tab Yes
+@item
+@item wa @tab Walloon @tab Latin @tab 0.50 @tab Incomplete
+@item wo @tab Wolof @tab Latin @tab Maybe @tab -
+@item
+@item xh @tab Xhosa @tab Latin @tab Maybe @tab -
+@item
+@item yi @tab Yiddish @tab Hebrew @tab 0.60 @tab -
+@item yo @tab Yoruba @tab Latin @tab Maybe @tab -
+@item
+@item za @tab Zhuang @tab Latin @tab - @tab -
+@item zu @tab Zulu @tab Latin @tab 0.50 @tab -
+
+@end multitable
diff --git a/manual/lang-unsupported.texi b/manual/lang-unsupported.texi
new file mode 100644 (file)
index 0000000..566919f
--- /dev/null
@@ -0,0 +1,10 @@
+@multitable {Code} {Language Name} {Han, Hangul}
+@item @b{Code} @tab @b{Language Name} @tab @b{Script}
+@item ja @tab Japanese @tab Japanese
+@item km @tab Khmer @tab Khmer
+@item ko @tab Korean @tab Han, Hangul
+@item lo @tab Lao @tab Lao
+@item th @tab Thai @tab Thai
+@item zh @tab Chinese @tab Han
+
+@end multitable
diff --git a/manual/lgpl.texi b/manual/lgpl.texi
new file mode 100644 (file)
index 0000000..14b49b8
--- /dev/null
@@ -0,0 +1,565 @@
+@node GNU Lesser General Public License
+@appendixsec GNU Lesser General Public License
+
+@cindex LGPL, Lesser General Public License
+@center Version 2.1, February 1999
+
+@display
+Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
+59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+as the successor of the GNU Library Public License, version 2, hence the
+version number 2.1.]
+@end display
+
+@appendixsubsec Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software---to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software---typically libraries---of the Free
+Software Foundation and other authors who decide to use it.  You can use
+it too, but we suggest you first think carefully about whether this
+license or the ordinary General Public License is the better strategy to
+use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of it
+in new free programs; and that you are informed that you can do these
+things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the @dfn{Lesser} General Public License because it
+does @emph{Less} to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+``work based on the library'' and a ``work that uses the library''.  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+@iftex
+@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end iftex
+@ifinfo
+@center GNU LESSER GENERAL PUBLIC LICENSE
+@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end ifinfo
+
+@enumerate 0
+@item
+This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this
+Lesser General Public License (also called ``this License'').  Each
+licensee is addressed as ``you''.
+
+  A ``library'' means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The ``Library'', below, refers to any such software library or work
+which has been distributed under these terms.  A ``work based on the
+Library'' means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term ``modification''.)
+
+  ``Source code'' for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+@item
+You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+@item
+You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+@enumerate a
+@item
+The modified work must itself be a software library.
+
+@item
+You must cause the files modified to carry prominent notices
+stating that you changed the files and the date of any change.
+
+@item
+You must cause the whole of the work to be licensed at no
+charge to all third parties under the terms of this License.
+
+@item
+If a facility in the modified Library refers to a function or a
+table of data to be supplied by an application program that uses
+the facility, other than as an argument passed when the facility
+is invoked, then you must make a good faith effort to ensure that,
+in the event an application does not supply such function or
+table, the facility still operates, and performs whatever part of
+its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has
+a purpose that is entirely well-defined independent of the
+application.  Therefore, Subsection 2d requires that any
+application-supplied function or table used by this function must
+be optional: if the application does not supply it, the square
+root function must still compute square roots.)
+@end enumerate
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+@item
+You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+@item
+You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+@item
+A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a ``work that uses the Library''.  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a ``work that uses the Library'' with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a ``work that uses the
+library''.  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a ``work that uses the Library'' uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+@item
+As an exception to the Sections above, you may also combine or
+link a ``work that uses the Library'' with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+@enumerate a
+@item
+Accompany the work with the complete corresponding
+machine-readable source code for the Library including whatever
+changes were used in the work (which must be distributed under
+Sections 1 and 2 above); and, if the work is an executable linked
+with the Library, with the complete machine-readable ``work that
+uses the Library'', as object code and/or source code, so that the
+user can modify the Library and then relink to produce a modified
+executable containing the modified Library.  (It is understood
+that the user who changes the contents of definitions files in the
+Library will not necessarily be able to recompile the application
+to use the modified definitions.)
+
+@item
+Use a suitable shared library mechanism for linking with the Library.  A
+suitable mechanism is one that (1) uses at run time a copy of the
+library already present on the user's computer system, rather than
+copying library functions into the executable, and (2) will operate
+properly with a modified version of the library, if the user installs
+one, as long as the modified version is interface-compatible with the
+version that the work was made with.
+
+@item
+Accompany the work with a written offer, valid for at
+least three years, to give the same user the materials
+specified in Subsection 6a, above, for a charge no more
+than the cost of performing this distribution.
+
+@item
+If distribution of the work is made by offering access to copy
+from a designated place, offer equivalent access to copy the above
+specified materials from the same place.
+
+@item
+Verify that the user has already received a copy of these
+materials or that you have already sent this user a copy.
+@end enumerate
+
+  For an executable, the required form of the ``work that uses the
+Library'' must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies the
+executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+@item
+You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+@enumerate a
+@item
+Accompany the combined library with a copy of the same work
+based on the Library, uncombined with any other library
+facilities.  This must be distributed under the terms of the
+Sections above.
+
+@item
+Give prominent notice with the combined library of the fact
+that part of it is a work based on the Library, and explaining
+where to find the accompanying uncombined form of the same work.
+@end enumerate
+
+@item
+You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+@item
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+@item
+Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+@item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+@item
+If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+@item
+The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+``any later version'', you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+@item
+If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@appendixsubsec How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the library's name and an idea of what it does.}
+Copyright (C) @var{year}  @var{name of author}
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at
+your option) any later version.
+
+This library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the library, if
+necessary.  Here is a sample; alter the names:
+
+@smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+`Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+@var{signature of Ty Coon}, 1 April 1990
+Ty Coon, President of Vice
+@end smallexample
+
+That's all there is to it!
diff --git a/manual/mksrc.texi b/manual/mksrc.texi
new file mode 100644 (file)
index 0000000..486508f
--- /dev/null
@@ -0,0 +1,297 @@
+@section mk-src.in
+
+NOTE: This section may not always be up to date since it is manually
+converted from the pod source.
+
+The format of @file{mk-src.in} is as follows:
+
+@verbatim
+    The following characters are literals: { } / '\ ' \n = >
+
+    <items>
+    <items> := (<item>\n)+
+    <items> := <category>:\ <name> {\n<details>\n} | <<tab>><details>
+    <details> := <options>\n /\n <items>
+    <options> := (<option>\n)*
+    <option> := <key> [=> <value>]
+
+    <<tab>> means everything should be indented by one tab
+@end verbatim
+
+    See MkSrc::Info for a description of the categories and options
+
+@section MkSrc::Info
+
+  @code{%info}
+
+    The info array contains information on how to process the info in
+    @file{mk-src.pl}. It has the following layout
+
+@verbatim
+    <catagory> => options => [] 
+                  groups => [] # if undef than anything is accepted
+                  creates_type => "" # the object will create a new type
+                                     # as specified
+                  proc => <impl type> => sub {}
+@end verbatim
+    where <impl type> is one of:
+@verbatim
+    cc: for "aspell.h" header file
+    cxx: for C++ interface implemented on top of cc interface
+    native: for creation of header files used internally by aspell
+    impl: for defination of functions declared in cc interface.
+          the definations use the native hedaer files
+    native_impl: for implementations of stuff declared in the native
+                  header files
+@end verbatim
+    each proc sub should take the following argv
+@verbatim
+    $data: a subtree of $master_data
+    $accum: 
+@end verbatim
+    <options> is one of:
+@verbatim
+    desc: description of the object
+    prefix:
+    posib err: the method may return an error condition
+    c func:
+    const: the method is a const member
+    c only: only include in the external interface
+    c impl headers: extra headers that need to be included in the C impl
+    c impl: use this as the c impl instead of the default
+    cxx impl: use this as the cxx impl instead of the default
+    returns alt type: the constructor returns some type other than
+      the object from which it is a member of
+    no native: do not attemt to create a native implementation
+    treat as object: treat as a object rather than a pointer
+@end verbatim
+    The @code{%info} structure is initialized as follows:
+@verbatim
+    our %info =
+    (
+     root => { 
+       options => [],
+       groups => ['methods', 'group']},
+     methods => {
+       # methods is a collection of methods which will be inserted into
+       # a class after some simple substation rules.  A $ will be
+       # replaced with name of the class.
+       options => ['strip', 'prefix', 'c impl headers'],
+       groups => undef},
+     group => {
+       # a group is a colection of objects which should be grouped together
+       # this generally means they will be in the same source file
+       options => ['no native'],
+       groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
+     enum => {
+       # basic C enum
+       options => ['desc', 'prefix'],
+       creates_type => 'enum'},
+     struct => {
+       # basic c struct
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'struct',},
+     union => {
+       # basic C union
+       options => ['desc', 'treat as object'],
+       groups => undef,
+       creates_type => 'union'},
+     class => {
+       # C++ class
+       options => ['c impl headers'],
+       groups => undef,
+       creates_type => 'class'},
+     errors => {}, # possible errors
+     method => {
+       # A class method
+       options => ['desc', 'posib err', 'c func', 'const',
+                   'c only', 'c impl', 'cxx impl'],
+       groups => undef},
+     constructor => {
+       # A class constructor
+       options => ['returns alt type', 'c impl', 'desc'],
+       groups => 'types'},
+     destructor => {
+       # A class destructor
+       options => [],
+       groups => undef},
+     );
+@end verbatim
+    In addition to the categories listed above a ``methods'' category by be
+    specified in under the class category. A ``methods'' category is created
+    for each methods group under the name ``<methods name> methods''. When
+    groups is undefined a type name may be specified in place of a category.
+
+  @code{%types}
+
+    types contains a master list of all types. This includes basic types and
+    ones created in @file{mk-src.in}. The basic types include:
+@verbatim
+    'void', 'bool', 'pointer', 'double',
+    'string', 'encoded string', 'string obj',
+    'char', 'unsigned char',
+    'short', 'unsigned short',
+    'int', 'unsigned int',
+    'long', 'unsigned long'
+@end verbatim
+  %methods
+
+    @code{%methods} is used for holding the ``methods'' information
+
+@section MkSrc::Util
+
+    This module contains various useful utility functions:
+@table @code
+    @item false
+        Returns 0.
+
+    @item true
+        Returns 1.
+
+    @item cmap EXPR LIST
+        Apply EXPR to each item in LIST and than concatenate the result into
+        a string
+
+    @item one_of STR LIST
+        Returns true if LIST contains at least one of STR.
+
+    @item to_upper STR
+        Convert STR to all uppercase and substitute spaces with underscores.
+
+    @item to_lower STR
+        Convert STR to all lowercase and substitute spaces with underscores.
+
+    @item to_mixed STR
+        Convert STR to mixed case where each new word startes with a
+        uppercase letter. For example "feed me" would become "FeedMe".
+@end table
+
+@section MkSrc::Read
+
+    @code{read}
+        Read in @file{mk-src.in} and return a data structure which has the
+        following format:
+@verbatim
+      <tree>
+      <tree> := <options>
+                data => <tree>
+    where each tree represents an entry in mk-src.in.  
+    The following two options are always provided:
+      name: the name of the entry
+      type: the catagory or type name
+    Additional options are the same as specified in %info
+@end verbatim
+
+@section MKSrc::Create
+
+@table @code
+    @item create_cc_file PARMS
+        Create a source file.
+@example
+     Required Parms: type, dir, name, data
+     Boolean Parms:  header, cxx
+     Optional Parms: namespace (required if cxx), pre_ext,
+                     accum
+@end example
+
+    @item create_file FILENAME DATA
+        Writes DATA to FILENAME but only if DATA differs from the content of
+        the file and the string:
+@example
+     Automatically generated file.
+@end example
+
+        is present in the existing file if it already exists.
+@end table
+
+@section Code Generation Modes
+
+    The code generation modes are currently one of the following:
+@example
+     cc:     Mode used to create types suitable for C interface
+     cc_cxx: Like cc but typenames don't have a leading Aspell prefix
+     cxx:    Mode used to create types suitable for CXX interface
+     native: Mode in which types are suitable for the internal
+             implementation
+     native_no_err: Like Native but with out PosibErr return types
+@end example
+
+@section MkSrc::CcHelper
+
+    Helper functions used by interface generation code:
+@example
+    to_c_return_type ITEM
+        .
+
+    c_error_cond ITEM
+        .
+@end example
+
+@table @code
+    @item make_func NAME @@TYPES PARMS ; %ACCUM
+        Creates a function prototype
+
+        Parms can be any of:
+@example
+          mode: code generation mode
+@end example
+
+    @item call_func NAME @@TYPES PARMS ; %ACCUM
+        Return a string to call a func. Will prefix the function with return
+        if the functions returns a non-void type;
+
+        Parms can be any of:
+@example
+          mode: code generation mode
+@end example
+
+    @item to_type_name ITEM PARMS ; %ACCUM
+        Converts item into a type name.
+
+        Parms can be any of:
+@example
+     mode: code generation mode
+     use_type: include the actual type
+     use_name: include the name on the type
+     pos: either "return" or "other"
+@end example
+
+    @item make_desc DESC ; LEVEL
+        Make a C comment out of DESC optionally indenting it LEVEL spaces.
+
+    @item make_c_method CLASS ITEM PARMS ; %ACCUM
+        Create the phototype for a C method which is really a function.
+
+        Parms is any of:
+@example
+     mode:      code generation mode
+     no_aspell: if true do not include aspell in the name
+     this_name: name for the parameter representing the
+                current object
+@end example
+
+    @item call_c_method CLASS ITEM PARMS ; %ACCUM
+        Like make_c_method but instead returns the appropriate string to
+        call the function. If the function returns a non-void type the
+        string will be prefixed with a return statement.
+
+    @item form_c_method CLASS ITEM PARMS ; %ACCUM
+        Like make_c_method except that it returns the array:
+@example
+     ($func, $data, $parms, $accum)
+@end example
+
+        which is suitable for passing into make_func. It will return an
+        empty array if it can not make a method from ITEM.
+
+    @item make_cxx_method ITEM PARMS ; %ACCUM
+        Create the phototype for a C++ method.
+
+        Parms is one of:
+@example
+     mode: code generation mode
+@end example
+@end table
+
+
diff --git a/manual/oo-only.texi b/manual/oo-only.texi
new file mode 100644 (file)
index 0000000..697fded
--- /dev/null
@@ -0,0 +1,18 @@
+@itemize
+@item Coptic (cop)
+@item Dyula (dyu)
+@item Fulah (ff)
+@item Fijian (fj)
+@item Friulian (fur)
+@item Khmer (km)
+@item Luxembourgish (lb)
+@item Mossi (mos)
+@item Nepali (ne)
+@item South Ndebele (nr)
+@item Northern Sotho (nso)
+@item Swati (ss)
+@item Southern Sotho (st)
+@item Tsonga (ts)
+@item Venda (ve)
+@item Xhosa (xh)
+@end itemize
diff --git a/manual/prezip-bin.1 b/manual/prezip-bin.1
new file mode 100644 (file)
index 0000000..afb6c05
--- /dev/null
@@ -0,0 +1,115 @@
+.TH PREZIP\-BIN 1 "2005-09-30" "prezip\-bin\-0.1.2" "Aspell Abbreviated User's Manual"
+.SH NAME
+prezip\-bin \- prefix zip delta word list compressor/decompressor
+.SH SYNOPSIS
+.B prezip\-bin
+[ \fB\-V\fR | \fB\-d\fR | \fB\-z\fR ]
+.SH DESCRIPTION
+.B prezip\-bin
+compresses/decompresses sorted word lists from standard input to
+standard output.
+.PP
+.I Prezip\-bin
+is similar to
+.I word\-list\-compress(1)
+but it allows a larger character set of
+{0x00...0x09, 0x0B, 0x0C, 0x0E...0xFF} and multi\-words larger than 255
+characters in length.  It can also decompress
+.I word\-list\-compress(1)
+compatible files.
+.SH COMMANDS
+.I Prezip\-bin
+accepts only one of these commands.
+.TP
+\fB-V\fR
+Display
+.I prezip\-bin
+version number to standard output.
+.TP
+\fB-d\fR
+Read a compressed word list from standard input and decompress it to
+standard output.  This can be a
+.I word\-list\-compress(1)
+or a
+.I prezip\-bin
+compressed file.
+.TP
+\fB-z\fR
+Read a binary word list from standard input and compress it to
+standard output.
+.SH EXAMPLES
+.TP
+prezip\-bin \fB\-d\fR <wordlist.cwl >wordlist.txt
+Decompress file wordlist.cwl to text file wordlist.txt
+.TP
+prezip\-bin \fB\-z\fR <wordlist.txt >wordlist.pz 2>errors.txt
+Compress wordlist.txt to binary file wordlist.pz and send any error
+messages to a text file named errors.txt
+.TP
+LC_COLLATE\=C sort \-u <wordlist.txt \fB|\fR prezip\-bin \-z >wordlist.pz
+Sort a word list, then pipe it to
+.I prezip\-bin
+to create a compressed binary wordlist.pz file.
+.TP
+prezip\-bin \-d <words.pz \fB|\fR aspell create master ./words.rws
+Decompress a wordlist, then pipe it to
+.I aspell(1)
+to create a spelling list.  Please check the
+.I aspell(1)
+info manual for proper usage and options.
+.SH TIPS
+.I Prezip\-bin
+is best used with sorted word list type files.  It is not a general
+purpose compression program since resulting files may actually
+increase in size.
+.PP
+Unlike
+.I word\-list\-compress(1)
+if your word list has leading or trailing blank spaces for formatting
+purposes, you should remove them first before you compress your list
+using
+.I prezip\-bin \-z
+, otherwise those spaces will be included in the compressed binary
+output.
+.SH DIAGNOSTICS
+.I Prezip\-bin
+normally exits with a return code of 0. If it encounters an error,
+a message is sent to standard error output (stderr), and
+.I prezip\-bin
+exits with a non-zero return value.  Error messages are listed below:
+.TP
+\fB(display help/usage message)\fR
+Unknown command given on the command line so
+.I prezip\-bin
+displays a usage message to standard error output.
+.TP
+\fBunknown format\fR
+The input file appears not to be an expected format, or may possibly be
+a more advanced format.  The output file will be empty.
+.TP
+\fBcorrupt input\fR
+This is only for the decompression command \fB\-d\fR. The input file
+appeared to be of a correct format, but something appears wrong now.
+There may be some valid data in output, but due to input corruption,
+the rest of the file can not be completed.
+.TP
+\fBunexpected EOF\fR
+The input file appeared okay but ended sooner than expected, therefore
+the output file is not complete.
+.SH SEE ALSO
+.PP
+.BR aspell (1),
+.BR aspell\-import (1),
+.BR run\-with\-aspell (1),
+.BR word\-list\-compress (1)
+.PP
+Aspell is fully documented in its Texinfo manual.  See the
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH REPORTING BUGS
+For help, see the Aspell homepage at <http://aspell.net>.  Send bug
+reports/comments to the Aspell user list at the above address.
+.SH AUTHOR
+This info page was written by Jose Da Silva <digital@joescat.com>.
\ No newline at end of file
diff --git a/manual/pspell-config.1 b/manual/pspell-config.1
new file mode 100644 (file)
index 0000000..7465925
--- /dev/null
@@ -0,0 +1,25 @@
+.TH PSPELL\-CONFIG 1 "2004-03-02" "GNU" "Aspell Abbreviated User's Manual"
+.SH NAME
+pspell\-config \- prints information about a libpspell installation
+.SH SYNOPSIS
+.B pspell\-config
+.I "[options]"
+.br
+.SH DESCRIPTION
+.B pspell\-config
+displays information about libpspell installation, mostly for use in
+build scripts.  Note that this script is provided for backward
+compatibility with programs that use pspell.  Do not use as it will
+eventually go away.
+.SH OPTIONS
+.TP
+.B "\-\-version"
+outputs version information about the installed pspell
+.TP
+.B "\-\-datadir"
+displays the data directory
+.TP
+.B "\-\-pkgdatadir"
+displays the aspell package directory
+.SH AUTHOR
+This manual page was written by Brian Nelson <pyro@debian.org>.
diff --git a/manual/readme.texi b/manual/readme.texi
new file mode 100644 (file)
index 0000000..4bfb2e2
--- /dev/null
@@ -0,0 +1,423 @@
+@node Installing
+@appendix Installing
+
+Aspell requires gcc 2.95 (or better) as the C++ compiler.  Other C++
+compilers should work with some effort.  Other C++ compilers for mostly
+POSIX compliant (Unix, Linux, BeOS, Cygwin) systems should work without
+any major problems provided that the compile can handle all of the
+advanced C++ features Aspell uses.  C++ compilers for non-Unix systems
+might work but it will take some work.  Aspell at very least requires a
+Unix-like environment (@file{sh}, @file{grep}, @file{sed}, @file{tr},
+@dots{}), and Perl in order to build.  Aspell also uses a few POSIX
+functions when necessary.
+
+The latest version can always be found at GNU Aspell's home page at
+@uref{http://aspell.net}.
+
+@menu
+* Generic Install Instructions::  
+* HTML Manuals and "make clean"::  
+* Curses Notes::                
+* Loadable Filter Notes::       
+* Upgrading from Aspell 0.50::  
+* Upgrading from Aspell .33/Pspell .12::  
+* Upgrading from a Pre-0.50 snapshot::  
+* WIN32 Notes::                 
+@end menu
+
+@node Generic Install Instructions
+@appendixsec Generic Install Instructions
+
+@example
+./configure && make
+@end example
+
+For additional @command{configure} options type @samp{./configure
+--help}.  You can control what C++ compiler is used by setting the
+environment variable @env{CXX} before running configure and you can
+control what flags are passed to the C++ compile via the environment
+variable @env{CXXFLAGS}.  Static libraries are disabled by default
+since static libraries will not work right due to the mixing of C and
+C++.  When a C program links with the static libraries in Aspell it is
+likely to crash because Aspell's C++ objects are not getting
+initialized correctly.  However, if for some reason you want them, you
+can enable them via @option{--enable-static}.
+
+Aspell should then compile without any additional user intervention.
+If you run into problems please first check the sections below as that
+might solve your problem.
+
+To install the program simply type
+
+@example
+make install
+@end example
+
+After Aspell is installed at least one dictionary needs to be
+installed.  You can find them at @uref{http://aspell.net/}.  The
+@command{aspell} program must be in your path in order for the
+dictionaries to install correctly.
+
+If you do not have Ispell or the traditional Unix @command{spell} utility
+installed on your system then you should also copy the compatibility
+scripts @command{ispell} and @command{spell} located in the @file{scripts/}
+directory into your binary directory which is usually
+@file{/usr/local/bin} so that programs that expect the
+@command{ispell} or @command{spell} command will work correctly.
+
+@node HTML Manuals and "make clean"
+@appendixsec HTML Manuals and @command{make clean}
+
+The Aspell distribution includes HTML versions of the User and
+Developer's manual.  Unfortunately, doing a @command{make clean} will
+erase them.  This is due to a limitation of automake which is not
+easily fixed.  If makeinfo is installed they can easily be rebuild
+with @command{make aspell.html aspell-dev.html}, or you can unpack
+them from the tarbar.
+
+@node Curses Notes
+@appendixsec Curses Notes
+
+If you are having problems compiling @file{check_funs.cpp} then the
+most likely reason is due to incompatibilities with the curses
+implementation on your system.  You should first try disabling the
+``wide'' curses library by with the @option{--disable-wide-curses}
+configure option..  By doing so you will lose support for properly
+displaying UTF-8 characters but you may still be able to get the full
+screen interface.  If this fails than you can disable curses support
+altogether with the @option{--disable-curses} configure option.  By
+doing this you will lose the nice full screen interface but hopefully
+you will be able to at least get Aspell to compile correctly.
+
+If the curses library is installed in a non-standard location than you
+can specify the library and include directory with
+@option{--enable-curses=@var{lib}} and
+@option{--enable-curses-include=@var{dir}}.
+
+@option{@var{lib}} can either be the complete path of the library---for
+example
+@example
+/usr/local/curses/libcurses.a
+@end example
+or the name of the library (for example
+@file{ncurses}) or a combined location and library in the form
+@option{-L@var{libdir} -l@var{lib}} (for example
+@option{-L/usr/local/@/ncurses/lib -lncurses}).
+
+@var{dir} is the location of the curses header files (for example
+@file{/usr/local/@/ncurses/include}).
+
+@appendixsubsec Unicode Support
+
+In order for Aspell to correctly spell check UTF-8 documents in full
+screen mode the "wide" version of the curses library must be
+installed.  This is different from the normal version of curses
+library, and is normally named @file{libcursesw} (with a @samp{w} at
+the end) or @file{libncursesw}.  UTF-8 documents will not display
+correctly without the right curses version installed.
+
+In addition your system must also support the @code{mblen} function.
+Although this function was defined in the ISO C89 standard (ANSI
+X3.159-1989), not all systems have it.
+
+@node Loadable Filter Notes
+@appendixsec Loadable Filter Notes
+
+Support for being able to load additional filter modules at run-time
+has only been verified to work on Linux platforms.  If you get linker
+errors when trying to use a filter, then it is likely that loadable
+filter support is not working yet on your platform.  Thus, in order to
+get Aspell to work correctly you will need to avoid compiling the
+filters as individual modules by using the
+@option{--enable-compile-in-filters} when configuring Aspell with
+@command{./configure}.
+
+@node Upgrading from Aspell 0.50
+@appendixsec Upgrading from Aspell 0.50
+
+The dictionary format has changed so dictionaries will need to be
+recompiled.
+
+All data, by default, is now included in @file{@var{libdir}/aspell-0.60} so
+that multiple versions of Aspell can more peacefully coexist.  This
+included both the dictionaries and the language data files which were
+stored in @file{@var{sharedir}/aspell} before Aspell 0.60.
+
+The format of the character data files has changed.  The new character
+data files are installed with Aspell so you should not have to worry
+about it unless you made a custom one.
+
+The dictionary option @option{strip-accents} has been removed.  For
+this reason the old English dictionary (up to 0.51) will no longer
+work.  A new English dictionary is now available which avoids using
+this option.  In addition the @option{ignore-accents} option is
+currently unimplemented.
+
+The flag @option{-l} is now a shortcut for @option{--lang}, instead of
+@option{--list} as it was with Aspell 0.50.
+
+@anchor{Binary Compatibility}
+@appendixsubsec Binary Compatibility
+
+The Aspell 0.60 library is binary compatible with the Aspell 0.50
+library.  For this reason I chose @emph{not} to increment the major
+version number (so-name) of the shared library by default which means
+programs that were compiled for Aspell 0.50 will also work for Aspell
+0.60.  However, this means that having both Aspell 0.50 and Aspell 0.60
+installed at the same time can be pragmatic.  If you wish to allow both
+Aspell 0.50 and 0.60 to be installed at the same time then you can use
+the configure option @option{--incremented-soname} which will increment
+so-name.  You should only use this option if you know what you are
+doing.  It is up to you to somehow ensure that both the Aspell 0.50 and
+0.60 executables can coexist.
+
+If after incrementing the so-name you wish to allow programs compiled
+for Aspell 0.50 to use Aspell 0.60 instead (thus implying that Aspell
+0.50 is not installed) then you can use a special compatibility library
+which can be found in the @file{lib5} directory.  This directory will
+not be entered when building or installing Aspell so you must manually
+build and install this library.  You should build it after the rest of
+Aspell is built.  The order in which this library is installed, with
+relation to the rest of Aspell, is also important.  If it is installed
+@emph{after} the rest of Aspell then new programs will link to the old
+library (which will work for Aspell 0.50 or 0.60) when built, if
+installed @emph{before}, new programs will link with the new library
+(Aspell 0.60 only).
+
+@node Upgrading from Aspell .33/Pspell .12
+@appendixsec Upgrading from Aspell .33/Pspell .12
+
+Aspell has undergone an extremely large number of changes since the
+previous Aspell/Pspell release.  For one thing Pspell has been merged
+with Aspell so there in no longer two separate libraries you have to
+worry about.
+
+Because of the massive changes between Aspell/Pspell and Aspell 0.50
+you may want to clean out the old files before installing the the new
+Aspell.  To do so do a @samp{make uninstall} in the original Aspell
+and Pspell source directories.
+
+The way dictionaries are handled has also changed.  This includes a
+change in the naming conventions of both language names and
+dictionaries.  Due to the language name change, your old personal
+dictionaries will not be recognized.  However, you can import the old
+dictionaries by running the @command{aspell-import} script.  This also
+means that dictionaries designed to work with older versions of Aspell
+are not likely to function correctly.  Fortunately new dictionary
+packages are available for most languages.  You can find them off of
+the Aspell home page at @uref{http://aspell.net}.
+
+The Pspell ABI is now part of Aspell except that the name of
+everything has changed due to the renaming of Pspell to Aspell.  In
+particular please note the following name changes:
+
+@example
+pspell -> aspell
+manager -> speller
+emulation -> enumeration
+master_word_list -> main_word_list
+@end example
+
+Please also note that the name of the @option{language-tag} option has
+changed to @option{lang}.  However, for backward compatibility the
+@option{language-tag} option will still work.
+
+However, you should also be able to build applications that require
+Pspell with the new Aspell as a backward compatibility header file is
+provided.
+
+Due to a change in the way dictionaries are handled, scanning for
+@file{.pwli} files in order to find out which dictionaries are
+available will no longer work.  This means that programs that relied
+on this technique may have problems finding dictionaries.
+Fortunately, GNU Aspell now provided a uniform way to list all
+installed dictionaries via the c API.  See the file
+@file{list-dicts.c} in the @file{examples/} directory for an example
+of how to do this.  Unfortunately there isn't any simple way to find
+out which dictionaries are installed which will work with both the old
+Aspell/Pspell and the new GNU Aspell.
+
+@node Upgrading from a Pre-0.50 snapshot
+@appendixsec Upgrading from a Pre-0.50 snapshot
+
+At the last minute I decided to merge the @file{speller-util} program
+into the main @file{aspell} program.  You may wish to remove that
+@file{speller-util} program to avoid confusion.  This also means that
+dictionaries designed to work with the snapshot will no longer work
+with the official release.
+
+@node WIN32 Notes
+@appendixsec WIN32 Notes
+
+@appendixsubsec Getting the WIN32 version
+
+The latest version of the native Aspell/WIN32 port, including
+binaries, can be found at @uref{http://aspell.net/win32}.  This page
+has, unfortunately, not been updated for Aspell 0.60.  If you are
+interested in updated the native port please let me know.
+
+@appendixsubsec Building the WIN32 version
+
+There are two basically different ways of building Aspell using GCC
+for WIN32: You can either use the Cygwin compiler, which will produce
+binaries that depend on the POSIX layer in @file{cygwin1.dll}.  The
+other way is using MinGW GCC, those binaries use the native C runtime
+from Microsoft (MSVCRT.DLL).  
+
+@c FIXME: Is the following true?
+@c If you intend to use or link against the
+@c Aspell libraries using a native WIN32 compiler (e.g.  MS Visual C++),
+@c you will need the MinGW built ones to avoid problems caused by the
+@c different runtime libraries.
+
+@appendixsubsubsec Building Aspell using Cygwin
+
+This works exactly like on other POSIX
+compatible systems using the @samp{./configure && make && make install}
+cycle.  Some versions of Cygwin GCC will fail to link, this is caused
+by an incorrect @file{libstdc++.la} in the @file{/lib} directory.
+After removing or renaming this file, the build progress should work
+(GCC-2.95 and GCC-3.x should work).
+
+@appendixsubsubsec Building Aspell using MinGW
+
+There are several different ways to build Aspell using MinGW.  The
+easiest way is to use a Cygwin compiler but instruct it to build a
+native binary rather than a Cygwin one.  To do this configure with:
+
+@example
+./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin'
+@end example
+
+You may also want to add the option
+@option{--enable-win32-relocatable} to use more windows friendly
+directories.  @xref{Win32-Directories}.  In this case configure with:
+
+@smallexample
+./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin' --enable-win32-relocatable
+@end smallexample
+
+It should also be possible to build Aspell using the MSYS environment.
+But this has not been very well tested.  If building with MSYS
+@emph{do not} add @samp{CFLAGS @dots{}} to configure.
+
+@appendixsubsubsec Building Aspell without using Cygwin or MSYS 
+
+It is also possible to build Aspell without Cygwin of MinGW by using
+the files in the @file{win32/} subdirectory.  However, these files
+have not been updated to work with Aspell 0.60.  Thus the following
+instructions will not work without some effort.  If you do get Aspell
+to compile this way please send me the updated files so that I can
+include them with the next release.
+
+To compile Aspell with the MinGW
+compiler, you will need at least GCC-3.2 (as shipped with MinGW-2.0.3)
+and some GNU tools like @command{rm} and @command{cp}.  The origin of
+those tools doesn't matter, it has shown to work with any tools from
+MinGW/MSys, Cygwin or Linux.  To build Aspell, move into the
+@file{win32} subdirectory and type @samp{make}.  You can enable some
+additional build options by either commenting out the definitions at
+the head of the Makefile or passing those values as environment
+variables or at the @command{make} command line.  Following options
+are supported:
+
+@table @option
+@item DEBUGVERSION
+If set to "1", the binaries will include debugging information
+(resulting in a much bigger size).
+
+@item CURSESDIR
+Enter the path to the pdcurses library here, in order to get a nicer
+console interface (see below).
+
+@item MSVCLIB
+Enter the filename of MS @file{lib.exe} here, if you want to build
+libraries that can be imported from MS Visual C++.
+
+@item WIN32_RELOCATABLE
+If set to "1", Aspell will detect the prefix from the path where the
+DLL resides (see below for further details).
+
+@item TARGET
+Sets a prefix to be used for cross compilation (e.g.
+@file{/usr/local/bin/@/i586-mingw32msvc-} to cross compile from Linux).
+@end table
+
+There are also a MinGW compilers available for Cygwin and Linux, both
+versions are able to compile Aspell using the prebuilt
+@file{Makefile}.  While the Cygwin port automatically detects the
+correct compiler, the Linux version depends on setting the
+@env{TARGET} variable in the @file{Makefile} (or environment) to the
+correct compiler prefix.
+
+Other compilers may work.  There is a patch for MS Visual C++ 6.0
+available at @uref{ftp://ftp.gnu.org/gnu/aspell}, but it needs a lot
+of changes to the Aspell sources.  It has also been reported that the
+Intel C++ compiler can be used for compilation.
+
+@appendixsubsec (PD)Curses
+
+In order to get the nice full screen interface when spell checking
+files, a curses implementation that does not require Cygwin is
+required.  The PDCurses (@uref{http://pdcurses.sourceforge.net})
+implementation is known to work, other implementations may work
+however they have not been tested.  See the previous section for
+information on specifying the location of the curses library and
+include file.
+
+Curses notes:
+
+@itemize @bullet
+
+@item
+PDcurses built with MinGW needs to be compiled with
+@option{-DPDC_STATIC_BUILD} to avoid duplicate declaration of
+@file{DllMain} when compiling @file{aspell.exe}.
+
+@item
+The curses enabled version can cause trouble in some shells (MSys
+@command{rxvt}, @command{emacs}) and will produce errors like
+@samp{initscr() LINES=1 COLS=1: too small}.  Use a non-curses version
+for those purposes.
+@end itemize
+
+@anchor{Win32-Directories}
+@appendixsubsec Directories
+
+If Aspell is configured with @option{--enable-win32-relocatable} or
+compiled with @option{WIN32_RELOCATABLE=1} when using a Makefile, it
+can be run from any directory: it will set @option{@var{prefix}}
+according to its install location (assuming it resides in
+@file{@var{prefix}\\bin}).  Your personal wordlists will be saved in
+the @file{@var{prefix}} directory with their names changed from
+@file{.aspell.@var{lang}.*} to @file{@var{lang}.*} (you can override
+the path by setting the @env{HOME} environment variable).
+
+@appendixsubsec Installer
+
+The installer registers the DLLs as shared libraries, you should
+increase the reference counter to avoid the libraries being
+uninstalled if your application still depends on them (and decrease it
+again when uninstalling your program).  The reference counters are
+located under:
+@example
+HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
+@end example
+
+The install location and version numbers are stored under
+
+@example
+HKLM\SOFTWARE\Aspell
+@end example
+
+@appendixsubsec WIN32 consoles
+
+The console uses a different encoding than GUI applications, changing
+this to to a Windows encoding (e.g.  1252) is not supported on
+Win9x/Me.  On WinNT (and later) those codepages can be set by first
+changing the console font to @samp{lucida console}, then changing the
+codepage using @samp{chcp 1252}.
+
+Some alternative shells (e.g. MSys' @command{rxvt} or Cygwin's
+@command{bash}) do a codepage conversion (if correctly set up), so
+running Aspell inside those shells might be a workaround for Win9x.
diff --git a/manual/run-with-aspell.1 b/manual/run-with-aspell.1
new file mode 100644 (file)
index 0000000..8dea131
--- /dev/null
@@ -0,0 +1,41 @@
+.TH RUN-WITH-ASPELL 1 "2004-03-03" "GNU" "Aspell Abbreviated User's Manual"
+.SH NAME
+run\-with\-aspell \- script to help use GNU Aspell as an ispell
+replacement
+.SH SYNOPSIS
+.B run\-with\-aspell
+.I "<command>"
+.br
+.SH "DESCRIPTION"
+The recommended way to use 
+.B Aspell
+as a replacement for
+.B Ispell
+is to change the 
+.B Ispell
+command from within the program being used.  If that is not possible,
+the
+.B run-with-aspell
+script may be used instead.
+.SH OPTIONS
+.TP
+.B <command>
+is the name of the program with any optional arguments.
+.PP
+The old method of mapping ispell to Aspell is discouraged because it can
+create compatibility problems with programs that actually require ispell
+such as ispell's own scripts.
+.SH SEE ALSO
+.PP
+.BR aspell (1),
+.BR aspell\-import (1),
+.BR word\-list\-compress (1)
+.PP
+Aspell is fully documented in its Texinfo manual.  See the
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH AUTHOR
+This manual page was written by Sudhakar Chandrasekharan
+<thaths@netscape.com> and Brian Nelson <pyro@debian.org>.
diff --git a/manual/texinfo.tex b/manual/texinfo.tex
new file mode 100644 (file)
index 0000000..9140826
--- /dev/null
@@ -0,0 +1,9291 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+% 
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2009-08-14.15}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009 Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software: you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program.  If not, see <http://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction.  (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+%   ftp://tug.org/tex/texinfo.tex
+%     (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent.  You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+  \catcode`+=\active \catcode`\_=\active}
+
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active
+\global\let\ptexquoteright'}% Math-mode def from plain.tex.
+\let\ptexraggedright=\raggedright
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Pre-3.0.
+\else
+  \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar  = `\-
+\chardef\dotChar   = `\.
+\chardef\exclamChar= `\!
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar  = `\;
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+  ap-pen-dix bit-map bit-maps
+  data-base data-bases eshell fall-ing half-way long-est man-u-script
+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+  spell-ing spell-ings
+  stand-alone strong-est time-stamp time-stamps which-ever white-space
+  wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal.  We don't just call \tracingall here,
+% since that produces some useless output on the terminal.  We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+  \tracingstats2
+  \tracingpages1
+  \tracinglostchars2  % 2 gives us more in etex
+  \tracingparagraphs1
+  \tracingoutput1
+  \tracingmacros2
+  \tracingrestores1
+  \showboxbreadth\maxdimen \showboxdepth\maxdimen
+  \ifx\eTeXversion\undefined\else % etex gives us more logging
+    \tracingscantokens1
+    \tracingifs1
+    \tracinggroups1
+    \tracingnesting2
+    \tracingassigns1
+  \fi
+  \tracingcommands3  % 3 gives us more in etex
+  \errorcontextlines16
+}%
+
+% add check for \lastpenalty to plain's definitions.  If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+  \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+  \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+  \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.  The solution is
+% described on page 260 of The TeXbook.  It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after.  I won't pretend I can describe this better than DEK...
+\def\domark{%
+  \toks0=\expandafter{\lastchapterdefs}%
+  \toks2=\expandafter{\lastsectiondefs}%
+  \toks4=\expandafter{\prevchapterdefs}%
+  \toks6=\expandafter{\prevsectiondefs}%
+  \toks8=\expandafter{\lastcolordefs}%
+  \mark{%
+                   \the\toks0 \the\toks2
+      \noexpand\or \the\toks4 \the\toks6
+    \noexpand\else \the\toks8
+  }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+  \ifcase0\topmark\fi
+  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument.  Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+  %
+  \ifodd\pageno  \advance\hoffset by \bindingoffset
+  \else \advance\hoffset by -\bindingoffset\fi
+  %
+  % Do this outside of the \shipout so @code etc. will be expanded in
+  % the headline as they should be, not taken literally (outputting ''code).
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+  %
+  {%
+    % Have to do this stuff outside the \shipout because we want it to
+    % take effect in \write's, yet the group defined by the \vbox ends
+    % before the \shipout runs.
+    %
+    \indexdummies         % don't expand commands in the output.
+    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+               % the page break happens to be in the middle of an example.
+               % We don't want .vr (or whatever) entries like this:
+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % "\acronym" won't work when it's read back in;
+               % it needs to be
+               % {\code {{\tt \backslashcurfont }acronym}
+    \shipout\vbox{%
+      % Do this early so pdf references go to the beginning of the page.
+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+      %
+      \ifcropmarks \vbox to \outervsize\bgroup
+        \hsize = \outerhsize
+        \vskip-\topandbottommargin
+        \vtop to0pt{%
+          \line{\ewtop\hfil\ewtop}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vss}%
+        \vskip\topandbottommargin
+        \line\bgroup
+          \hfil % center the page within the outer (page) hsize.
+          \ifodd\pageno\hskip\bindingoffset\fi
+          \vbox\bgroup
+      \fi
+      %
+      \unvbox\headlinebox
+      \pagebody{#1}%
+      \ifdim\ht\footlinebox > 0pt
+        % Only leave this space if the footline is nonempty.
+        % (We lessened \vsize for it in \oddfootingyyy.)
+        % The \baselineskip=24pt in plain's \makefootline has no effect.
+        \vskip 24pt
+        \unvbox\footlinebox
+      \fi
+      %
+      \ifcropmarks
+          \egroup % end of \vbox\bgroup
+        \hfil\egroup % end of (centering) \line\bgroup
+        \vskip\topandbottommargin plus1fill minus1fill
+        \boxmaxdepth = \cornerthick
+        \vbox to0pt{\vss
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \line{\ewbot\hfil\ewbot}%
+        }%
+      \egroup % \vbox from first cropmarks clause
+      \fi
+    }% end of \shipout\vbox
+  }% end of group with \indexdummies
+  \advancepageno
+  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks.  Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1.  The argument is the rest of
+% the input line (except we remove a trailing comment).  #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+  \def\argtorun{#2}%
+  \begingroup
+    \obeylines
+    \spaceisspace
+    #1%
+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+  \gdef\parseargline#1^^M{%
+    \endgroup % End of the group started in \parsearg.
+    \argremovecomment #1\comment\ArgTerm%
+  }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+%    @end itemize  @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+  \def\temp{#3}%
+  \ifx\temp\empty
+    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+    \let\temp\finishparsearg
+  \else
+    \let\temp\argcheckspaces
+  \fi
+  % Put the space token in:
+  \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+%      is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick.  --kasal, 16nov03
+
+\def\parseargdef#1{%
+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+  \def#2{\parsearg#1}%
+  \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+  \obeyspaces
+  \gdef\obeyedspace{ }
+
+  % Make each space character in the input produce a normal interword
+  % space in the output.  Don't allow a line break at this space, as this
+  % is used only in environments like @example, where each line of input
+  % should produce a line of output anyway.
+  %
+  \gdef\sepspaces{\obeyspaces\let =\tie}
+
+  % If an index command is used in an @example environment, any spaces
+  % therein should become regular spaces in the raw index file, not the
+  % expansion of \tie (\leavevmode \penalty \@M \ ).
+  \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex.  It's used like this:
+%
+%   \envdef\foo{...}
+%   \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo.  \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches.  The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group.  (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+  \def\temp{#1}%
+  \ifx\thisenv\temp
+  \else
+    \badenverr
+  \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+  \errhelp = \EMsimple
+  \errmessage{This command can appear only \inenvironment\temp,
+    not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+  \ifx#1\empty
+    out of any environment%
+  \else
+    in environment \expandafter\string#1%
+  \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+  \if 1\csname iscond.#1\endcsname
+  \else
+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    \expandafter\checkenv\csname#1\endcsname
+    \csname E#1\endcsname
+    \endgroup
+  \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+  % Definitions to produce \{ and \} commands for indices,
+  % and @{ and @} for the aux/toc files.
+  \catcode`\{ = \other \catcode`\} = \other
+  \catcode`\[ = 1 \catcode`\] = 2
+  \catcode`\! = 0 \catcode`\\ = \other
+  !gdef!lbracecmd[\{]%
+  !gdef!rbracecmd[\}]%
+  !gdef!lbraceatcmd[@{]%
+  !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+  \def\temp{#1}%
+  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+  \else \errmessage{@dotless can be used only with i or j}%
+  \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+  \kern-.15em
+  \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off  says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+  \def\temp{#1}%
+  \ifx\temp\onword \plainfrenchspacing
+  \else\ifx\temp\offword \plainnonfrenchspacing
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+  \fi\fi
+}
+
+% @w prevents a word break.  Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line.  According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0).  If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large.  This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material.  In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom.  The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+  \ifnum\catcode`\^^M=\active \else
+    \errhelp = \groupinvalidhelp
+    \errmessage{@group invalid in context where filling is enabled}%
+  \fi
+  \startsavinginserts
+  %
+  \setbox\groupbox = \vtop\bgroup
+    % Do @comment since we are called inside an environment such as
+    % @example, where each end-of-line in the input causes an
+    % end-of-line in the output.  We don't want the end-of-line after
+    % the `@group' to put extra space in the output.  Since @group
+    % should appear on a line by itself (according to the Texinfo
+    % manual), we don't worry about eating any user text.
+    \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it.  Thus, space below is not quite equal to space
+% above.  But it's pretty close.
+\def\Egroup{%
+    % To get correct interline space between the last line of the group
+    % and the first line afterwards, we have to propagate \prevdepth.
+    \endgraf % Not \par, as it may have been set to \lisppar.
+    \global\dimen1 = \prevdepth
+  \egroup           % End the \vtop.
+  % \dimen0 is the vertical size of the group's box.
+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
+  % \dimen2 is how much space is left on the page (more or less).
+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  % if the group doesn't fit on the current page, and it's a big big
+  % group, force a page break.
+  \ifdim \dimen0 > \dimen2
+    \ifdim \pagetotal < \vfilllimit\pageheight
+      \page
+    \fi
+  \fi
+  \box\groupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil  \mil=0.001in
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\parseargdef\need{%
+  % Ensure vertical mode, so we don't make a big box in the middle of a
+  % paragraph.
+  \par
+  %
+  % If the @need value is less than one line space, it's useless.
+  \dimen0 = #1\mil
+  \dimen2 = \ht\strutbox
+  \advance\dimen2 by \dp\strutbox
+  \ifdim\dimen0 > \dimen2
+    %
+    % Do a \strut just to make the height of this box be normal, so the
+    % normal leading is inserted relative to the preceding line.
+    % And a page break here is fine.
+    \vtop to #1\mil{\strut\vfil}%
+    %
+    % TeX does not even consider page breaks if a penalty added to the
+    % main vertical list is 10000 or more.  But in order to see if the
+    % empty box we just added fits on the page, we must make it consider
+    % page breaks.  On the other hand, we don't want to actually break the
+    % page after the empty box.  So we use a penalty of 9999.
+    %
+    % There is an extremely small chance that TeX will actually break the
+    % page at this \penalty, if there are no other feasible breakpoints in
+    % sight.  (If the user is using lots of big @group commands, which
+    % almost-but-not-quite fill up a page, TeX will have a hard time doing
+    % good page breaking, for example.)  However, I could not construct an
+    % example where a page broke at this \penalty; if it happens in a real
+    % document, then we can reconsider our strategy.
+    \penalty9999
+    %
+    % Back up by the size of the box, whether we did a page break or not.
+    \kern -#1\mil
+    %
+    % Do not allow a page break right after this kern.
+    \nobreak
+  \fi
+}
+
+% @br   forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+  \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph.  For more general purposes, use the \margin insertion
+% class.  WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+  \nobreak
+  \kern-\strutdepth
+  \vtop to \strutdepth{%
+    \baselineskip=\strutdepth
+    \vss
+    % if you have multiple lines of stuff to put here, you'll need to
+    % make the vbox yourself of the appropriate size.
+    \ifx#1l%
+      \llap{\ignorespaces #2\hskip\inmarginspacing}%
+    \else
+      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+    \fi
+    \null
+  }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+  \setbox0 = \hbox{\ignorespaces #2}%
+  \ifdim\wd0 > 0pt
+    \def\lefttext{#1}%  have both texts
+    \def\righttext{#2}%
+  \else
+    \def\lefttext{#1}%  have only one text
+    \def\righttext{#1}%
+  \fi
+  %
+  \ifodd\pageno
+    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+  \else
+    \def\temp{\inleftmargin\lefttext}%
+  \fi
+  \temp
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+  \pushthisfilestack
+  \def\thisfile{#1}%
+  {%
+    \makevalueexpandable  % we want to expand any @value in FILE.
+    \turnoffactive        % and allow special characters in the expansion
+    \indexnofonts         % Allow `@@' and other weird things in file names.
+    \edef\temp{\noexpand\input #1 }%
+    %
+    % This trickery is to read FILE outside of a group, in case it makes
+    % definitions, etc.
+    \expandafter
+  }\temp
+  \popthisfilestack
+}
+\def\filenamecatcodes{%
+  \catcode`\\=\other
+  \catcode`~=\other
+  \catcode`^=\other
+  \catcode`_=\other
+  \catcode`|=\other
+  \catcode`<=\other
+  \catcode`>=\other
+  \catcode`+=\other
+  \catcode`-=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+  \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+  the stack of filenames is empty.}}
+
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+  \ifhmode
+    \let\next\centerH
+  \else
+    \let\next\centerV
+  \fi
+  \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+  {%
+    \hfil\break
+    \advance\hsize by -\leftskip
+    \advance\hsize by -\rightskip
+    \line{#1}%
+    \break
+  }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
+
+% @sp n   outputs n lines of vertical space
+
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore  is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
+    \fi
+  \fi
+  \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
+  \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
+}
+
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \restorefirstparagraphindent
+    \indent
+  }%
+  \gdef\noindent{%
+    \restorefirstparagraphindent
+    \noindent
+  }%
+  \global\everypar = {%
+    \kern -\parindent
+    \restorefirstparagraphindent
+  }%
+}
+
+\gdef\restorefirstparagraphindent{%
+  \global \let \indent = \ptexindent
+  \global \let \noindent = \ptexnoindent
+  \global \everypar = {}%
+}
+
+
+% @asis just yields its argument.  Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode`\_ = \active
+  \gdef\mathunderscore{%
+    \catcode`\_=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care.  Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+  \tex
+  \mathunderscore
+  \let\\ = \mathbackslash
+  \mathactive
+  % make the texinfo accent commands work in math mode
+  \let\"=\ddot
+  \let\'=\acute
+  \let\==\bar
+  \let\^=\hat
+  \let\`=\grave
+  \let\u=\breve
+  \let\v=\check
+  \let\~=\tilde
+  \let\dotaccent=\dot
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+  \catcode`^ = \active
+  \catcode`< = \active
+  \catcode`> = \active
+  \catcode`+ = \active
+  \catcode`' = \active
+  \gdef\mathactive{%
+    \let^ = \ptexhat
+    \let< = \ptexless
+    \let> = \ptexgtr
+    \let+ = \ptexplus
+    \let' = \ptexquoteright
+  }
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em.  So do
+% whichever is larger.
+%
+\def\dots{%
+  \leavevmode
+  \setbox0=\hbox{...}% get width of three periods
+  \ifdim\wd0 > 1.5em
+    \dimen0 = \wd0
+  \else
+    \dimen0 = 1.5em
+  \fi
+  \hbox to \dimen0{%
+    \hskip 0pt plus.25fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus.5fil
+  }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=\endofsentencespacefactor
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+   \iflinks
+     \tryauxfile
+     % Open the new aux file.  TeX will close it automatically at exit.
+     \immediate\openout\auxfile=\jobname.aux
+   \fi % \openindices needs to do some work in any case.
+   \openindices
+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   \openin 1 texinfo.cnf
+   \ifeof 1 \else \input texinfo.cnf \fi
+   \closein 1
+   %
+   \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set).  So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+  \ifx\pdfoutput\relax
+  \else
+    \ifcase\pdfoutput
+    \else
+      \pdftrue
+    \fi
+  \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places.  Thus, we have to
+% double any backslashes.  Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e.  Not good.
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
+% (and related messages, the final outcome is that it is up to the TeX
+% user to double the backslashes and otherwise make the string valid, so
+% that's what we do).
+
+% double active backslashes.
+%
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+   @catcode`@\=@active
+   @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters.  hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens, with minor
+% changes for Texinfo.  It is included here under the GPL by permission
+% from the author, Heiko Oberdiek.
+%
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+%
+\def\HyPsdSubst#1#2#3{%
+  \def\HyPsdReplace##1#1##2\END{%
+    ##1%
+    \ifx\\##2\\%
+    \else
+      #2%
+      \HyReturnAfterFi{%
+        \HyPsdReplace##2\END
+      }%
+    \fi
+  }%
+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
+             % \lastnode when called from \setref -> \pdfmkdest.
+  \HyPsdSubst{(}{\realbackslash(}{#1}%
+  \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found.  (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+  %
+  % Color manipulation macros based on pdfcolor.tex,
+  % except using rgb instead of cmyk; the latter is said to render as a
+  % very dark gray on-screen and a very dark halftone in print, instead
+  % of actual black.
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
+  %
+  % k sets the color for filling (usual text, etc.);
+  % K sets the color for stroking (thin rules, e.g., normal _'s).
+  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
+  %
+  % Set color, and create a mark which defines \thiscolor accordingly,
+  % so that \makeheadline knows which color to restore.
+  \def\setcolor#1{%
+    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+    \domark
+    \pdfsetcolor{#1}%
+  }
+  %
+  \def\maincolor{\rgbBlack}
+  \pdfsetcolor{\maincolor}
+  \edef\thiscolor{\maincolor}
+  \def\lastcolordefs{}
+  %
+  \def\makefootline{%
+    \baselineskip24pt
+    \line{\pdfsetcolor{\maincolor}\the\footline}%
+  }
+  %
+  \def\makeheadline{%
+    \vbox to 0pt{%
+      \vskip-22.5pt
+      \line{%
+        \vbox to8.5pt{}%
+        % Extract \thiscolor definition from the marks.
+        \getcolormarks
+        % Typeset the headline with \maincolor, then restore the color.
+        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+      }%
+      \vss
+    }%
+    \nointerlineskip
+  }
+  %
+  %
+  \pdfcatalog{/PageMode /UseOutlines}
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\dopdfimage#1#2#3{%
+    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
+    % others).  Let's try in that order.
+    \let\pdfimgext=\empty
+    \begingroup
+      \openin 1 #1.png \ifeof 1
+        \openin 1 #1.jpg \ifeof 1
+          \openin 1 #1.jpeg \ifeof 1
+            \openin 1 #1.JPG \ifeof 1
+              \openin 1 #1.pdf \ifeof 1
+                \openin 1 #1.PDF \ifeof 1
+                  \errhelp = \nopdfimagehelp
+                  \errmessage{Could not find image file #1 for pdf}%
+                \else \gdef\pdfimgext{PDF}%
+                \fi
+              \else \gdef\pdfimgext{pdf}%
+              \fi
+            \else \gdef\pdfimgext{JPG}%
+            \fi
+          \else \gdef\pdfimgext{jpeg}%
+          \fi
+        \else \gdef\pdfimgext{jpg}%
+        \fi
+      \else \gdef\pdfimgext{png}%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    % without \immediate, ancient pdftex seg faults when the same image is
+    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+    \ifnum\pdftexversion < 14
+      \immediate\pdfimage
+    \else
+      \immediate\pdfximage
+    \fi
+      \ifdim \wd0 >0pt width \imagewidth \fi
+      \ifdim \wd2 >0pt height \imageheight \fi
+      \ifnum\pdftexversion<13
+         #1.\pdfimgext
+       \else
+         {#1.\pdfimgext}%
+       \fi
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  %
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \indexnofonts
+    \turnoffactive
+    \activebackslashdouble
+    \makevalueexpandable
+    \def\pdfdestname{#1}%
+    \backslashparens\pdfdestname
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }}
+  %
+  % used to mark target names; must be expandable.
+  \def\pdfmkpgn#1{#1}
+  %
+  % by default, use a color that is dark enough to print on paper as
+  % nearly black, but still distinguishable for online viewing.
+  \def\urlcolor{\rgbDarkRed}
+  \def\linkcolor{\rgbDarkRed}
+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
+  %
+  % Adding outlines to PDF; macros for calculating structure of outlines
+  % come from Petr Olsak
+  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+    \else \csname#1\endcsname \fi}
+  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+    \advance\tempnum by 1
+    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+  %
+  % #1 is the section text, which is what will be displayed in the
+  % outline by the pdf viewer.  #2 is the pdf expression for the number
+  % of subentries (or empty, for subsubsections).  #3 is the node text,
+  % which might be empty if this toc entry had no corresponding node.
+  % #4 is the page number
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    % Generate a link to the node text if that exists; else, use the
+    % page number.  We could generate a destination for the section
+    % text in the case where a section has no node, but it doesn't
+    % seem worth the trouble, since most documents are normally structured.
+    \def\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \else
+      % Doubled backslashes in the name.
+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+       \backslashparens\pdfoutlinedest}%
+    \fi
+    %
+    % Also double the backslashes in the display string.
+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+     \backslashparens\pdfoutlinetext}%
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      % Thanh's hack / proper braces in bookmarks
+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+      %
+      % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\numchapentry##1##2##3##4{%
+       \def\thischapnum{##2}%
+       \def\thissecnum{0}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsecentry##1##2##3##4{%
+       \advancenumber{chap\thischapnum}%
+       \def\thissecnum{##2}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsubsecentry##1##2##3##4{%
+       \advancenumber{sec\thissecnum}%
+       \def\thissubsecnum{##2}%
+      }%
+      \def\numsubsubsecentry##1##2##3##4{%
+       \advancenumber{subsec\thissubsecnum}%
+      }%
+      \def\thischapnum{0}%
+      \def\thissecnum{0}%
+      \def\thissubsecnum{0}%
+      %
+      % use \def rather than \let here because we redefine \chapentry et
+      % al. a second time, below.
+      \def\appentry{\numchapentry}%
+      \def\appsecentry{\numsecentry}%
+      \def\appsubsecentry{\numsubsecentry}%
+      \def\appsubsubsecentry{\numsubsubsecentry}%
+      \def\unnchapentry{\numchapentry}%
+      \def\unnsecentry{\numsecentry}%
+      \def\unnsubsecentry{\numsubsecentry}%
+      \def\unnsubsubsecentry{\numsubsubsecentry}%
+      \readdatafile{toc}%
+      %
+      % Read toc second time, this time actually producing the outlines.
+      % The `-' means take the \expnumber as the absolute number of
+      % subentries, which we calculated on our first read of the .toc above.
+      %
+      % We use the node names as the destinations.
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
+        \dopdfoutline{##1}{}{##3}{##4}}%
+      %
+      % PDF outlines are displayed using system fonts, instead of
+      % document fonts.  Therefore we cannot use special characters,
+      % since the encoding is unknown.  For example, the eogonek from
+      % Latin 2 (0xea) gets translated to a | character.  Info from
+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+      %
+      % xx to do this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Right
+      % now, I guess we'll just let the pdf reader have its way.
+      \indexnofonts
+      \setupdatafile
+      \catcode`\\=\active \otherbackslash
+      \input \tocreadfilename
+    \endgroup
+  }
+  %
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \ifx\p\space\else\addtokens{\filename}{\PP}%
+        \advance\filenamelength by 1
+      \fi
+    \fi
+    \nextsp}
+  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \ifnum\pdftexversion < 14
+    \let \startlink \pdfannotlink
+  \else
+    \let \startlink \pdfstartlink
+  \fi
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      %
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
+      \makevalueexpandable
+      % do we want to go so far as to use \indexnofonts instead of just
+      % special-casing \var here?
+      \def\var##1{##1}%
+      %
+      \leavevmode\setcolor{\urlcolor}%
+      \startlink attr{/Border [0 0 0]}%
+        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+    \endgroup}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+    \setcolor{\linkcolor}#1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+  % non-pdf mode
+  \let\pdfmkdest = \gobble
+  \let\pdfurl = \gobble
+  \let\endlink = \relax
+  \let\setcolor = \gobble
+  \let\pdfsetcolor = \gobble
+  \let\pdfmakeoutlines = \relax
+\fi  % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname ten#1\endcsname  % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold.  Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Default leading.
+\newdimen\textleading  \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly.  There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\def\setleading#1{%
+  \dimen0 = #1\relax
+  \normalbaselineskip = \baselinefactor\dimen0
+  \normallineskip = \lineskipfactor\normalbaselineskip
+  \normalbaselines
+  \setbox\strutbox =\hbox{%
+    \vrule width0pt height\strutheightpercent\baselineskip
+                    depth \strutdepthpercent \baselineskip
+  }%
+}
+
+% PDF CMaps.  See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\undefined \else
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1IT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1TT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
+% empty to omit).
+\def\setfont#1#2#3#4#5{%
+  \font#1=\fontprefix#2#3 scaled #4
+  \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+% emacs-page end of cmaps
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx}               %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt.  This is the default in
+% Texinfo.
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 11pt text font size definitions
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit.  This is for the GNU
+% Press printing of the Emacs 22 manual.  Maybe other manuals in the
+% future.  Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+% reduce space between paragraphs
+\divide\parskip by 2
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 10pt text font size definitions
+
+
+% We provide the user-level command
+%   @fonttextsize 10
+% (or 11) to redefine the text font size.  pt is assumed.
+%
+\def\xword{10}
+\def\xiword{11}
+%
+\parseargdef\fonttextsize{%
+  \def\textsizearg{#1}%
+  \wlog{doing @fonttextsize \textsizearg}%
+  %
+  % Set \globaldefs so that documents can use this inside @tex, since
+  % makeinfo 4.8 does not support it, but we need it nonetheless.
+  %
+ \begingroup \globaldefs=1
+  \ifx\textsizearg\xword \definetextfontsizex
+  \else \ifx\textsizearg\xiword \definetextfontsizexi
+  \else
+    \errhelp=\EMsimple
+    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+  \fi\fi
+ \endgroup
+}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.  Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE.  We do this because \STYLE needs to also set the
+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower).  These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \let\tenttsl=\textttsl
+  \def\curfontsize{text}%
+  \def\lsize{reduced}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+  \let\tenttsl=\titlettsl
+  \def\curfontsize{title}%
+  \def\lsize{chap}\def\lllsize{subsec}%
+  \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
+\def\chapfonts{%
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+  \let\tenttsl=\chapttsl
+  \def\curfontsize{chap}%
+  \def\lsize{sec}\def\lllsize{text}%
+  \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \let\tenttsl=\secttsl
+  \def\curfontsize{sec}%
+  \def\lsize{subsec}\def\lllsize{reduced}%
+  \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \let\tenttsl=\ssecttsl
+  \def\curfontsize{ssec}%
+  \def\lsize{text}\def\lllsize{small}%
+  \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+  \let\tenttsl=\reducedttsl
+  \def\curfontsize{reduced}%
+  \def\lsize{small}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+  \let\tenttsl=\smallttsl
+  \def\curfontsize{small}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+  \let\tenttsl=\smallerttsl
+  \def\curfontsize{smaller}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{9.5pt}}
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+%   8.5x11=86   smallbook=72  a4=90  a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+%   8.5x11=90+  smallbook=80  a4=90+  a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt.  So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+%   8.5x11=71  smallbook=60  a4=75  a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font.  Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+  \csname markup#1true\endcsname
+  \def\currentmarkupstyle{#1}%
+  \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+  \expandafter\def\expandafter\markupstylesetup
+    \expandafter{\markupstylesetup #1}%
+  \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+  \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+  \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+
+\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+\let\markupsetuplqsamp \markupsetnoligaturesquoteleft
+\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
+
+% Allow an option to not replace quotes with a regular directed right
+% quote/apostrophe (char 0x27), but instead use the undirected quote
+% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
+% the default, but it works for pasting with more pdf viewers (at least
+% evince), the lilypond developers report.  xpdf does work with the
+% regular 0x27.
+%
+\def\codequoteright{%
+  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+      '%
+    \else \char'15 \fi
+  \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+      % [Knuth] pp. 380,381,391
+      % \relax disables Spanish ligatures ?` and !` of \tt font.
+      \relax`%
+    \else \char'22 \fi
+  \else \char'22 \fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% @cite is like \smartslanted except unconditionally use \sl.  We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}}              % roman font
+\def\sc#1{{\smallcaps#1}}       % smallcaps font
+\def\ii#1{{\it #1}}             % italic font
+
+% @b, explicit bold.  Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph.  Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+  \def\plainfrenchspacing{%
+    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \def\endofsentencespacefactor{1000}% for @. and friends
+  }
+  \def\plainnonfrenchspacing{%
+    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+    \def\endofsentencespacefactor{3000}% for @. and friends
+  }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+  {\tt \rawbackslash \plainfrenchspacing #1}%
+  \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% definition of @key that produces a lozenge.  Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+%    \vbox{\hrule\kern-0.4pt
+%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+%    \kern-0.4pt\hrule}%
+%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge.  If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle.  But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+  \nohyphenation
+  \ifmonospace\else\tt\fi
+  #1}\null}
+
+% ctrl is no longer a Texinfo command.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+  {%
+    % Change normal interword space to be same as for the current font.
+    \spaceskip = \fontdimen2\font
+    %
+    % Switch to typewriter.
+    \tt
+    %
+    % But `\ ' produces the large typewriter interword space.
+    \def\ {{\spaceskip = 0pt{} }}%
+    %
+    % Turn off hyphenation.
+    \nohyphenation
+    %
+    \rawbackslash
+    \plainfrenchspacing
+    #1%
+  }%
+  \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+%  -- rms.
+{
+  \catcode`\-=\active \catcode`\_=\active
+  \catcode`\'=\active \catcode`\`=\active
+  \global\let'=\rq \global\let`=\lq  % default definitions
+  %
+  \global\def\code{\begingroup
+    \setupmarkupstyle{code}%
+    % The following should really be moved into \setupmarkupstyle handlers.
+    \catcode\dashChar=\active  \catcode\underChar=\active
+    \ifallowcodebreaks
+     \let-\codedash
+     \let_\codeunder
+    \else
+     \let-\realdash
+     \let_\realunder
+    \fi
+    \codex
+  }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+  % will therefore expand the active definition of _, which is us
+  % (inside @code that is), therefore an endless loop.
+  \ifusingtt{\ifmmode
+               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+             \else\normalunderscore \fi
+             \discretionary{}{}{}}%
+            {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__.  This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general.  @allowcodebreaks provides a way to control this.
+%
+\newif\ifallowcodebreaks  \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\keywordtrue
+    \allowcodebreakstrue
+  \else\ifx\txiarg\keywordfalse
+    \allowcodebreaksfalse
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+  \fi\fi
+}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+%   `example' (@kbd uses ttsl only inside of @example and friends),
+%   or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\worddistinct
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+  \else\ifx\txiarg\wordexample
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+  \else\ifx\txiarg\wordcode
+    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow   (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
+  \ifdim\wd0 > 0pt
+    \unhbox0 % third arg given, show only that
+  \else
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \code{#1}% only url given, so show it
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+  \def\email#1{\doemail#1,,\finish}
+  \def\doemail#1,#2,#3\finish{\begingroup
+    \unsepspaces
+    \pdfurl{mailto:#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+    \endlink
+  \endgroup}
+\else
+  \let\email=\uref
+\fi
+
+% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find.  We need it for
+% Polish suppressed-l.  --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+  {\selectfonts\lsize #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+  {\plainfrenchspacing #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+
+\message{glyphs,}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+   \advance\hsize by -2\dimen2 % Rules.
+   \vbox{%
+      \hrule height\dimen2
+      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+         \kern3pt\vrule width\dimen2}% Space to right.
+      \hrule height\dimen2}
+    \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that.  The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math.  Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+  % We set the font at each command, rather than predefining it in
+  % \textfonts and the other font-switching commands, so that
+  % installations which never need the symbol don't have to have the
+  % font installed.
+  %
+  % There is only one designed size (nominal 10pt), so we always scale
+  % that to the current nominal size.
+  %
+  % By the way, simply using "at 1em" works for cmr10 and the like, but
+  % does not work for cmbx10 and other extended/shrunken fonts.
+  %
+  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+  %
+  \ifx\curfontstyle\bfstylename
+    % bold:
+    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+  \else
+    % regular:
+    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+  \fi
+  \thiseurofont
+}
+
+% Glyphs from the EC fonts.  We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases.  We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+  \def\temp{#1}%
+  \ifx\temp\macrocharA\Aogonek
+  \else\ifx\temp\macrochara\aogonek
+  \else\ifx\temp\macrocharE\Eogonek
+  \else\ifx\temp\macrochare\eogonek
+  \else
+    \ecfont \setbox0=\hbox{#1}%
+    \ifdim\ht0=1ex\accent"0C #1%
+    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+    \fi
+  \fi\fi\fi\fi
+  }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+  % We can't distinguish serif/sans and italic/slanted, but this
+  % is used for crude hacks anyway (like adding French and German
+  % quotes to documents typeset with CM, where we lose kerning), so
+  % hopefully nobody will notice/care.
+  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+  \ifx\curfontstyle\bfstylename
+    % bold:
+    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+  \else
+    % regular:
+    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+  \fi
+  \thisecfont
+}
+
+% @registeredsymbol - R in a circle.  The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+               \hfil\crcr\Orb}}%
+    }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page.  Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+        \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
+  \begingroup
+    \parindent=0pt \textfonts
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
+      \iffinishedtitlepage\else
+        \finishtitlepage
+      \fi
+      \let\page = \oldpage
+      \page
+      \null
+    }%
+}
+
+\def\Etitlepage{%
+    \iffinishedtitlepage\else
+       \finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+  \endgroup
+  %
+  % Need this before the \...aftertitlepage checks so that if they are
+  % in effect the toc pages will come out with page numbers.
+  \HEADINGSon
+  %
+  % If they want short, they certainly want long too.
+  \ifsetshortcontentsaftertitlepage
+    \shortcontents
+    \contents
+    \global\let\shortcontents = \relax
+    \global\let\contents = \relax
+  \fi
+  %
+  \ifsetcontentsaftertitlepage
+    \contents
+    \global\let\contents = \relax
+    \global\let\shortcontents = \relax
+  \fi
+}
+
+\def\finishtitlepage{%
+  \vskip4pt \hrule height 2pt width \hsize
+  \vskip\titlepagebottomglue
+  \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+  \checkenv\titlepage
+  \leftline{\titlefonts\rmisbold #1}
+  % print a rule at the page bottom also.
+  \finishedtitlepagefalse
+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+  \checkenv\titlepage
+  {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+  \def\temp{\quotation}%
+  \ifx\thisenv\temp
+    \def\quotationauthor{#1}% printed in \Equotation.
+  \else
+    \checkenv\titlepage
+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+    {\secfonts\rmisbold \leftline{#1}}%
+  \fi
+}
+
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline    % headline on even pages
+\newtoks\oddheadline     % headline on odd pages
+\newtoks\evenfootline    % footline on even pages
+\newtoks\oddfootline     % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                            \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+                            \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what  @headings on  does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+  %
+  % Leave some space for the footline.  Hopefully ok to assume
+  % @evenfooting will not be used by itself.
+  \global\advance\pageheight by -12pt
+  \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top     \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+                          \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+                          \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+  \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double      turns headings on for double-sided printing.
+% @headings single      turns headings on for single-sided printing.
+% @headings off         turns them off.
+% @headings on          same as @headings double, retained for compatibility.
+% @headings after       turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{%
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+  \number\day\space
+  \ifcase\month
+  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+  \fi
+  \space\number\year}
+\fi
+
+% @settitle line...  specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent  \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin  \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+  \advance\hsize by -\rightskip
+  \advance\hsize by -\tableindent
+  \setbox0=\hbox{\itemindicate{#1}}%
+  \itemindex{#1}%
+  \nobreak % This prevents a break before @itemx.
+  %
+  % If the item text does not fit in the space we have, put it on a line
+  % by itself, and do not allow a page break either before or after that
+  % line.  We do not start a paragraph here because then if the next
+  % command is, e.g., @kindex, the whatsit would get put into the
+  % horizontal list on a line by itself, resulting in extra blank space.
+  \ifdim \wd0>\itemmax
+    %
+    % Make this a paragraph so we get the \parskip glue and wrapping,
+    % but leave it ragged-right.
+    \begingroup
+      \advance\leftskip by-\tableindent
+      \advance\hsize by\tableindent
+      \advance\rightskip by0pt plus1fil
+      \leavevmode\unhbox0\par
+    \endgroup
+    %
+    % We're going to be starting a paragraph, but we don't want the
+    % \parskip glue -- logically it's part of the @item we just started.
+    \nobreak \vskip-\parskip
+    %
+    % Stop a page break at the \parskip glue coming up.  However, if
+    % what follows is an environment such as @example, there will be no
+    % \parskip glue; then the negative vskip we just inserted would
+    % cause the example and the item to crash together.  So we use this
+    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+    % \parskip glue after all.  Section titles are handled this way also.
+    %
+    \penalty 10001
+    \endgroup
+    \itemxneedsnegativevskipfalse
+  \else
+    % The item text fits into the space.  Start a paragraph, so that the
+    % following text (if any) will end up on the same line.
+    \noindent
+    % Do this with kerns and \unhbox so that if there is a footnote in
+    % the item text, it can migrate to the main vertical list and
+    % eventually be printed.
+    \nobreak\kern-\tableindent
+    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+    \unhbox0
+    \nobreak\kern\dimen0
+    \endgroup
+    \itemxneedsnegativevskiptrue
+  \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+  \let\itemindex\gobble
+  \tablecheck{table}%
+}
+\envdef\ftable{%
+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+  \tablecheck{ftable}%
+}
+\envdef\vtable{%
+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+  \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+  \ifnum \the\catcode`\^^M=\active
+    \endgroup
+    \errmessage{This command won't work in this context; perhaps the problem is
+      that we are \inenvironment\thisenv}%
+    \def\next{\doignore{#1}}%
+  \else
+    \let\next\tablex
+  \fi
+  \next
+}
+\def\tablex#1{%
+  \def\itemindicate{#1}%
+  \parsearg\tabley
+}
+\def\tabley#1{%
+  {%
+    \makevalueexpandable
+    \edef\temp{\noexpand\tablez #1\space\space\space}%
+    \expandafter
+  }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+  \aboveenvbreak
+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+  \ifnum 0#2>0 \tableindent=#2\mil \fi
+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+  \itemmax=\tableindent
+  \advance \itemmax by -\itemmargin
+  \advance \leftskip by \tableindent
+  \exdentamount=\tableindent
+  \parindent = 0pt
+  \parskip = \smallskipamount
+  \ifdim \parskip=0pt \parskip=2pt \fi
+  \let\item = \internalBitem
+  \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  %
+  % Try typesetting the item mark that if the document erroneously says
+  % something like @itemize @samp (intending @table), there's an error
+  % right away at the @itemize.  It's not the best error message in the
+  % world, but it's better than leaving it to the @item.  This means if
+  % the user wants an empty mark, they have to say @w{} not just @w.
+  \def\itemcontents{#1}%
+  \setbox0 = \hbox{\itemcontents}%
+  %
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  %
+  \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+  \advance\itemno by 1  % for enumerations
+  {\let\par=\endgraf \smallbreak}% reasonable place to break
+  {%
+   % If the document has an @itemize directly after a section title, a
+   % \nobreak will be last on the list, and \sectionheading will have
+   % done a \vskip-\parskip.  In that case, we don't want to zero
+   % parskip, or the item text will crash with the heading.  On the
+   % other hand, when there is normal text preceding the item (as there
+   % usually is), we do want to zero parskip, or there would be too much
+   % space.  In that case, we won't have a \nobreak before.  At least
+   % that's the theory.
+   \ifnum\lastpenalty<10000 \parskip=0in \fi
+   \noindent
+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   %
+   \vadjust{\penalty 1200}}% not good to break after first line of item.
+  \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list.  No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+  % If we were given no argument, pretend we were given `1'.
+  \def\thearg{#1}%
+  \ifx\thearg\empty \def\thearg{1}\fi
+  %
+  % Detect if the argument is a single token.  If so, it might be a
+  % letter.  Otherwise, the only valid thing it can be is a number.
+  % (We will always have one token, because of the test we just made.
+  % This is a good thing, since \splitoff doesn't work given nothing at
+  % all -- the first parameter is undelimited.)
+  \expandafter\splitoff\thearg\endmark
+  \ifx\rest\empty
+    % Only one token in the argument.  It could still be anything.
+    % A ``lowercase letter'' is one whose \lccode is nonzero.
+    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+    %   not equal to itself.
+    % Otherwise, we assume it's a number.
+    %
+    % We need the \relax at the end of the \ifnum lines to stop TeX from
+    % continuing to look for a <number>.
+    %
+    \ifnum\lccode\expandafter`\thearg=0\relax
+      \numericenumerate % a number (we hope)
+    \else
+      % It's a letter.
+      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+        \lowercaseenumerate % lowercase letter
+      \else
+        \uppercaseenumerate % uppercase letter
+      \fi
+    \fi
+  \else
+    % Multiple tokens in the argument.  We hope it's a number.
+    \numericenumerate
+  \fi
+}
+
+% An @enumerate whose labels are integers.  The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+  \itemno = \thearg
+  \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more lowercase letters in @enumerate; get a bigger
+                  alphabet}%
+    \fi
+    \char\lccode\itemno
+  }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more uppercase letters in @enumerate; get a bigger
+                  alphabet}
+    \fi
+    \char\uccode\itemno
+  }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments.  Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+  \advance\itemno by -1
+  \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble.  Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+%   @multitable @columnfractions .25 .3 .45
+%   @item ...
+%
+%   Numbers following @columnfractions are the percent of the total
+%   current hsize to be used for each column. You may use as many
+%   columns as desired.
+
+
+% Or use a template:
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item ...
+%   using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item first col stuff @tab second col stuff @tab third col
+%   @item
+%   first col stuff
+%   @tab
+%   second col stuff
+%   @tab
+%   third col
+%   @item first col stuff @tab second col stuff
+%   @tab Many paragraphs of text may be used in any column.
+%
+%         They will wrap at the width determined by the template.
+%   @item@tab@tab This will be in third column.
+%   @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+%                                                            to baseline.
+%   0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1.  We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+  \global\advance\colcount by 1
+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+  \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
+  \else
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
+    \else
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+                   % separator; typically that is always in the input, anyway.
+         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \fi
+    \fi
+    \ifx\go\pickupwholefraction
+      % Put the argument back for the \pickupwholefraction call, so
+      % we'll always have a period there to be parsed.
+      \def\go{\pickupwholefraction#1}%
+    \else
+      \let\go = \setuptable
+    \fi%
+  \fi
+  \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry.  \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+  \checkenv\multitable
+  \crcr
+  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+  \the\everytab % for the first item
+}%
+%
+% A \tab used to include \hskip1sp.  But then the space in a template
+% line is not enough.  That is bad.  So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+%                                      --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab  % insert after every tab.
+%
+\envdef\multitable{%
+  \vskip\parskip
+  \startsavinginserts
+  %
+  % @item within a multitable starts a normal row.
+  % We use \def instead of \let so that if one of the multitable entries
+  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+  % \endtemplate) expanding \doitemize.
+  \def\item{\crcr}%
+  %
+  \tolerance=9500
+  \hbadness=9500
+  \setmultitablespacing
+  \parskip=\multitableparskip
+  \parindent=\multitableparindent
+  \overfullrule=0pt
+  \global\colcount=0
+  %
+  \everycr = {%
+    \noalign{%
+      \global\everytab={}%
+      \global\colcount=0 % Reset the column counter.
+      % Check for saved footnotes, etc.
+      \checkinserts
+      % Keeps underfull box messages off when table breaks over pages.
+      %\filbreak
+       % Maybe so, but it also creates really weird page breaks when the
+       % table breaks over pages. Wouldn't \vfil be better?  Wait until the
+       % problem manifests itself, so it can be fixed for real --karl.
+    }%
+  }%
+  %
+  \parsearg\domultitable
+}
+\def\domultitable#1{%
+  % To parse everything between @multitable and @item:
+  \setuptable#1 \endsetuptable
+  %
+  % This preamble sets up a generic column definition, which will
+  % be used as many times as user calls for columns.
+  % \vtop will set a single line and will also let text wrap and
+  % continue for many paragraphs if desired.
+  \halign\bgroup &%
+    \global\advance\colcount by 1
+    \multistrut
+    \vtop{%
+      % Use the current \colcount to find the correct column width:
+      \hsize=\expandafter\csname col\the\colcount\endcsname
+      %
+      % In order to keep entries from bumping into each other
+      % we will add a \leftskip of \multitablecolspace to all columns after
+      % the first one.
+      %
+      % If a template has been used, we will add \multitablecolspace
+      % to the width of each template entry.
+      %
+      % If the user has set preamble in terms of percent of \hsize we will
+      % use that dimension as the width of the column, and the \leftskip
+      % will keep entries from bumping into each other.  Table will start at
+      % left margin and final column will justify at right margin.
+      %
+      % Make sure we don't inherit \rightskip from the outer environment.
+      \rightskip=0pt
+      \ifnum\colcount=1
+       % The first column will be indented with the surrounding text.
+       \advance\hsize by\leftskip
+      \else
+       \ifsetpercent \else
+         % If user has not set preamble in terms of percent of \hsize
+         % we will advance \hsize by \multitablecolspace.
+         \advance\hsize by \multitablecolspace
+       \fi
+       % In either case we will make \leftskip=\multitablecolspace:
+      \leftskip=\multitablecolspace
+      \fi
+      % Ignoring space at the beginning and end avoids an occasional spurious
+      % blank line, when TeX decides to break the line at the space before the
+      % box from the multistrut, so the strut ends up on a line by itself.
+      % For example:
+      % @multitable @columnfractions .11 .89
+      % @item @code{#}
+      % @tab Legal holiday which is valid in major parts of the whole country.
+      % Is automatically provided with highlighting sequences respectively
+      % marking characters.
+      \noindent\ignorespaces##\unskip\multistrut
+    }\cr
+}
+\def\Emultitable{%
+  \crcr
+  \egroup % end the \halign
+  \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+  \def\multistrut{\strut}% just use the standard line spacing
+  %
+  % Compute \multitablelinespace (if not defined by user) for use in
+  % \multitableparskip calculation.  We used define \multistrut based on
+  % this, but (ironically) that caused the spacing to be off.
+  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%%        If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed.  They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested.  But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+  \expandafter\let\csname #1\endcsname = \relax
+  \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+  % Scan in ``verbatim'' mode:
+  \obeylines
+  \catcode`\@ = \other
+  \catcode`\{ = \other
+  \catcode`\} = \other
+  %
+  % Make sure that spaces turn into tokens that match what \doignoretext wants.
+  \spaceisspace
+  %
+  % Count number of #1's that we've seen.
+  \doignorecount = 0
+  %
+  % Swallow text until we reach the matching `@end #1'.
+  \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+  \obeylines %
+  %
+  \gdef\dodoignore#1{%
+    % #1 contains the command name as a string, e.g., `ifinfo'.
+    %
+    % Define a command to find the next `@end #1'.
+    \long\def\doignoretext##1^^M@end #1{%
+      \doignoretextyyy##1^^M@#1\_STOP_}%
+    %
+    % And this command to find another #1 command, at the beginning of a
+    % line.  (Otherwise, we would consider a line `@c @ifset', for
+    % example, to count as an @ifset for nesting.)
+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+    %
+    % And now expand that command.
+    \doignoretext ^^M%
+  }%
+}
+
+\def\doignoreyyy#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty                      % Nothing found.
+    \let\next\doignoretextzzz
+  \else                                        % Found a nested condition, ...
+    \advance\doignorecount by 1
+    \let\next\doignoretextyyy          % ..., look for another.
+    % If we're here, #1 ends with ^^M\ifinfo (for example).
+  \fi
+  \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+  \ifnum\doignorecount = 0     % We have just found the outermost @end.
+    \let\next\enddoignore
+  \else                                % Still inside a nested condition.
+    \advance\doignorecount by -1
+    \let\next\doignoretext      % Look for the next @end.
+  \fi
+  \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+  % Ignore anything after the last `@end #1'; this matters in verbatim
+  % environments, where otherwise the newline after an ignored conditional
+  % would result in a blank line in the output.
+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+  {%
+    \makevalueexpandable
+    \def\temp{#2}%
+    \edef\next{\gdef\makecsname{SET#1}}%
+    \ifx\temp\empty
+      \next{}%
+    \else
+      \setzzz#2\endsetzzz
+    \fi
+  }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+  {%
+    \makevalueexpandable
+    \global\expandafter\let\csname SET#1\endcsname=\relax
+  }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+  \catcode`\- = \active \catcode`\_ = \active
+  %
+  \gdef\makevalueexpandable{%
+    \let\value = \expandablevalue
+    % We don't want these characters active, ...
+    \catcode`\-=\other \catcode`\_=\other
+    % ..., but we might end up with active ones in the argument if
+    % we're called from @code, as @code{@value{foo-bar_}}, though.
+    % So \let them to their normal equivalents.
+    \let-\realdash \let_\normalunderscore
+  }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file.  This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    {[No value for ``#1'']}%
+    \message{Variable `#1', used in @value, is not set.}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+  {%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname SET#2\endcsname\relax
+      #1% If not set, redefine \next.
+    \fi
+    \expandafter
+  }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index.  The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
+}
+
+% @defindex foo  ==  \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar    makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar   similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+  % Only do \closeout if we haven't already done it, else we'll end up
+  % closing the target index.
+  \expandafter \ifx\csname donesynindex#2\endcsname \relax
+    % The \closeout helps reduce unnecessary open files; the limit on the
+    % Acorn RISC OS is a mere 16 files.
+    \expandafter\closeout\csname#2indfile\endcsname
+    \expandafter\let\csname donesynindex#2\endcsname = 1
+  \fi
+  % redefine \fooindfile:
+  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+  \expandafter\let\csname#2indfile\endcsname=\temp
+  % redefine \fooindex:
+  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+%  and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+  \escapechar = `\\     % use backslash in output files.
+  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+  \def\ {\realbackslash\space }%
+  %
+  % Need these in case \tex is in effect and \{ is a \delimiter again.
+  % But can't use \lbracecmd and \rbracecmd because texindex assumes
+  % braces and backslashes are used only as delimiters.
+  \let\{ = \mylbrace
+  \let\} = \myrbrace
+  %
+  % I don't entirely understand this, but when an index entry is
+  % generated from a macro call, the \endinput which \scanmacro inserts
+  % causes processing to be prematurely terminated.  This is,
+  % apparently, because \indexsorttmp is fully expanded, and \endinput
+  % is an expandable command.  The redefinition below makes \endinput
+  % disappear altogether for that purpose -- although logging shows that
+  % processing continues to some further point.  On the other hand, it
+  % seems \endinput does not hurt in the printed index arg, since that
+  % is still getting written without apparent harm.
+  %
+  % Sample source (mac-idx3.tex, reported by Graham Percival to
+  % help-texinfo, 22may06):
+  % @macro funindex {WORD}
+  % @findex xyz
+  % @end macro
+  % ...
+  % @funindex commtest
+  %
+  % The above is not enough to reproduce the bug, but it gives the flavor.
+  %
+  % Sample whatsit resulting:
+  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+  %
+  % So:
+  \let\endinput = \empty
+  %
+  % Do the redefinitions.
+  \commondummies
+}
+
+% For the aux and toc files, @ is the escape character.  So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files).  When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+  \def\@{@@}%
+  \def\ {@ }%
+  \let\{ = \lbraceatcmd
+  \let\} = \rbraceatcmd
+  %
+  % Do the redefinitions.
+  \commondummies
+  \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+  %
+  % \definedummyword defines \#1 as \string\#1\space, thus effectively
+  % preventing its expansion.  This is used only for control% words,
+  % not control letters, because the \space would be incorrect for
+  % control characters, but is needed to separate the control word
+  % from whatever follows.
+  %
+  % For control letters, we have \definedummyletter, which omits the
+  % space.
+  %
+  % These can be used both for control words that take an argument and
+  % those that do not.  If it is followed by {arg} in the input, then
+  % that will dutifully get written to the index (or wherever).
+  %
+  \def\definedummyword  ##1{\def##1{\string##1\space}}%
+  \def\definedummyletter##1{\def##1{\string##1}}%
+  \let\definedummyaccent\definedummyletter
+  %
+  \commondummiesnofonts
+  %
+  \definedummyletter\_%
+  %
+  % Non-English letters.
+  \definedummyword\AA
+  \definedummyword\AE
+  \definedummyword\DH
+  \definedummyword\L
+  \definedummyword\O
+  \definedummyword\OE
+  \definedummyword\TH
+  \definedummyword\aa
+  \definedummyword\ae
+  \definedummyword\dh
+  \definedummyword\exclamdown
+  \definedummyword\l
+  \definedummyword\o
+  \definedummyword\oe
+  \definedummyword\ordf
+  \definedummyword\ordm
+  \definedummyword\questiondown
+  \definedummyword\ss
+  \definedummyword\th
+  %
+  % Although these internal commands shouldn't show up, sometimes they do.
+  \definedummyword\bf
+  \definedummyword\gtr
+  \definedummyword\hat
+  \definedummyword\less
+  \definedummyword\sf
+  \definedummyword\sl
+  \definedummyword\tclose
+  \definedummyword\tt
+  %
+  \definedummyword\LaTeX
+  \definedummyword\TeX
+  %
+  % Assorted special characters.
+  \definedummyword\bullet
+  \definedummyword\comma
+  \definedummyword\copyright
+  \definedummyword\registeredsymbol
+  \definedummyword\dots
+  \definedummyword\enddots
+  \definedummyword\equiv
+  \definedummyword\error
+  \definedummyword\euro
+  \definedummyword\guillemetleft
+  \definedummyword\guillemetright
+  \definedummyword\guilsinglleft
+  \definedummyword\guilsinglright
+  \definedummyword\expansion
+  \definedummyword\minus
+  \definedummyword\ogonek
+  \definedummyword\pounds
+  \definedummyword\point
+  \definedummyword\print
+  \definedummyword\quotedblbase
+  \definedummyword\quotedblleft
+  \definedummyword\quotedblright
+  \definedummyword\quoteleft
+  \definedummyword\quoteright
+  \definedummyword\quotesinglbase
+  \definedummyword\result
+  \definedummyword\textdegree
+  %
+  % We want to disable all macros so that they are not expanded by \write.
+  \macrolist
+  %
+  \normalturnoffactive
+  %
+  % Handle some cases of @value -- where it does not contain any
+  % (non-fully-expandable) commands.
+  \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+  % Control letters and accents.
+  \definedummyletter\!%
+  \definedummyaccent\"%
+  \definedummyaccent\'%
+  \definedummyletter\*%
+  \definedummyaccent\,%
+  \definedummyletter\.%
+  \definedummyletter\/%
+  \definedummyletter\:%
+  \definedummyaccent\=%
+  \definedummyletter\?%
+  \definedummyaccent\^%
+  \definedummyaccent\`%
+  \definedummyaccent\~%
+  \definedummyword\u
+  \definedummyword\v
+  \definedummyword\H
+  \definedummyword\dotaccent
+  \definedummyword\ogonek
+  \definedummyword\ringaccent
+  \definedummyword\tieaccent
+  \definedummyword\ubaraccent
+  \definedummyword\udotaccent
+  \definedummyword\dotless
+  %
+  % Texinfo font commands.
+  \definedummyword\b
+  \definedummyword\i
+  \definedummyword\r
+  \definedummyword\sc
+  \definedummyword\t
+  %
+  % Commands that take arguments.
+  \definedummyword\acronym
+  \definedummyword\cite
+  \definedummyword\code
+  \definedummyword\command
+  \definedummyword\dfn
+  \definedummyword\email
+  \definedummyword\emph
+  \definedummyword\env
+  \definedummyword\file
+  \definedummyword\kbd
+  \definedummyword\key
+  \definedummyword\math
+  \definedummyword\option
+  \definedummyword\pxref
+  \definedummyword\ref
+  \definedummyword\samp
+  \definedummyword\strong
+  \definedummyword\tie
+  \definedummyword\uref
+  \definedummyword\url
+  \definedummyword\var
+  \definedummyword\verb
+  \definedummyword\w
+  \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names.  It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+  % Accent commands should become @asis.
+  \def\definedummyaccent##1{\let##1\asis}%
+  % We can just ignore other control letters.
+  \def\definedummyletter##1{\let##1\empty}%
+  % Hopefully, all control words can become @asis.
+  \let\definedummyword\definedummyaccent
+  %
+  \commondummiesnofonts
+  %
+  % Don't no-op \tt, since it isn't a user-level command
+  % and is used in the definitions of the active chars like <, >, |, etc.
+  % Likewise with the other plain tex font commands.
+  %\let\tt=\asis
+  %
+  \def\ { }%
+  \def\@{@}%
+  % how to handle braces?
+  \def\_{\normalunderscore}%
+  %
+  % Non-English letters.
+  \def\AA{AA}%
+  \def\AE{AE}%
+  \def\DH{DZZ}%
+  \def\L{L}%
+  \def\OE{OE}%
+  \def\O{O}%
+  \def\TH{ZZZ}%
+  \def\aa{aa}%
+  \def\ae{ae}%
+  \def\dh{dzz}%
+  \def\exclamdown{!}%
+  \def\l{l}%
+  \def\oe{oe}%
+  \def\ordf{a}%
+  \def\ordm{o}%
+  \def\o{o}%
+  \def\questiondown{?}%
+  \def\ss{ss}%
+  \def\th{zzz}%
+  %
+  \def\LaTeX{LaTeX}%
+  \def\TeX{TeX}%
+  %
+  % Assorted special characters.
+  % (The following {} will end up in the sort string, but that's ok.)
+  \def\bullet{bullet}%
+  \def\comma{,}%
+  \def\copyright{copyright}%
+  \def\dots{...}%
+  \def\enddots{...}%
+  \def\equiv{==}%
+  \def\error{error}%
+  \def\euro{euro}%
+  \def\expansion{==>}%
+  \def\guillemetleft{<<}%
+  \def\guillemetright{>>}%
+  \def\guilsinglleft{<}%
+  \def\guilsinglright{>}%
+  \def\minus{-}%
+  \def\point{.}%
+  \def\pounds{pounds}%
+  \def\print{-|}%
+  \def\quotedblbase{"}%
+  \def\quotedblleft{"}%
+  \def\quotedblright{"}%
+  \def\quoteleft{`}%
+  \def\quoteright{'}%
+  \def\quotesinglbase{,}%
+  \def\registeredsymbol{R}%
+  \def\result{=>}%
+  \def\textdegree{o}%
+  %
+  % We need to get rid of all macros, leaving only the arguments (if present).
+  % Of course this is not nearly correct, but it is the best we can do for now.
+  % makeinfo does not expand macros in the argument to @deffn, which ends up
+  % writing an index entry, and texindex isn't prepared for an index sort entry
+  % that starts with \.
+  %
+  % Since macro invocations are followed by braces, we can just redefine them
+  % to take a single TeX argument.  The case of a macro invocation that
+  % goes to end-of-line is not handled.
+  %
+  \macrolist
+}
+
+\let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+  \iflinks
+  {%
+    % Store the main index entry text (including the third arg).
+    \toks0 = {#2}%
+    % If third arg is present, precede it with a space.
+    \def\thirdarg{#3}%
+    \ifx\thirdarg\empty \else
+      \toks0 = \expandafter{\the\toks0 \space #3}%
+    \fi
+    %
+    \edef\writeto{\csname#1indfile\endcsname}%
+    %
+    \safewhatsit\dosubindwrite
+  }%
+  \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+  % Put the index entry in the margin if desired.
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+  \fi
+  %
+  % Remember, we are within a group.
+  \indexdummies % Must do this here, since \bf, etc expand at this stage
+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+  %
+  % Process the index entry with all font commands turned off, to
+  % get the string to sort by.
+  {\indexnofonts
+   \edef\temp{\the\toks0}% need full expansion
+   \xdef\indexsorttmp{\temp}%
+  }%
+  %
+  % Set up the complete index entry, with both the sort key and
+  % the original text, including any font commands.  We write
+  % three arguments to \entry to the .?? file (four in the
+  % subentry case), texindex reduces to two when writing the .??s
+  % sorted result.
+  \edef\temp{%
+    \write\writeto{%
+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+  }%
+  \temp
+}
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again.  Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero.  The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode.  We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip.  The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{%
+\ifhmode
+  #1%
+\else
+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+  \whatsitskip = \lastskip
+  \edef\lastskipmacro{\the\lastskip}%
+  \whatsitpenalty = \lastpenalty
+  %
+  % If \lastskip is nonzero, that means the last item was a
+  % skip.  And since a skip is discardable, that means this
+  % -\whatsitskip glue we're inserting is preceded by a
+  % non-discardable item, therefore it is not a potential
+  % breakpoint, therefore no \nobreak needed.
+  \ifx\lastskipmacro\zeroskipmacro
+  \else
+    \vskip-\whatsitskip
+  \fi
+  %
+  #1%
+  %
+  \ifx\lastskipmacro\zeroskipmacro
+    % If \lastskip was zero, perhaps the last item was a penalty, and
+    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
+    % to re-insert the same penalty (values >10000 are used for various
+    % signals); since we just inserted a non-discardable item, any
+    % following glue (such as a \parskip) would be a breakpoint.  For example:
+    %
+    %   @deffn deffn-whatever
+    %   @vindex index-whatever
+    %   Description.
+    % would allow a break between the index-whatever whatsit
+    % and the "Description." paragraph.
+    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+  \else
+    % On the other hand, if we had a nonzero \lastskip,
+    % this make-up glue would be preceded by a non-discardable item
+    % (the whatsit from the \write), so we must insert a \nobreak.
+    \nobreak\vskip\whatsitskip
+  \fi
+\fi
+}
+
+% The index entry written in the file actually looks like
+%  \entry {sortstring}{page}{topic}
+% or
+%  \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+%  \initial {c}
+%     before the first topic whose initial is c
+%  \entry {topic}{pagelist}
+%     for a topic that is used without subtopics
+%  \primary {topic}
+%     for the beginning of a topic that is used with subtopics
+%  \secondary {subtopic}{pagelist}
+%     for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+  \dobreak \chapheadingskip{10000}%
+  %
+  \smallfonts \rm
+  \tolerance = 9500
+  \plainfrenchspacing
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+  %
+  % See if the index file exists and is nonempty.
+  % Change catcode of @ here so that if the index file contains
+  % \initial {@}
+  % as its first line, TeX doesn't complain about mismatched braces
+  % (because it thinks @} is a control sequence).
+  \catcode`\@ = 11
+  \openin 1 \jobname.#1s
+  \ifeof 1
+    % \enddoublecolumns gets confused if there is no text in the index,
+    % and it loses the chapter title and the aux file entries for the
+    % index.  The easiest way to prevent this problem is to make sure
+    % there is some text.
+    \putwordIndexNonexistent
+  \else
+    %
+    % If the index file exists but is empty, then \openin leaves \ifeof
+    % false.  We have to make TeX try to read something from the file, so
+    % it can discover if there is anything in it.
+    \read 1 to \temp
+    \ifeof 1
+      \putwordIndexIsEmpty
+    \else
+      % Index files are almost Texinfo source, but we use \ as the escape
+      % character.  It would be better to use @, but that's too big a change
+      % to make right now.
+      \def\indexbackslash{\backslashcurfont}%
+      \catcode`\\ = 0
+      \escapechar = `\\
+      \begindoublecolumns
+      \input \jobname.#1s
+      \enddoublecolumns
+    \fi
+  \fi
+  \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+  % Some minor font changes for the special characters.
+  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+  %
+  % Remove any glue we may have, we'll be inserting our own.
+  \removelastskip
+  %
+  % We like breaks before the index initials, so insert a bonus.
+  \nobreak
+  \vskip 0pt plus 3\baselineskip
+  \penalty 0
+  \vskip 0pt plus -3\baselineskip
+  %
+  % Typeset the initial.  Making this add up to a whole number of
+  % baselineskips increases the chance of the dots lining up from column
+  % to column.  It still won't often be perfect, because of the stretch
+  % we need before each entry, but it's better.
+  %
+  % No shrink because it confuses \balancecolumns.
+  \vskip 1.67\baselineskip plus .5\baselineskip
+  \leftline{\secbf #1}%
+  % Do our best not to break after the initial.
+  \nobreak
+  \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin.  It is used for index
+% and table of contents entries.  The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+%      \def\entry#1#2{...
+% But this freezes the catcodes in the argument, and can cause problems to
+% @code, which sets - active.  This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+%                                 --kasal, 21nov03
+\def\entry{%
+  \begingroup
+    %
+    % Start a new paragraph if necessary, so our assignments below can't
+    % affect previous text.
+    \par
+    %
+    % Do not fill out the last line with white space.
+    \parfillskip = 0in
+    %
+    % No extra space above this paragraph.
+    \parskip = 0in
+    %
+    % Do not prefer a separate line ending with a hyphen to fewer lines.
+    \finalhyphendemerits = 0
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    % \hangafter is reset to 1 (which is the value we want) at the start
+    % of each paragraph, so we need not do anything with that.
+    \hangindent = 2em
+    %
+    % When the entry text needs to be broken, just fill out the first line
+    % with blank space.
+    \rightskip = 0pt plus1fil
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus1pt
+    %
+    % Swallow the left brace of the text (first parameter):
+    \afterassignment\doentry
+    \let\temp =
+}
+\def\doentry{%
+    \bgroup % Instead of the swallowed brace.
+      \noindent
+      \aftergroup\finishentry
+      % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+    % #1 is the page number.
+    %
+    % The following is kludged to not output a line of dots in the index if
+    % there are no page numbers.  The next person who breaks this will be
+    % cursed by a Unix daemon.
+    \setbox\boxA = \hbox{#1}%
+    \ifdim\wd\boxA = 0pt
+      \ %
+    \else
+      %
+      % If we must, put the page number on a line of its own, and fill out
+      % this line with blank space.  (The \hfil is overwhelmed with the
+      % fill leaders glue in \indexdotfill if the page number does fit.)
+      \hfil\penalty50
+      \null\nobreak\indexdotfill % Have leaders before the page number.
+      %
+      % The `\ ' here is removed by the implicit \unskip that TeX does as
+      % part of (the primitive) \par.  Without it, a spurious underfull
+      % \hbox ensues.
+      \ifpdf
+       \pdfgettoks#1.%
+       \ \the\toksA
+      \else
+       \ #1%
+      \fi
+    \fi
+    \par
+  \endgroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+\def\indexdotfill{\cleaders
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+  \parfillskip=0in
+  \parskip=0in
+  \hangindent=1in
+  \hangafter=1
+  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+  \ifpdf
+    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+  \else
+    #2
+  \fi
+  \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % Grab any single-column material above us.
+  \output = {%
+    %
+    % Here is a possibility not foreseen in manmac: if we accumulate a
+    % whole lot of material, we might end up calling this \output
+    % routine twice in a row (see the doublecol-lose test, which is
+    % essentially a couple of indexes with @setchapternewpage off).  In
+    % that case we just ship out what is in \partialpage with the normal
+    % output routine.  Generally, \partialpage will be empty when this
+    % runs and this will be a no-op.  See the indexspread.tex test case.
+    \ifvoid\partialpage \else
+      \onepageout{\pagecontents\partialpage}%
+    \fi
+    %
+    \global\setbox\partialpage = \vbox{%
+      % Unvbox the main output page.
+      \unvbox\PAGE
+      \kern-\topskip \kern\baselineskip
+    }%
+  }%
+  \eject % run that output routine to set \partialpage
+  %
+  % Use the double-column output routine for subsequent pages.
+  \output = {\doublecolumnout}%
+  %
+  % Change the page size parameters.  We could do this once outside this
+  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+  % format, but then we repeat the same computation.  Repeating a couple
+  % of assignments once per index is clearly meaningless for the
+  % execution time, so we may as well do it in one place.
+  %
+  % First we halve the line length, less a little for the gutter between
+  % the columns.  We compute the gutter based on the line length, so it
+  % changes automatically with the paper format.  The magic constant
+  % below is chosen so that the gutter has the same value (well, +-<1pt)
+  % as it did when we hard-coded it.
+  %
+  % We put the result in a separate register, \doublecolumhsize, so we
+  % can restore it in \pagesofar, after \hsize itself has (potentially)
+  % been clobbered.
+  %
+  \doublecolumnhsize = \hsize
+    \advance\doublecolumnhsize by -.04154\hsize
+    \divide\doublecolumnhsize by 2
+  \hsize = \doublecolumnhsize
+  %
+  % Double the \vsize as well.  (We don't need a separate register here,
+  % since nobody clobbers \vsize.)
+  \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+  \splittopskip=\topskip \splitmaxdepth=\maxdepth
+  % Get the available space for the double columns -- the normal
+  % (undoubled) page height minus any material left over from the
+  % previous page.
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  \advance\dimen@ by -\ht\partialpage
+  %
+  % box0 will be the left-hand column, box2 the right.
+  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+  \onepageout\pagesofar
+  \unvbox255
+  \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+  \unvbox\partialpage
+  %
+  \hsize = \doublecolumnhsize
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+  % The following penalty ensures that the page builder is exercised
+  % _before_ we change the output routine.  This is necessary in the
+  % following situation:
+  %
+  % The last section of the index consists only of a single entry.
+  % Before this section, \pagetotal is less than \pagegoal, so no
+  % break occurs before the last section starts.  However, the last
+  % section, consisting of \initial and the single \entry, does not
+  % fit on the page and has to be broken off.  Without the following
+  % penalty the page builder will not be exercised until \eject
+  % below, and by that time we'll already have changed the output
+  % routine to the \balancecolumns version, so the next-to-last
+  % double-column page will be processed with \balancecolumns, which
+  % is wrong:  The two columns will go to the main vertical list, with
+  % the broken-off section in the recent contributions.  As soon as
+  % the output routine finishes, TeX starts reconsidering the page
+  % break.  The two columns and the broken-off section both fit on the
+  % page, because the two columns now take up only half of the page
+  % goal.  When TeX sees \eject from below which follows the final
+  % section, it invokes the new output routine that we've set after
+  % \balancecolumns below; \onepageout will try to fit the two columns
+  % and the final section into the vbox of \pageheight (see
+  % \pagebody), causing an overfull box.
+  %
+  % Note that glue won't work here, because glue does not exercise the
+  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+  \penalty0
+  %
+  \output = {%
+    % Split the last of the double-column material.  Leave it on the
+    % current page, no automatic page break.
+    \balancecolumns
+    %
+    % If we end up splitting too much material for the current page,
+    % though, there will be another page break right after this \output
+    % invocation ends.  Having called \balancecolumns once, we do not
+    % want to call it again.  Therefore, reset \output to its normal
+    % definition right away.  (We hope \balancecolumns will never be
+    % called on to balance too much material, but if it is, this makes
+    % the output somewhat more palatable.)
+    \global\output = {\onepageout{\pagecontents\PAGE}}%
+  }%
+  \eject
+  \endgroup % started in \begindoublecolumns
+  %
+  % \pagegoal was set to the doubled \vsize above, since we restarted
+  % the current page.  We're now back to normal single-column
+  % typesetting, so reset \pagegoal to the normal \vsize (after the
+  % \endgroup where \vsize got restored).
+  \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+  \dimen@ = \ht0
+  \advance\dimen@ by \topskip
+  \advance\dimen@ by-\baselineskip
+  \divide\dimen@ by 2 % target to split to
+  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+  \splittopskip = \topskip
+  % Loop until we get a decent breakpoint.
+  {%
+    \vbadness = 10000
+    \loop
+      \global\setbox3 = \copy0
+      \global\setbox1 = \vsplit3 to \dimen@
+    \ifdim\ht3>\dimen@
+      \global\advance\dimen@ by 1pt
+    \repeat
+  }%
+  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+  \setbox0=\vbox to\dimen@{\unvbox1}%
+  \setbox2=\vbox to\dimen@{\unvbox3}%
+  %
+  \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number".  We avoid collisions with chapter
+% numbers by starting them at 10000.  (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno        \secno=0
+\newcount\subsecno     \subsecno=0
+\newcount\subsubsecno  \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno  \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+  \ifnum\appendixno=`A A%
+  \else\ifnum\appendixno=`B B%
+  \else\ifnum\appendixno=`C C%
+  \else\ifnum\appendixno=`D D%
+  \else\ifnum\appendixno=`E E%
+  \else\ifnum\appendixno=`F F%
+  \else\ifnum\appendixno=`G G%
+  \else\ifnum\appendixno=`H H%
+  \else\ifnum\appendixno=`I I%
+  \else\ifnum\appendixno=`J J%
+  \else\ifnum\appendixno=`K K%
+  \else\ifnum\appendixno=`L L%
+  \else\ifnum\appendixno=`M M%
+  \else\ifnum\appendixno=`N N%
+  \else\ifnum\appendixno=`O O%
+  \else\ifnum\appendixno=`P P%
+  \else\ifnum\appendixno=`Q Q%
+  \else\ifnum\appendixno=`R R%
+  \else\ifnum\appendixno=`S S%
+  \else\ifnum\appendixno=`T T%
+  \else\ifnum\appendixno=`U U%
+  \else\ifnum\appendixno=`V V%
+  \else\ifnum\appendixno=`W W%
+  \else\ifnum\appendixno=`X X%
+  \else\ifnum\appendixno=`Y Y%
+  \else\ifnum\appendixno=`Z Z%
+  % The \the is necessary, despite appearances, because \appendixletter is
+  % expanded while writing the .toc file.  \char\appendixno is not
+  % expandable, thus it is written literally, thus all appendixes come out
+  % with the same letter (or @) in the toc without it.
+  \else\char\the\appendixno
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter.  Page headings and footings can use
+% these.  @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+  % Compute the abs. sec. level:
+  \absseclevel=#2
+  \advance\absseclevel by \secbase
+  % Make sure \absseclevel doesn't fall outside the range:
+  \ifnum \absseclevel < 0
+    \absseclevel = 0
+  \else
+    \ifnum \absseclevel > 3
+      \absseclevel = 3
+    \fi
+  \fi
+  % The heading type:
+  \def\headtype{#1}%
+  \if \headtype U%
+    \ifnum \absseclevel < \unmlevel
+      \chardef\unmlevel = \absseclevel
+    \fi
+  \else
+    % Check for appendix sections:
+    \ifnum \absseclevel = 0
+      \edef\chapheadtype{\headtype}%
+    \else
+      \if \headtype A\if \chapheadtype N%
+       \errmessage{@appendix... within a non-appendix chapter}%
+      \fi\fi
+    \fi
+    % Check for numbered within unnumbered:
+    \ifnum \absseclevel > \unmlevel
+      \def\headtype{U}%
+    \else
+      \chardef\unmlevel = 3
+    \fi
+  \fi
+  % Now print the heading:
+  \if \headtype U%
+    \ifcase\absseclevel
+       \unnumberedzzz{#3}%
+    \or \unnumberedseczzz{#3}%
+    \or \unnumberedsubseczzz{#3}%
+    \or \unnumberedsubsubseczzz{#3}%
+    \fi
+  \else
+    \if \headtype A%
+      \ifcase\absseclevel
+         \appendixzzz{#3}%
+      \or \appendixsectionzzz{#3}%
+      \or \appendixsubseczzz{#3}%
+      \or \appendixsubsubseczzz{#3}%
+      \fi
+    \else
+      \ifcase\absseclevel
+         \chapterzzz{#3}%
+      \or \seczzz{#3}%
+      \or \numberedsubseczzz{#3}%
+      \or \numberedsubsubseczzz{#3}%
+      \fi
+    \fi
+  \fi
+  \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+  % section resetting is \global in case the chapter is in a group, such
+  % as an @include file.
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\chapno by 1
+  %
+  % Used for \float.
+  \gdef\chaplevelprefix{\the\chapno.}%
+  \resetallfloatnos
+  %
+  % \putwordChapter can contain complex things in translations.
+  \toks0=\expandafter{\putwordChapter}%
+  \message{\the\toks0 \space \the\chapno}%
+  %
+  % Write the actual heading.
+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
+  %
+  % So @section and the like are numbered underneath this chapter.
+  \global\let\section = \numberedsec
+  \global\let\subsection = \numberedsubsec
+  \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\appendixno by 1
+  \gdef\chaplevelprefix{\appendixletter.}%
+  \resetallfloatnos
+  %
+  % \putwordAppendix can contain complex things in translations.
+  \toks0=\expandafter{\putwordAppendix}%
+  \message{\the\toks0 \space \appendixletter}%
+  %
+  \chapmacro{#1}{Yappendix}{\appendixletter}%
+  %
+  \global\let\section = \appendixsec
+  \global\let\subsection = \appendixsubsec
+  \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\unnumberedno by 1
+  %
+  % Since an unnumbered has no number, no prefix for figures.
+  \global\let\chaplevelprefix = \empty
+  \resetallfloatnos
+  %
+  % This used to be simply \message{#1}, but TeX fully expands the
+  % argument to \message.  Therefore, if #1 contained @-commands, TeX
+  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+  % expanded @cite (which turns out to cause errors because \cite is meant
+  % to be executed, not expanded).
+  %
+  % Anyway, we don't want the fully-expanded definition of @cite to appear
+  % as a result of the \message, we just want `@cite' itself.  We use
+  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+  % simply yielding the contents of <toks register>.  (We also do this for
+  % the toc entries.)
+  \toks0 = {#1}%
+  \message{(\the\toks0)}%
+  %
+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+  %
+  \global\let\section = \unnumberedsec
+  \global\let\subsection = \unnumberedsubsec
+  \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+  % Well, we could do the following in a group, but that would break
+  % an assumption that \chapmacro is called at the outermost level.
+  % Thus we are safer this way:                --kasal, 24feb04
+  \let\centerparametersmaybe = \centerparameters
+  \unnmhead0{#1}%
+  \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynumbered}%
+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+%       1) We use \vbox rather than the earlier \line to permit
+%          overlong headings to fold.
+%       2) \hyphenpenalty is set to 10000 because hyphenation in a
+%          heading is obnoxious; this forbids it.
+%       3) Likewise, headings look best if no \parindent is used, and
+%          if justification is not attempted.  Hence \raggedright.
+
+\def\majorheading{%
+  {\advance\chapheadingskip by 10pt \chapbreak }%
+  \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                    \parindent=0pt\ptexraggedright
+                    \rmisbold #1\hfill}}%
+  \bigskip \par\penalty 200\relax
+  \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong.  But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+  \chappager
+  \ifodd\pageno \else
+    \begingroup
+      \evenheadline={\hfil}\evenfootline={\hfil}%
+      \oddheadline={\hfil}\oddfootline={\hfil}%
+      \hbox to 0pt{}%
+      \chappager
+    \endgroup
+  \fi
+}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+  % Insert the first mark before the heading break (see notes for \domark).
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+                        \gdef\thissection{}}%
+  %
+  \def\temptype{#2}%
+  \ifx\temptype\Ynothingkeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{\thischaptername}}%
+  \else\ifx\temptype\Yomitfromtockeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{}}%
+  \else\ifx\temptype\Yappendixkeyword
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\appendixletter}%
+      % \noexpand\putwordAppendix avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \else
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\the\chapno}%
+      % \noexpand\putwordChapter avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \fi\fi\fi
+  %
+  % Output the mark.  Pass it through \safewhatsit, to take care of
+  % the preceding space.
+  \safewhatsit\domark
+  %
+  % Insert the chapter heading break.
+  \pchapsepmacro
+  %
+  % Now the second mark, after the heading break.  No break points
+  % between here and the heading.
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \domark
+  %
+  {%
+    \chapfonts \rmisbold
+    %
+    % Have to define \lastsection before calling \donoderef, because the
+    % xref code eventually uses it.  On the other hand, it has to be called
+    % after \pchapsepmacro, or the headline will change too soon.
+    \gdef\lastsection{#1}%
+    %
+    % Only insert the separating space if we have a chapter/appendix
+    % number, and don't print the unnumbered ``number''.
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unnchap}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+      \def\toctype{omit}%
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+      \def\toctype{app}%
+    \else
+      \setbox0 = \hbox{#3\enspace}%
+      \def\toctype{numchap}%
+    \fi\fi\fi
+    %
+    % Write the toc entry for this chapter.  Must come before the
+    % \donoderef, because we include the current node name in the toc
+    % entry, and \donoderef resets it to empty.
+    \writetocentry{\toctype}{#1}{#3}%
+    %
+    % For pdftex, we have to write out the node definition (aka, make
+    % the pdfdest) after any page break, but before the actual text has
+    % been typeset.  If the destination for the pdf outline is after the
+    % text, then jumping from the outline may wind up with the text not
+    % being visible, for instance under high magnification.
+    \donoderef{#2}%
+    %
+    % Typeset the actual heading.
+    \nobreak % Avoid page breaks at the interline glue.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+          \hangindent=\wd0 \centerparametersmaybe
+          \unhbox0 #1\par}%
+  }%
+  \nobreak\bigskip % no page break after a chapter title
+  \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+  \advance\rightskip by 3\rightskip
+  \leftskip = \rightskip
+  \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt\ptexraggedright
+                       \rmisbold #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt
+                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+  \global\let\chapmacro=\chfopen
+  \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.  These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+  {%
+    % Switch to the right set of fonts.
+    \csname #2fonts\endcsname \rmisbold
+    %
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    % Insert first mark before the heading break (see notes for \domark).
+    \let\prevsectiondefs=\lastsectiondefs
+    \ifx\temptype\Ynothingkeyword
+      \ifx\sectionlevel\seckeyword
+        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+                              \gdef\thissection{\thissectionname}}%
+      \fi
+    \else\ifx\temptype\Yomitfromtockeyword
+      % Don't redefine \thissection.
+    \else\ifx\temptype\Yappendixkeyword
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \else
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \fi\fi\fi
+    %
+    % Go into vertical mode.  Usually we'll already be there, but we
+    % don't want the following whatsit to end up in a preceding paragraph
+    % if the document didn't happen to have a blank line.
+    \par
+    %
+    % Output the mark.  Pass it through \safewhatsit, to take care of
+    % the preceding space.
+    \safewhatsit\domark
+    %
+    % Insert space above the heading.
+    \csname #2headingbreak\endcsname
+    %
+    % Now the second mark, after the heading break.  No break points
+    % between here and the heading.
+    \let\prevsectiondefs=\lastsectiondefs
+    \domark
+    %
+    % Only insert the space after the number if we have a section number.
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unn}%
+      \gdef\lastsection{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      % for @headings -- no section number, don't include in toc,
+      % and don't redefine \lastsection.
+      \setbox0 = \hbox{}%
+      \def\toctype{omit}%
+      \let\sectionlevel=\empty
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{app}%
+      \gdef\lastsection{#1}%
+    \else
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{num}%
+      \gdef\lastsection{#1}%
+    \fi\fi\fi
+    %
+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+    %
+    % Write the node reference (= pdf destination for pdftex).
+    % Again, see comments in \chapmacro.
+    \donoderef{#3}%
+    %
+    % Interline glue will be inserted when the vbox is completed.
+    % That glue will be a valid breakpoint for the page, since it'll be
+    % preceded by a whatsit (usually from the \donoderef, or from the
+    % \writetocentry if there was no node).  We don't want to allow that
+    % break, since then the whatsits could end up on page n while the
+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
+    \nobreak
+    %
+    % Output the actual section heading.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+          \hangindent=\wd0  % zero if no section number
+          \unhbox0 #1}%
+  }%
+  % Add extra space after the heading -- half of whatever came above it.
+  % Don't allow stretch, though.
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
+  \nobreak
+  %
+  % We'll almost certainly start a paragraph next, so don't let that
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  %
+  % This is purely so the last item on the list is a known \penalty >
+  % 10000.  This is so \startdefun can avoid allowing breakpoints after
+  % section headings.  Otherwise, it would insert a valid breakpoint between:
+  %
+  %   @section sec-whatever
+  %   @deffn def-whatever
+  \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this.  The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything.  This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+  \edef\writetoctype{#1}%
+  \ifx\writetoctype\omitkeyword \else
+    \iftocfileopened\else
+      \immediate\openout\tocfile = \jobname.toc
+      \global\tocfileopenedtrue
+    \fi
+    %
+    \iflinks
+      {\atdummies
+       \edef\temp{%
+         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+       \temp
+      }%
+    \fi
+  \fi
+  %
+  % Tell \shipout to create a pdf destination on each page, if we're
+  % writing pdf.  These are used in the table of contents.  We can't
+  % just write one on every page because the title pages are numbered
+  % 1 and 2 (the page numbers aren't printed), and so are the first
+  % two pages of the document.  Thus, we'd have two destinations named
+  % `1', and two named `2'.
+  \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care.  This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+  \catcode`\"=\active
+  \catcode`\$=\active
+  \catcode`\<=\active
+  \catcode`\>=\active
+  \catcode`\\=\active
+  \catcode`\^=\active
+  \catcode`\_=\active
+  \catcode`\|=\active
+  \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+  \setupdatafile
+  \activecatcodes
+  \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+  % If @setchapternewpage on, and @headings double, the contents should
+  % start on an odd page, unlike chapters.  Thus, we maintain
+  % \contentsalignmacro in parallel with \pagealignmacro.
+  % From: Torbjorn Granlund <tege@matematik.su.se>
+  \contentsalignmacro
+  \immediate\closeout\tocfile
+  %
+  % Don't need to put `Contents' or `Short Contents' in the headline.
+  % It is abundantly clear what they are.
+  \chapmacro{#1}{Yomitfromtoc}{}%
+  %
+  \savepageno = \pageno
+  \begingroup                  % Set up to handle contents files properly.
+    \raggedbottom              % Worry more about breakpoints than the bottom.
+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    %
+    % Roman numerals for page numbers.
+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref.  We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+  \startcontents{\putwordTOC}%
+    \openin 1 \tocreadfilename\space
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \ifeof 1 \else
+      \pdfmakeoutlines
+    \fi
+    \closein 1
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+  \startcontents{\putwordShortTOC}%
+    %
+    \let\numchapentry = \shortchapentry
+    \let\appentry = \shortchapentry
+    \let\unnchapentry = \shortunnchapentry
+    % We want a true roman here for the page numbers.
+    \secfonts
+    \let\rm=\shortcontrm \let\bf=\shortcontbf
+    \let\sl=\shortcontsl \let\tt=\shortconttt
+    \rm
+    \hyphenpenalty = 10000
+    \advance\baselineskip by 1pt % Open it up a little.
+    \def\numsecentry##1##2##3##4{}
+    \let\appsecentry = \numsecentry
+    \let\unnsecentry = \numsecentry
+    \let\numsubsecentry = \numsecentry
+    \let\appsubsecentry = \numsecentry
+    \let\unnsubsecentry = \numsecentry
+    \let\numsubsubsecentry = \numsecentry
+    \let\appsubsubsecentry = \numsecentry
+    \let\unnsubsubsecentry = \numsecentry
+    \openin 1 \tocreadfilename\space
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \closein 1
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+  % This space should be enough, since a single number is .5em, and the
+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+  % But use \hss just in case.
+  % (This space doesn't include the extra space that gets added after
+  % the label; that gets put in by \shortchapentry above.)
+  %
+  % We'd like to right-justify chapter numbers, but that looks strange
+  % with appendix letters.  And right-justifying numbers and
+  % left-justifying letters looks strange when there is less than 10
+  % chapters.  Have to read the whole toc once to know how many chapters
+  % there are before deciding ...
+  \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+  % We use M since it's probably the widest letter.
+  \setbox0 = \hbox{\putwordAppendix{} M}%
+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+   \begingroup
+     \chapentryfonts
+     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+   \endgroup
+   \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+  \secentryfonts \leftskip=\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+  \subsecentryfonts \leftskip=2\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+  \subsubsecentryfonts \leftskip=3\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex    escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\envdef\tex{%
+  \setupmarkupstyle{tex}%
+  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+  \catcode `\%=14
+  \catcode `\+=\other
+  \catcode `\"=\other
+  \catcode `\|=\other
+  \catcode `\<=\other
+  \catcode `\>=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
+  \escapechar=`\\
+  %
+  \let\b=\ptexb
+  \let\bullet=\ptexbullet
+  \let\c=\ptexc
+  \let\,=\ptexcomma
+  \let\.=\ptexdot
+  \let\dots=\ptexdots
+  \let\equiv=\ptexequiv
+  \let\!=\ptexexclam
+  \let\i=\ptexi
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \let\{=\ptexlbrace
+  \let\+=\tabalign
+  \let\}=\ptexrbrace
+  \let\/=\ptexslash
+  \let\*=\ptexstar
+  \let\t=\ptext
+  \expandafter \let\csname top\endcsname=\ptextop  % outer
+  \let\frenchspacing=\plainfrenchspacing
+  %
+  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+  \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments.  \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical.  We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
+      % it's not a good place to break if the last penalty was \nobreak
+      % or better ...
+      \ifnum\lastpenalty<10000 \penalty-50 \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+        \ctl\leaders\hrule height\circthick\hfil\ctr
+        \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+        \cbl\leaders\hrule height\circthick\hfil\cbr
+        \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
+  \startsavinginserts
+  \lskip=\leftskip \rskip=\rightskip
+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
+  \cartinner=\hsize \advance\cartinner by-\lskip
+  \advance\cartinner by-\rskip
+  \cartouter=\hsize
+  \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+                               % side, and for 6pt waste from
+                               % each corner char, and rule thickness
+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+  % Flag to tell @lisp, etc., not to narrow margin.
+  \let\nonarrowing = t%
+  \vbox\bgroup
+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
+      \carttop
+      \hbox\bgroup
+         \hskip\lskip
+         \vrule\kern3pt
+         \vbox\bgroup
+             \kern3pt
+             \hsize=\cartinner
+             \baselineskip=\normbskip
+             \lineskip=\normlskip
+             \parskip=\normpskip
+             \vskip -\parskip
+             \comment % For explanation, see the end of \def\group.
+}
+\def\Ecartouche{%
+              \ifhmode\par\fi
+             \kern3pt
+         \egroup
+         \kern3pt\vrule
+         \hskip\rskip
+      \egroup
+      \cartbot
+  \egroup
+  \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+  \aboveenvbreak
+  \hfuzz = 12pt % Don't be fussy
+  \sepspaces % Make spaces be word-separators rather than space tokens.
+  \let\par = \lisppar % don't ignore blank lines
+  \obeylines % each line of input is a line of output
+  \parskip = 0pt
+  % Turn off paragraph indentation but redefine \indent to emulate
+  % the normal \indent.
+  \nonfillparindent=\parindent
+  \parindent = 0pt
+  \let\indent\nonfillindent
+  %
+  \emergencystretch = 0pt % don't try to avoid overfull boxes
+  \ifx\nonarrowing\relax
+    \advance \leftskip by \lispnarrowing
+    \exdentamount=\lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+%    @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+  \ifx\SETdispenvsize\smallword
+    % end paragraph for sake of leading, in case document has no blank
+    % line.  This is redundant with what happens in \aboveenvbreak, but
+    % we need to do it before changing the fonts, and it's inconvenient
+    % to change the fonts afterward.
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
+    \smallexamplefonts \rm
+  \fi
+}
+\def\setsmalldispenv{%
+  \ifx\SETdispenvsize\nosmallword
+  \else
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
+    \smallexamplefonts \rm
+  \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+  \expandafter\let\csname E#1\endcsname \afterenvbreak
+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+  \makedispenv{#1}{#3}
+  \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+  \nonfillstart
+  \tt\setupmarkupstyle{example}%
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+  \nonfillstart
+  \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{format}{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \advance\leftskip by 0pt plus 1fill
+  \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification.  From plain.tex.
+\envdef\raggedright{%
+  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+  \parindent=0pt \leftskip0pt plus2em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.  We keep \parskip nonzero in general, since
+% we're doing normal filling.  So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\def\quotationstart{%
+  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+  \parindent=0pt
+  %
+  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+  \ifx\nonarrowing\relax
+    \advance\leftskip by \lispnarrowing
+    \advance\rightskip by \lispnarrowing
+    \exdentamount = \lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \parsearg\quotationlabel
+}
+
+\envdef\quotation{%
+  \setnormaldispenv
+  \quotationstart
+}
+
+\envdef\smallquotation{%
+  \setsmalldispenv
+  \quotationstart
+}
+\let\Esmallquotation = \Equotation
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+  \par
+  \ifx\quotationauthor\undefined\else
+    % indent a bit.
+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+  \fi
+  {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty \else
+    {\bf #1: }%
+  \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too.  Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+  \do\ \do\\\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+  \do\<\do\>\do\|\do\@\do+\do\"%
+  % Don't do the quotes -- if we do, @set txicodequoteundirected and
+  % @set txicodequotebacktick will not have effect on @verb and
+  % @verbatim, and ?` and !` ligatures won't get disabled.
+  %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+  \tt  % easiest (and conventionally used) font for verbatim
+  \def\par{\leavevmode\endgraf}%
+  \setupmarkupstyle{verb}%
+  \tabeightspaces
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+%
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabexpand{%
+    \catcode`\^^I=\active
+    \def^^I{\leavevmode\egroup
+      \dimen0=\wd0 % the width so far, or since the previous tab
+      \divide\dimen0 by\tabw
+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
+      \wd0=\dimen0 \box0 \starttabbox
+    }%
+  }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  % Easiest (and conventionally used) font for verbatim
+  \tt
+  \def\par{\leavevmode\egroup\box0\endgraf}%
+  \tabexpand
+  \setupmarkupstyle{verbatim}%
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+  \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+%    \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+  \catcode`\ =\active
+  \obeylines %
+  % ignore everything up to the first ^^M, that's the newline at the end
+  % of the @verbatim input line itself.  Otherwise we get an extra blank
+  % line in the output.
+  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+  % We really want {...\end verbatim} in the body of the macro, but
+  % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+    \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+  {%
+    \makevalueexpandable
+    \setupverbatim
+    \indexnofonts       % Allow `@@' and other weird things in file names.
+    \input #1
+    \afterenvbreak
+  }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+  \begingroup
+    \parindent = 0pt  % paragraph indentation looks wrong on title page
+    \scanexp\copyingtext
+  \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+  \ifnum\lastpenalty<10000
+    \medbreak
+    \defunpenalty=10003 % Will keep this @deffn together with the
+                        % following @def command, see below.
+  \else
+    % If there are two @def commands in a row, we'll have a \nobreak,
+    % which is there to keep the function description together with its
+    % header.  But if there's nothing but headers, we need to allow a
+    % break somewhere.  Check specifically for penalty 10002, inserted
+    % by \printdefunline, instead of 10000, since the sectioning
+    % commands also insert a nobreak penalty, and we don't want to allow
+    % a break between a section heading and a defun.
+    %
+    % As a minor refinement, we avoid "club" headers by signalling
+    % with penalty of 10003 after the very first @deffn in the
+    % sequence (see above), and penalty of 10002 after any following
+    % @def command.
+    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+    %
+    % Similarly, after a section heading, do not allow a break.
+    % But do insert the glue.
+    \medskip  % preceded by discardable penalty, so not a breakpoint
+  \fi
+  %
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+  % First, check whether we are in the right environment:
+  \checkenv#1%
+  %
+  % As above, allow line break if we have multiple x headers in a row.
+  % It's not a great place, though.
+  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+  %
+  % And now, it's time to reuse the body of the original defun:
+  \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+  \begingroup
+    % call \deffnheader:
+    #1#2 \endheader
+    % common ending:
+    \interlinepenalty = 10000
+    \advance\rightskip by 0pt plus 1fil
+    \endgraf
+    \nobreak\vskip -\parskip
+    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
+    % Some of the @defun-type tags do not enable magic parentheses,
+    % rendering the following check redundant.  But we don't optimize.
+    \checkparencounts
+  \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+  \expandafter\let\csname E#1\endcsname = \Edefun
+  \edef\temp{\noexpand\domakedefun
+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+  \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+  \envdef#1{%
+    \startdefun
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#2{\dodefunx#1}%
+  \def#3%
+}
+
+%%% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+  \dosubind{fn}{\code{#3}}{#1}%
+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+%%% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{fn}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{vr}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+  \doind{tp}{\code{#2}}%
+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+  % Get the values of \leftskip and \rightskip as they were outside the @def...
+  \advance\leftskip by -\defbodyindent
+  %
+  % How we'll format the type name.  Putting it in brackets helps
+  % distinguish it from the body text that may end up on the next line
+  % just below it.
+  \def\temp{#1}%
+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+  %
+  % Figure out line sizes for the paragraph shape.
+  % The first line needs space for \box0; but if \rightskip is nonzero,
+  % we need only space for the part of \box0 which exceeds it:
+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  % The continuations:
+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
+  % (plain.tex says that \dimen1 should be used only as global.)
+  \parshape 2 0in \dimen0 \defargsindent \dimen2
+  %
+  % Put the type name to the right margin.
+  \noindent
+  \hbox to 0pt{%
+    \hfil\box0 \kern-\hsize
+    % \hsize has to be shortened this way:
+    \kern\leftskip
+    % Intentionally do not respect \rightskip, since we need the space.
+  }%
+  %
+  % Allow all lines to be underfull without complaint:
+  \tolerance=10000 \hbadness=10000
+  \exdentamount=\defbodyindent
+  {%
+    % defun fonts. We use typewriter by default (used to be bold) because:
+    % . we're printing identifiers, they should be in tt in principle.
+    % . in languages with many accents, such as Czech or French, it's
+    %   common to leave accents off identifiers.  The result looks ok in
+    %   tt, but exceedingly strange in rm.
+    % . we don't want -- and --- to be treated as ligatures.
+    % . this still does not fix the ?` and !` ligatures, but so far no
+    %   one has made identifiers using them :).
+    \df \tt
+    \def\temp{#2}% return value type
+    \ifx\temp\empty\else \tclose{\temp} \fi
+    #3% output function name
+  }%
+  {\rm\enskip}% hskip 0.5 em of \tenrm
+  %
+  \boldbrax
+  % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name.  This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable.  Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+  % use sl by default (not ttsl),
+  % tt for the names.
+  \df \sl \hyphenchar\font=0
+  %
+  % On the other hand, if an argument has two dashes (for instance), we
+  % want a way to get ttsl.  Let's try @var for that.
+  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+  #1%
+  \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+  \catcode`\(=\active \catcode`\)=\active
+  \catcode`\[=\active \catcode`\]=\active
+  \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc.  For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+  \activeparens
+  \global\let(=\lparen \global\let)=\rparen
+  \global\let[=\lbrack \global\let]=\rbrack
+  \global\let& = \&
+
+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+  \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+  \ifampseen
+    % At the first level, print parens in roman,
+    % otherwise use the default font.
+    \ifnum \parencount=1 \rm \fi
+  \else
+    % The \sf parens (in \boldbrax) actually are a little bolder than
+    % the contained text.  This is especially needed for [ and ] .
+    \sf
+  \fi
+}
+\def\infirstlevel#1{%
+  \ifampseen
+    \ifnum\parencount=1
+      #1%
+    \fi
+  \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+  \global\advance\parencount by 1
+  {\parenfont(}%
+  \infirstlevel \bfafterword
+}
+\def\clnr{%
+  {\parenfont)}%
+  \infirstlevel \sl
+  \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+  \global\advance\brackcount by 1
+  {\bf[}%
+}
+\def\rbrb{%
+  {\bf]}%
+  \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+  \ifnum\parencount=0 \else \badparencount \fi
+  \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+  \message{Warning: unbalanced parentheses in @def...}%
+  \global\parencount=0
+}
+\def\badbrackcount{%
+  \message{Warning: unbalanced square brackets in @def...}%
+  \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+  \newwrite\macscribble
+  \def\scantokens#1{%
+    \toks0={#1}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \input \jobname.tmp
+  }
+\fi
+
+\def\scanmacro#1{%
+  \begingroup
+    \newlinechar`\^^M
+    \let\xeatspaces\eatspaces
+    % Undo catcode changes of \startcontents and \doprintindex
+    % When called from @insertcopying or (short)caption, we need active
+    % backslash to get it printed correctly.  Previously, we had
+    % \catcode`\\=\other instead.  We'll see whether a problem appears
+    % with macro expansion.                            --kasal, 19aug04
+    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+    % ... and \example
+    \spaceisspace
+    %
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
+    %                                                  --kasal, 29nov03
+    \scantokens{#1\endinput}%
+  \endgroup
+}
+
+\def\scanexp#1{%
+  \edef\temp{\noexpand\scanmacro{#1}}%
+  \temp
+}
+
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+
+% List of all defined macros in the form
+%    \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+     \toks0 = \expandafter{\macrolist\definedummyword#1}%
+     \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+%   \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+  \expandafter\let
+  \csname#1\expandafter\endcsname
+  \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion.  Must do this non-globally, to
+% confine the change to the current group.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+  \catcode`\"=\other
+  \catcode`\+=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\@=\other
+  \catcode`\^=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\~=\other
+  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+  \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+  \scanctxt
+  \catcode`\{=\other
+  \catcode`\}=\other
+  \catcode`\^^M=\other
+  \usembodybackslash
+}
+
+\def\macroargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \ifx\argl\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \argl;%
+  \fi
+  \if1\csname ismacro.\the\macname\endcsname
+     \message{Warning: redefining \the\macname}%
+  \else
+     \expandafter\ifx\csname \the\macname\endcsname \relax
+     \else \errmessage{Macro name \the\macname\space already defined}\fi
+     \global\cslet{macsave.\the\macname}{\the\macname}%
+     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+     \addtomacrolist{\the\macname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody
+  \fi}
+
+\parseargdef\unmacro{%
+  \if1\csname ismacro.#1\endcsname
+    \global\cslet{#1}{macsave.#1}%
+    \global\expandafter\let \csname ismacro.#1\endcsname=0%
+    % Remove the macro name from \macrolist:
+    \begingroup
+      \expandafter\let\csname#1\endcsname \relax
+      \let\definedummyword\unmacrodo
+      \xdef\macrolist{\macrolist}%
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
+
+% Called by \do from \dounmacro on each macro.  The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+  \ifx #1\relax
+    % remove this
+  \else
+    \noexpand\definedummyword \noexpand#1%
+  \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX:  let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+  \let\hash=##% convert placeholders to macro parameter chars
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup\noexpand\scanmacro{\temp}}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \egroup
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \expandafter\noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \egroup
+          \noexpand\norecurse{\the\macname}%
+          \noexpand\scanmacro{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+  {%
+    \expandafter\let\obeyedspace=\empty
+    \addtomacrolist{#1}%
+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+  }%
+  \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs    % True if xref values are known.
+\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+  node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references.  The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross,  ,  , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node.  #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+  \ifx\lastnode\empty\else
+    \setref{\lastnode}{#1}%
+    \global\let\lastnode=\empty
+  \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+%                 or the anchor name.
+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
+%                 empty for anchors.
+% 3) NAME-pg    - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+  \pdfmkdest{#1}%
+  \iflinks
+    {%
+      \atdummies  % preserve commands, but don't expand them
+      \edef\writexrdef##1##2{%
+       \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+         ##1}{##2}}% these are parameters of \writexrdef
+      }%
+      \toks0 = \expandafter{\lastsection}%
+      \immediate \writexrdef{title}{\the\toks0 }%
+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
+    }%
+  \fi
+}
+
+% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual.  All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+  \unsepspaces
+  \def\printedmanual{\ignorespaces #5}%
+  \def\printedrefname{\ignorespaces #3}%
+  \setbox1=\hbox{\printedmanual\unskip}%
+  \setbox0=\hbox{\printedrefname\unskip}%
+  \ifdim \wd0 = 0pt
+    % No printed node name was explicitly given.
+    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+      % Use the node name inside the square brackets.
+      \def\printedrefname{\ignorespaces #1}%
+    \else
+      % Use the actual chapter/section title appear inside
+      % the square brackets.  Use the real section title if we have it.
+      \ifdim \wd1 > 0pt
+        % It is in another manual, so we don't have it.
+        \def\printedrefname{\ignorespaces #1}%
+      \else
+        \ifhavexrefs
+          % We know the real title if we have the xref values.
+          \def\printedrefname{\refx{#1-title}{}}%
+        \else
+          % Otherwise just copy the Info node name.
+          \def\printedrefname{\ignorespaces #1}%
+        \fi%
+      \fi
+    \fi
+  \fi
+  %
+  % Make link in pdf output.
+  \ifpdf
+    {\indexnofonts
+     \turnoffactive
+     % This expands tokens, so do it after making catcode changes, so _
+     % etc. don't get their TeX definitions.
+     \getfilename{#4}%
+     %
+     % See comments at \activebackslashdouble.
+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+      \backslashparens\pdfxrefdest}%
+     %
+     \leavevmode
+     \startlink attr{/Border [0 0 0]}%
+     \ifnum\filenamelength>0
+       goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     \else
+       goto name{\pdfmkpgn{\pdfxrefdest}}%
+     \fi
+    }%
+    \setcolor{\linkcolor}%
+  \fi
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  We distinguish them by the
+  % LABEL-title being set to a magic string.
+  {%
+    % Have to otherify everything special to allow the \csname to
+    % include an _ in the xref name, etc.
+    \indexnofonts
+    \turnoffactive
+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+      \csname XR#1-title\endcsname
+  }%
+  \iffloat\Xthisreftitle
+    % If the user specified the print name (third arg) to the ref,
+    % print it instead of our usual "Figure 1.2".
+    \ifdim\wd0 = 0pt
+      \refx{#1-snt}{}%
+    \else
+      \printedrefname
+    \fi
+    %
+    % if the user also gave the printed manual name (fifth arg), append
+    % "in MANUALNAME".
+    \ifdim \wd1 > 0pt
+      \space \putwordin{} \cite{\printedmanual}%
+    \fi
+  \else
+    % node/anchor (non-float) references.
+    %
+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+    % insert empty discretionaries after hyphens, which means that it will
+    % not find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens, this
+    % is a loss.  Therefore, we give the text of the node name again, so it
+    % is as if TeX is seeing it for the first time.
+    \ifdim \wd1 > 0pt
+      \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else
+      % _ (for example) has to be the character _ for the purposes of the
+      % control sequence corresponding to the node, but it has to expand
+      % into the usual \leavevmode...\vrule stuff for purposes of
+      % printing. So we \turnoffactive for the \refx-snt, back on for the
+      % printing, back off for the \refx-pg.
+      {\turnoffactive
+       % Only output a following space if the -snt ref is nonempty; for
+       % @unnumbered and @anchor, it won't be.
+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+      }%
+      % output the `[mynode]' via a macro so it can be overridden.
+      \xrefprintnodename\printedrefname
+      %
+      % But we always want a comma and a space:
+      ,\space
+      %
+      % output the `page 3'.
+      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents.  Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+  \ifnum\secno=0
+    \putwordChapter@tie \the\chapno
+  \else \ifnum\subsecno=0
+    \putwordSection@tie \the\chapno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+\def\Yappendix{%
+  \ifnum\secno=0
+     \putwordAppendix@tie @char\the\appendixno{}%
+  \else \ifnum\subsecno=0
+     \putwordSection@tie @char\the\appendixno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie
+      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+  {%
+    \indexnofonts
+    \otherbackslash
+    \expandafter\global\expandafter\let\expandafter\thisrefX
+      \csname XR#1\endcsname
+  }%
+  \ifx\thisrefX\relax
+    % If not defined, say something at least.
+    \angleleft un\-de\-fined\angleright
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
+      \fi
+    \fi
+  \else
+    % It's defined, so just use it.
+    \thisrefX
+  \fi
+  #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file.  Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions).  But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+  {% The node name might contain 8-bit characters, which in our current
+   % implementation are changed to commands like @'e.  Don't let these
+   % mess up the control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safexrefname{#1}%
+  }%
+  %
+  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+  %
+  % Was that xref control sequence that we just defined for a float?
+  \expandafter\iffloat\csname XR\safexrefname\endcsname
+    % it was a float, and we have the (safe) float type in \iffloattype.
+    \expandafter\let\expandafter\floatlist
+      \csname floatlist\iffloattype\endcsname
+    %
+    % Is this the first time we've seen this float type?
+    \expandafter\ifx\floatlist\relax
+      \toks0 = {\do}% yes, so just \do
+    \else
+      % had it before, so preserve previous elements in list.
+      \toks0 = \expandafter{\floatlist\do}%
+    \fi
+    %
+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
+    % for later use in \listoffloats.
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+      {\safexrefname}}%
+  \fi
+}
+
+% Read the last existing aux file, if any.  No error if none exists.
+%
+\def\tryauxfile{%
+  \openin 1 \jobname.aux
+  \ifeof 1 \else
+    \readdatafile{aux}%
+    \global\havexrefstrue
+  \fi
+  \closein 1
+}
+
+\def\setupdatafile{%
+  \catcode`\^^@=\other
+  \catcode`\^^A=\other
+  \catcode`\^^B=\other
+  \catcode`\^^C=\other
+  \catcode`\^^D=\other
+  \catcode`\^^E=\other
+  \catcode`\^^F=\other
+  \catcode`\^^G=\other
+  \catcode`\^^H=\other
+  \catcode`\^^K=\other
+  \catcode`\^^L=\other
+  \catcode`\^^N=\other
+  \catcode`\^^P=\other
+  \catcode`\^^Q=\other
+  \catcode`\^^R=\other
+  \catcode`\^^S=\other
+  \catcode`\^^T=\other
+  \catcode`\^^U=\other
+  \catcode`\^^V=\other
+  \catcode`\^^W=\other
+  \catcode`\^^X=\other
+  \catcode`\^^Z=\other
+  \catcode`\^^[=\other
+  \catcode`\^^\=\other
+  \catcode`\^^]=\other
+  \catcode`\^^^=\other
+  \catcode`\^^_=\other
+  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
+  % supported in the main text, it doesn't seem desirable.  Furthermore,
+  % that is not enough: for node names that actually contain a ^
+  % character, we would end up writing a line like this: 'xrdef {'hat
+  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+  % argument, and \hat is not an expandable control sequence.  It could
+  % all be worked out, but why?  Either we support ^^ or we don't.
+  %
+  % The other change necessary for this was to define \auxhat:
+  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+  % and then to call \auxhat in \setq.
+  %
+  \catcode`\^=\other
+  %
+  % Special characters.  Should be turned off anyway, but...
+  \catcode`\~=\other
+  \catcode`\[=\other
+  \catcode`\]=\other
+  \catcode`\"=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\$=\other
+  \catcode`\#=\other
+  \catcode`\&=\other
+  \catcode`\%=\other
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+  %
+  % This is to support \ in node names and titles, since the \
+  % characters end up in a \csname.  It's easier than
+  % leaving it active and making its active definition an actual \
+  % character.  What I don't understand is why it works in the *value*
+  % of the xrdef.  Seems like it should be a catcode12 \, and that
+  % should not typeset properly.  But it works, so I'm moving on for
+  % now.  --karl, 15jan04.
+  \catcode`\\=\other
+  %
+  % Make the characters 128-255 be printing characters.
+  {%
+    \count1=128
+    \def\loop{%
+      \catcode\count1=\other
+      \advance\count1 by 1
+      \ifnum \count1<256 \loop \fi
+    }%
+  }%
+  %
+  % @ is our escape character in .aux files, and we need braces.
+  \catcode`\{=1
+  \catcode`\}=2
+  \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+  \setupdatafile
+  \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes.  Otherwise like plain.
+\gdef\footnote{%
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \global\advance\footnoteno by \@ne
+  \edef\thisfootno{$^{\the\footnoteno}$}%
+  %
+  % In case the footnote comes at the end of a sentence, preserve the
+  % extra spacing after we do the footnote number.
+  \let\@sf\empty
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+  %
+  % Remove inadvertent blank space before typesetting the footnote number.
+  \unskip
+  \thisfootno\@sf
+  \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter.  Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read.  --karl, 16nov96.
+%
+\gdef\dofootnote{%
+  \insert\footins\bgroup
+  % We want to typeset this text as a normal paragraph, even if the
+  % footnote reference occurs in (for example) a display environment.
+  % So reset some parameters.
+  \hsize=\pagewidth
+  \interlinepenalty\interfootnotelinepenalty
+  \splittopskip\ht\strutbox % top baseline for broken footnotes
+  \splitmaxdepth\dp\strutbox
+  \floatingpenalty\@MM
+  \leftskip\z@skip
+  \rightskip\z@skip
+  \spaceskip\z@skip
+  \xspaceskip\z@skip
+  \parindent\defaultparindent
+  %
+  \smallfonts \rm
+  %
+  % Because we use hanging indentation in footnotes, a @noindent appears
+  % to exdent this text, so make it be a no-op.  makeinfo does not use
+  % hanging indentation so @noindent can still be needed within footnote
+  % text after an @example or the like (not that this is good style).
+  \let\noindent = \relax
+  %
+  % Hang the footnote text off the number.  Use \everypar in case the
+  % footnote extends for more than one paragraph.
+  \everypar = {\hang}%
+  \textindent{\thisfootno}%
+  %
+  % Don't crash into the line above the footnote text.  Since this
+  % expands into a box, it must come within the paragraph, lest it
+  % provide a place where TeX can split the footnote.
+  \footstrut
+  \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished.  Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes.  --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+  \ifx \insert\ptexinsert
+    \let\insert\saveinsert
+  \else
+    \let\checkinserts\relax
+  \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+  \afterassignment\next
+  % swallow the left brace
+  \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+    {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
+  \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+  \next
+}
+\def\newsaveinsX #1{%
+  \csname newbox\endcsname #1%
+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+    \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image.  We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front.  If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+  % Do not bother showing banner with epsf.tex v2.7k (available in
+  % doc/epsf.tex and on ctan).
+  \def\epsfannounce{\toks0 = }%
+  \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+  work.  It is also included in the Texinfo distribution, or you can get
+  it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+  \ifx\epsfbox\undefined
+    \ifwarnednoepsf \else
+      \errhelp = \noepsfhelp
+      \errmessage{epsf.tex not found, images will be ignored}%
+      \global\warnednoepsftrue
+    \fi
+  \else
+    \imagexxx #1,,,,,\finish
+  \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+  \catcode`\^^M = 5     % in case we're inside an example
+  \normalturnoffactive  % allow _ et al. in names
+  % If the image is by itself, center it.
+  \ifvmode
+    \imagevmodetrue
+    \nobreak\medskip
+    % Usually we'll have text after the image which will insert
+    % \parskip glue, so insert it here too to equalize the space
+    % above and below.
+    \nobreak\vskip\parskip
+    \nobreak
+  \fi
+  %
+  % Leave vertical mode so that indentation from an enclosing
+  % environment such as @quotation is respected.  On the other hand, if
+  % it's at the top level, we don't want the normal paragraph indentation.
+  \noindent
+  %
+  % Output the image.
+  \ifpdf
+    \dopdfimage{#1}{#2}{#3}%
+  \else
+    % \epsfbox itself resets \epsf?size at each figure.
+    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+    \epsfbox{#1.eps}%
+  \fi
+  %
+  \ifimagevmode \medskip \fi  % space after the standalone image
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc.  We don't actually implement floating yet, we always include the
+% float "here".  But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label.  Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored.  It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+  \let\thiscaption=\empty
+  \let\thisshortcaption=\empty
+  %
+  % don't lose footnotes inside @float.
+  %
+  % BEWARE: when the floats start float, we have to issue warning whenever an
+  % insert appears inside a float which could possibly float. --kasal, 26may04
+  %
+  \startsavinginserts
+  %
+  % We can't be used inside a paragraph.
+  \par
+  %
+  \vtop\bgroup
+    \def\floattype{#1}%
+    \def\floatlabel{#2}%
+    \def\floatloc{#3}% we do nothing with this yet.
+    %
+    \ifx\floattype\empty
+      \let\safefloattype=\empty
+    \else
+      {%
+        % the floattype might have accents or other special characters,
+        % but we need to use it in a control sequence name.
+        \indexnofonts
+        \turnoffactive
+        \xdef\safefloattype{\floattype}%
+      }%
+    \fi
+    %
+    % If label is given but no type, we handle that as the empty type.
+    \ifx\floatlabel\empty \else
+      % We want each FLOATTYPE to be numbered separately (Figure 1,
+      % Table 1, Figure 2, ...).  (And if no label, no number.)
+      %
+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+      \global\advance\floatno by 1
+      %
+      {%
+        % This magic value for \lastsection is output by \setref as the
+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
+        % labels (which have a completely different output format) from
+        % node and anchor labels.  And \xrdef uses it to construct the
+        % lists of floats.
+        %
+        \edef\lastsection{\floatmagic=\safefloattype}%
+        \setref{\floatlabel}{Yfloat}%
+      }%
+    \fi
+    %
+    % start with \parskip glue, I guess.
+    \vskip\parskip
+    %
+    % Don't suppress indentation if a float happens to start a section.
+    \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption:    Foo 1.1
+% @float Foo & @caption{Cap}:     Foo: Cap
+% @float Foo & no caption:        Foo
+% @float ,lbl & Caption{Cap}:     1.1: Cap
+% @float ,lbl & no caption:       1.1
+% @float & @caption{Cap}:         Cap
+% @float & no caption:
+%
+\def\Efloat{%
+    \let\floatident = \empty
+    %
+    % In all cases, if we have a float type, it comes first.
+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+    %
+    % If we have an xref label, the number comes next.
+    \ifx\floatlabel\empty \else
+      \ifx\floattype\empty \else % if also had float type, need tie first.
+        \appendtomacro\floatident{\tie}%
+      \fi
+      % the number.
+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+    \fi
+    %
+    % Start the printed caption with what we've constructed in
+    % \floatident, but keep it separate; we need \floatident again.
+    \let\captionline = \floatident
+    %
+    \ifx\thiscaption\empty \else
+      \ifx\floatident\empty \else
+       \appendtomacro\captionline{: }% had ident, so need a colon between
+      \fi
+      %
+      % caption text.
+      \appendtomacro\captionline{\scanexp\thiscaption}%
+    \fi
+    %
+    % If we have anything to print, print it, with space before.
+    % Eventually this needs to become an \insert.
+    \ifx\captionline\empty \else
+      \vskip.5\parskip
+      \captionline
+      %
+      % Space below caption.
+      \vskip\parskip
+    \fi
+    %
+    % If have an xref label, write the list of floats info.  Do this
+    % after the caption, to avoid chance of it being a breakpoint.
+    \ifx\floatlabel\empty \else
+      % Write the text that goes in the lof to the aux file as
+      % \floatlabel-lof.  Besides \floatident, we include the short
+      % caption if specified, else the full caption if specified, else nothing.
+      {%
+        \atdummies
+        %
+        % since we read the caption text in the macro world, where ^^M
+        % is turned into a normal character, we have to scan it back, so
+        % we don't write the literal three characters "^^M" into the aux file.
+       \scanexp{%
+         \xdef\noexpand\gtemp{%
+           \ifx\thisshortcaption\empty
+             \thiscaption
+           \else
+             \thisshortcaption
+           \fi
+         }%
+       }%
+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+         \ifx\gtemp\empty \else : \gtemp \fi}}%
+      }%
+    \fi
+  \egroup  % end of \vtop
+  %
+  % place the captured inserts
+  %
+  % BEWARE: when the floats start floating, we have to issue warning
+  % whenever an insert appears inside a float which could possibly
+  % float. --kasal, 26may04
+  %
+  \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+  \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use.  Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+  \ifx#1\relax
+      % Haven't seen this figure type before.
+      \csname newcount\endcsname #1%
+      %
+      % Remember to reset this floatno at the next chap.
+      \expandafter\gdef\expandafter\resetallfloatnos
+        \expandafter{\resetallfloatnos #1=0 }%
+  \fi
+  \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref.  That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
+% (safe) float type for this float.  We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+  \def\temp{#1}%
+  \def\iffloattype{#2}%
+  \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+  \def\floattype{#1}% floattype
+  {%
+    % the floattype might have accents or other special characters,
+    % but we need to use it in a control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safefloattype{\floattype}%
+  }%
+  %
+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+    \ifhavexrefs
+      % if the user said @listoffloats foo but never @float foo.
+      \message{\linenumber No `\safefloattype' floats to list.}%
+    \fi
+  \else
+    \begingroup
+      \leftskip=\tocindent  % indent these entries like a toc
+      \let\do=\listoffloatsdo
+      \csname floatlist\safefloattype\endcsname
+    \endgroup
+  \fi
+}
+
+% This is called on each entry in a list of floats.  We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+  % Can't fully expand XR#1-lof because it can contain anything.  Just
+  % pass the control sequence.  On the other hand, XR#1-pg is just the
+  % page number, and we want to fully expand that so we can get a link
+  % in pdf output.
+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+  %
+  % use the same \entry macro we use to generate the TOC and index.
+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+  \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding.  Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+  \catcode`\_ = \active
+  \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+  \let_=\normalunderscore  % normal _ character for filenames
+  \tex % read txi-??.tex file in plain TeX.
+    % Read the file by the name they passed if it exists.
+    \openin 1 txi-#1.tex
+    \ifeof 1
+      \documentlanguagetrywithoutunderscore{#1_\finish}%
+    \else
+      \globaldefs = 1  % everything in the txi-LL files needs to persist
+      \input txi-#1.tex
+    \fi
+    \closein 1
+  \endgroup % end raw TeX
+\endgroup}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+  \openin 1 txi-#1.tex
+  \ifeof 1
+    \errhelp = \nolanghelp
+    \errmessage{Cannot read language file txi-#1.tex}%
+  \else
+    \globaldefs = 1  % everything in the txi-LL files needs to persist
+    \input txi-#1.tex
+  \fi
+  \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty.  Maybe you need to install it?  Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages.  This means we can support hyphenation in
+% Texinfo, at least to some extent.  (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+  % do not set the language if the name is undefined in the current TeX.
+  \expandafter\ifx\csname lang@#1\endcsname \relax
+    \message{no patterns for #1}%
+  \else
+    \global\language = \csname lang@#1\endcsname
+  \fi
+  % but there is no harm in adjusting the hyphenmin values regardless.
+  \global\lefthyphenmin = #2\relax
+  \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \global\catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\parseargdef\documentencoding{%
+  % Encoding being declared for the document.
+  \def\declaredencoding{\csname #1.enc\endcsname}%
+  %
+  % Supported encodings: names converted to tokens in order to be able
+  % to compare them with \ifx.
+  \def\ascii{\csname US-ASCII.enc\endcsname}%
+  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+  \def\latone{\csname ISO-8859-1.enc\endcsname}%
+  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+  \def\utfeight{\csname UTF-8.enc\endcsname}%
+  %
+  \ifx \declaredencoding \ascii
+     \asciichardefs
+  %
+  \else \ifx \declaredencoding \lattwo
+     \setnonasciicharscatcode\active
+     \lattwochardefs
+  %
+  \else \ifx \declaredencoding \latone
+     \setnonasciicharscatcode\active
+     \latonechardefs
+  %
+  \else \ifx \declaredencoding \latnine
+     \setnonasciicharscatcode\active
+     \latninechardefs
+  %
+  \else \ifx \declaredencoding \utfeight
+     \setnonasciicharscatcode\active
+     \utfeightchardefs
+  %
+  \else
+    \message{Unknown document encoding #1, ignoring.}%
+  %
+  \fi % utfeight
+  \fi % latnine
+  \fi % latone
+  \fi % lattwo
+  \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+  \gdef^^a0{~}
+  \gdef^^a1{\exclamdown}
+  \gdef^^a2{\missingcharmsg{CENT SIGN}}
+  \gdef^^a3{{\pounds}}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\missingcharmsg{YEN SIGN}}
+  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\copyright}
+  \gdef^^aa{\ordf}
+  \gdef^^ab{\guillemetleft}
+  \gdef^^ac{$\lnot$}
+  \gdef^^ad{\-}
+  \gdef^^ae{\registeredsymbol}
+  \gdef^^af{\={}}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{$\pm$}
+  \gdef^^b2{$^2$}
+  \gdef^^b3{$^3$}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{$\mu$}
+  \gdef^^b6{\P}
+  %
+  \gdef^^b7{$^.$}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{$^1$}
+  \gdef^^ba{\ordm}
+  %
+  \gdef^^bb{\guilletright}
+  \gdef^^bc{$1\over4$}
+  \gdef^^bd{$1\over2$}
+  \gdef^^be{$3\over4$}
+  \gdef^^bf{\questiondown}
+  %
+  \gdef^^c0{\`A}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\~A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\ringaccent A}
+  \gdef^^c6{\AE}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\`E}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\^E}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\`I}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\"I}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\~N}
+  \gdef^^d2{\`O}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\~O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\O}
+  \gdef^^d9{\`U}
+  \gdef^^da{\'U}
+  \gdef^^db{\^U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\TH}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\`a}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\~a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\ringaccent a}
+  \gdef^^e6{\ae}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\`e}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\^e}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\`{\dotless i}}
+  \gdef^^ed{\'{\dotless i}}
+  \gdef^^ee{\^{\dotless i}}
+  \gdef^^ef{\"{\dotless i}}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\~n}
+  \gdef^^f2{\`o}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\~o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\o}
+  \gdef^^f9{\`u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\^u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\th}
+  \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+  % Encoding is almost identical to Latin1.
+  \latonechardefs
+  %
+  \gdef^^a4{\euro}
+  \gdef^^a6{\v S}
+  \gdef^^a8{\v s}
+  \gdef^^b4{\v Z}
+  \gdef^^b8{\v z}
+  \gdef^^bc{\OE}
+  \gdef^^bd{\oe}
+  \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+  \gdef^^a0{~}
+  \gdef^^a1{\ogonek{A}}
+  \gdef^^a2{\u{}}
+  \gdef^^a3{\L}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\v L}
+  \gdef^^a6{\'S}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\v S}
+  \gdef^^aa{\cedilla S}
+  \gdef^^ab{\v T}
+  \gdef^^ac{\'Z}
+  \gdef^^ad{\-}
+  \gdef^^ae{\v Z}
+  \gdef^^af{\dotaccent Z}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{\ogonek{a}}
+  \gdef^^b2{\ogonek{ }}
+  \gdef^^b3{\l}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{\v l}
+  \gdef^^b6{\'s}
+  \gdef^^b7{\v{}}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{\v s}
+  \gdef^^ba{\cedilla s}
+  \gdef^^bb{\v t}
+  \gdef^^bc{\'z}
+  \gdef^^bd{\H{}}
+  \gdef^^be{\v z}
+  \gdef^^bf{\dotaccent z}
+  %
+  \gdef^^c0{\'R}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\u A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\'L}
+  \gdef^^c6{\'C}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\v C}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\ogonek{E}}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\v E}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\v D}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\'N}
+  \gdef^^d2{\v N}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\H O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\v R}
+  \gdef^^d9{\ringaccent U}
+  \gdef^^da{\'U}
+  \gdef^^db{\H U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\cedilla T}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\'r}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\u a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\'l}
+  \gdef^^e6{\'c}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\v c}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\ogonek{e}}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\v e}
+  \gdef^^ed{\'\i}
+  \gdef^^ee{\^\i}
+  \gdef^^ef{\v d}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\'n}
+  \gdef^^f2{\v n}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\H o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\v r}
+  \gdef^^f9{\ringaccent u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\H u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\cedilla t}
+  \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions.  It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+  \ifx #1\relax
+    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+  \else
+    \expandafter #1%
+  \fi
+}
+
+\begingroup
+  \catcode`\~13
+  \catcode`\"12
+
+  \def\UTFviiiLoop{%
+    \global\catcode\countUTFx\active
+    \uccode`\~\countUTFx
+    \uppercase\expandafter{\UTFviiiTmp}%
+    \advance\countUTFx by 1
+    \ifnum\countUTFx < \countUTFy
+      \expandafter\UTFviiiLoop
+    \fi}
+
+  \countUTFx = "C2
+  \countUTFy = "E0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "E0
+  \countUTFy = "F0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "F0
+  \countUTFy = "F4
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+  \UTFviiiLoop
+\endgroup
+
+\begingroup
+  \catcode`\"=12
+  \catcode`\<=12
+  \catcode`\.=12
+  \catcode`\,=12
+  \catcode`\;=12
+  \catcode`\!=12
+  \catcode`\~=13
+
+  \gdef\DeclareUnicodeCharacter#1#2{%
+    \countUTFz = "#1\relax
+    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+    \begingroup
+      \parseXMLCharref
+      \def\UTFviiiTwoOctets##1##2{%
+        \csname u8:##1\string ##2\endcsname}%
+      \def\UTFviiiThreeOctets##1##2##3{%
+        \csname u8:##1\string ##2\string ##3\endcsname}%
+      \def\UTFviiiFourOctets##1##2##3##4{%
+        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+      \expandafter\expandafter\expandafter\expandafter
+       \expandafter\expandafter\expandafter
+       \gdef\UTFviiiTmp{#2}%
+    \endgroup}
+
+  \gdef\parseXMLCharref{%
+    \ifnum\countUTFz < "A0\relax
+      \errhelp = \EMsimple
+      \errmessage{Cannot define Unicode char value < 00A0}%
+    \else\ifnum\countUTFz < "800\relax
+      \parseUTFviiiA,%
+      \parseUTFviiiB C\UTFviiiTwoOctets.,%
+    \else\ifnum\countUTFz < "10000\relax
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+    \else
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiA!%
+      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+    \fi\fi\fi
+  }
+
+  \gdef\parseUTFviiiA#1{%
+    \countUTFx = \countUTFz
+    \divide\countUTFz by 64
+    \countUTFy = \countUTFz
+    \multiply\countUTFz by 64
+    \advance\countUTFx by -\countUTFz
+    \advance\countUTFx by 128
+    \uccode `#1\countUTFx
+    \countUTFz = \countUTFy}
+
+  \gdef\parseUTFviiiB#1#2#3#4{%
+    \advance\countUTFz by "#10\relax
+    \uccode `#3\countUTFz
+    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}
+  \DeclareUnicodeCharacter{00A3}{\pounds}
+  \DeclareUnicodeCharacter{00A8}{\"{ }}
+  \DeclareUnicodeCharacter{00A9}{\copyright}
+  \DeclareUnicodeCharacter{00AA}{\ordf}
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+  \DeclareUnicodeCharacter{00AD}{\-}
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+  \DeclareUnicodeCharacter{00AF}{\={ }}
+
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+  \DeclareUnicodeCharacter{00B4}{\'{ }}
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+  \DeclareUnicodeCharacter{00BA}{\ordm}
+  \DeclareUnicodeCharacter{00BB}{\guillemetright}
+  \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+  \DeclareUnicodeCharacter{00C0}{\`A}
+  \DeclareUnicodeCharacter{00C1}{\'A}
+  \DeclareUnicodeCharacter{00C2}{\^A}
+  \DeclareUnicodeCharacter{00C3}{\~A}
+  \DeclareUnicodeCharacter{00C4}{\"A}
+  \DeclareUnicodeCharacter{00C5}{\AA}
+  \DeclareUnicodeCharacter{00C6}{\AE}
+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+  \DeclareUnicodeCharacter{00C8}{\`E}
+  \DeclareUnicodeCharacter{00C9}{\'E}
+  \DeclareUnicodeCharacter{00CA}{\^E}
+  \DeclareUnicodeCharacter{00CB}{\"E}
+  \DeclareUnicodeCharacter{00CC}{\`I}
+  \DeclareUnicodeCharacter{00CD}{\'I}
+  \DeclareUnicodeCharacter{00CE}{\^I}
+  \DeclareUnicodeCharacter{00CF}{\"I}
+
+  \DeclareUnicodeCharacter{00D0}{\DH}
+  \DeclareUnicodeCharacter{00D1}{\~N}
+  \DeclareUnicodeCharacter{00D2}{\`O}
+  \DeclareUnicodeCharacter{00D3}{\'O}
+  \DeclareUnicodeCharacter{00D4}{\^O}
+  \DeclareUnicodeCharacter{00D5}{\~O}
+  \DeclareUnicodeCharacter{00D6}{\"O}
+  \DeclareUnicodeCharacter{00D8}{\O}
+  \DeclareUnicodeCharacter{00D9}{\`U}
+  \DeclareUnicodeCharacter{00DA}{\'U}
+  \DeclareUnicodeCharacter{00DB}{\^U}
+  \DeclareUnicodeCharacter{00DC}{\"U}
+  \DeclareUnicodeCharacter{00DD}{\'Y}
+  \DeclareUnicodeCharacter{00DE}{\TH}
+  \DeclareUnicodeCharacter{00DF}{\ss}
+
+  \DeclareUnicodeCharacter{00E0}{\`a}
+  \DeclareUnicodeCharacter{00E1}{\'a}
+  \DeclareUnicodeCharacter{00E2}{\^a}
+  \DeclareUnicodeCharacter{00E3}{\~a}
+  \DeclareUnicodeCharacter{00E4}{\"a}
+  \DeclareUnicodeCharacter{00E5}{\aa}
+  \DeclareUnicodeCharacter{00E6}{\ae}
+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+  \DeclareUnicodeCharacter{00E8}{\`e}
+  \DeclareUnicodeCharacter{00E9}{\'e}
+  \DeclareUnicodeCharacter{00EA}{\^e}
+  \DeclareUnicodeCharacter{00EB}{\"e}
+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{00F0}{\dh}
+  \DeclareUnicodeCharacter{00F1}{\~n}
+  \DeclareUnicodeCharacter{00F2}{\`o}
+  \DeclareUnicodeCharacter{00F3}{\'o}
+  \DeclareUnicodeCharacter{00F4}{\^o}
+  \DeclareUnicodeCharacter{00F5}{\~o}
+  \DeclareUnicodeCharacter{00F6}{\"o}
+  \DeclareUnicodeCharacter{00F8}{\o}
+  \DeclareUnicodeCharacter{00F9}{\`u}
+  \DeclareUnicodeCharacter{00FA}{\'u}
+  \DeclareUnicodeCharacter{00FB}{\^u}
+  \DeclareUnicodeCharacter{00FC}{\"u}
+  \DeclareUnicodeCharacter{00FD}{\'y}
+  \DeclareUnicodeCharacter{00FE}{\th}
+  \DeclareUnicodeCharacter{00FF}{\"y}
+
+  \DeclareUnicodeCharacter{0100}{\=A}
+  \DeclareUnicodeCharacter{0101}{\=a}
+  \DeclareUnicodeCharacter{0102}{\u{A}}
+  \DeclareUnicodeCharacter{0103}{\u{a}}
+  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+  \DeclareUnicodeCharacter{0106}{\'C}
+  \DeclareUnicodeCharacter{0107}{\'c}
+  \DeclareUnicodeCharacter{0108}{\^C}
+  \DeclareUnicodeCharacter{0109}{\^c}
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+  \DeclareUnicodeCharacter{010C}{\v{C}}
+  \DeclareUnicodeCharacter{010D}{\v{c}}
+  \DeclareUnicodeCharacter{010E}{\v{D}}
+
+  \DeclareUnicodeCharacter{0112}{\=E}
+  \DeclareUnicodeCharacter{0113}{\=e}
+  \DeclareUnicodeCharacter{0114}{\u{E}}
+  \DeclareUnicodeCharacter{0115}{\u{e}}
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+  \DeclareUnicodeCharacter{011A}{\v{E}}
+  \DeclareUnicodeCharacter{011B}{\v{e}}
+  \DeclareUnicodeCharacter{011C}{\^G}
+  \DeclareUnicodeCharacter{011D}{\^g}
+  \DeclareUnicodeCharacter{011E}{\u{G}}
+  \DeclareUnicodeCharacter{011F}{\u{g}}
+
+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+  \DeclareUnicodeCharacter{0124}{\^H}
+  \DeclareUnicodeCharacter{0125}{\^h}
+  \DeclareUnicodeCharacter{0128}{\~I}
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+  \DeclareUnicodeCharacter{012A}{\=I}
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+  \DeclareUnicodeCharacter{012C}{\u{I}}
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}
+  \DeclareUnicodeCharacter{0132}{IJ}
+  \DeclareUnicodeCharacter{0133}{ij}
+  \DeclareUnicodeCharacter{0134}{\^J}
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+  \DeclareUnicodeCharacter{0139}{\'L}
+  \DeclareUnicodeCharacter{013A}{\'l}
+
+  \DeclareUnicodeCharacter{0141}{\L}
+  \DeclareUnicodeCharacter{0142}{\l}
+  \DeclareUnicodeCharacter{0143}{\'N}
+  \DeclareUnicodeCharacter{0144}{\'n}
+  \DeclareUnicodeCharacter{0147}{\v{N}}
+  \DeclareUnicodeCharacter{0148}{\v{n}}
+  \DeclareUnicodeCharacter{014C}{\=O}
+  \DeclareUnicodeCharacter{014D}{\=o}
+  \DeclareUnicodeCharacter{014E}{\u{O}}
+  \DeclareUnicodeCharacter{014F}{\u{o}}
+
+  \DeclareUnicodeCharacter{0150}{\H{O}}
+  \DeclareUnicodeCharacter{0151}{\H{o}}
+  \DeclareUnicodeCharacter{0152}{\OE}
+  \DeclareUnicodeCharacter{0153}{\oe}
+  \DeclareUnicodeCharacter{0154}{\'R}
+  \DeclareUnicodeCharacter{0155}{\'r}
+  \DeclareUnicodeCharacter{0158}{\v{R}}
+  \DeclareUnicodeCharacter{0159}{\v{r}}
+  \DeclareUnicodeCharacter{015A}{\'S}
+  \DeclareUnicodeCharacter{015B}{\'s}
+  \DeclareUnicodeCharacter{015C}{\^S}
+  \DeclareUnicodeCharacter{015D}{\^s}
+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+  \DeclareUnicodeCharacter{0160}{\v{S}}
+  \DeclareUnicodeCharacter{0161}{\v{s}}
+  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+  \DeclareUnicodeCharacter{0164}{\v{T}}
+
+  \DeclareUnicodeCharacter{0168}{\~U}
+  \DeclareUnicodeCharacter{0169}{\~u}
+  \DeclareUnicodeCharacter{016A}{\=U}
+  \DeclareUnicodeCharacter{016B}{\=u}
+  \DeclareUnicodeCharacter{016C}{\u{U}}
+  \DeclareUnicodeCharacter{016D}{\u{u}}
+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+  \DeclareUnicodeCharacter{0170}{\H{U}}
+  \DeclareUnicodeCharacter{0171}{\H{u}}
+  \DeclareUnicodeCharacter{0174}{\^W}
+  \DeclareUnicodeCharacter{0175}{\^w}
+  \DeclareUnicodeCharacter{0176}{\^Y}
+  \DeclareUnicodeCharacter{0177}{\^y}
+  \DeclareUnicodeCharacter{0178}{\"Y}
+  \DeclareUnicodeCharacter{0179}{\'Z}
+  \DeclareUnicodeCharacter{017A}{\'z}
+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+  \DeclareUnicodeCharacter{017D}{\v{Z}}
+  \DeclareUnicodeCharacter{017E}{\v{z}}
+
+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+  \DeclareUnicodeCharacter{01C5}{D\v{z}}
+  \DeclareUnicodeCharacter{01C6}{d\v{z}}
+  \DeclareUnicodeCharacter{01C7}{LJ}
+  \DeclareUnicodeCharacter{01C8}{Lj}
+  \DeclareUnicodeCharacter{01C9}{lj}
+  \DeclareUnicodeCharacter{01CA}{NJ}
+  \DeclareUnicodeCharacter{01CB}{Nj}
+  \DeclareUnicodeCharacter{01CC}{nj}
+  \DeclareUnicodeCharacter{01CD}{\v{A}}
+  \DeclareUnicodeCharacter{01CE}{\v{a}}
+  \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+  \DeclareUnicodeCharacter{01D1}{\v{O}}
+  \DeclareUnicodeCharacter{01D2}{\v{o}}
+  \DeclareUnicodeCharacter{01D3}{\v{U}}
+  \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+  \DeclareUnicodeCharacter{01E2}{\={\AE}}
+  \DeclareUnicodeCharacter{01E3}{\={\ae}}
+  \DeclareUnicodeCharacter{01E6}{\v{G}}
+  \DeclareUnicodeCharacter{01E7}{\v{g}}
+  \DeclareUnicodeCharacter{01E8}{\v{K}}
+  \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+  \DeclareUnicodeCharacter{01F1}{DZ}
+  \DeclareUnicodeCharacter{01F2}{Dz}
+  \DeclareUnicodeCharacter{01F3}{dz}
+  \DeclareUnicodeCharacter{01F4}{\'G}
+  \DeclareUnicodeCharacter{01F5}{\'g}
+  \DeclareUnicodeCharacter{01F8}{\`N}
+  \DeclareUnicodeCharacter{01F9}{\`n}
+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+  \DeclareUnicodeCharacter{01FE}{\'{\O}}
+  \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+  \DeclareUnicodeCharacter{021E}{\v{H}}
+  \DeclareUnicodeCharacter{021F}{\v{h}}
+
+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+  \DeclareUnicodeCharacter{0232}{\=Y}
+  \DeclareUnicodeCharacter{0233}{\=y}
+  \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+  \DeclareUnicodeCharacter{1E20}{\=G}
+  \DeclareUnicodeCharacter{1E21}{\=g}
+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+  \DeclareUnicodeCharacter{1E26}{\"H}
+  \DeclareUnicodeCharacter{1E27}{\"h}
+
+  \DeclareUnicodeCharacter{1E30}{\'K}
+  \DeclareUnicodeCharacter{1E31}{\'k}
+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+  \DeclareUnicodeCharacter{1E3E}{\'M}
+  \DeclareUnicodeCharacter{1E3F}{\'m}
+
+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+  \DeclareUnicodeCharacter{1E54}{\'P}
+  \DeclareUnicodeCharacter{1E55}{\'p}
+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+  \DeclareUnicodeCharacter{1E7C}{\~V}
+  \DeclareUnicodeCharacter{1E7D}{\~v}
+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+  \DeclareUnicodeCharacter{1E80}{\`W}
+  \DeclareUnicodeCharacter{1E81}{\`w}
+  \DeclareUnicodeCharacter{1E82}{\'W}
+  \DeclareUnicodeCharacter{1E83}{\'w}
+  \DeclareUnicodeCharacter{1E84}{\"W}
+  \DeclareUnicodeCharacter{1E85}{\"w}
+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+  \DeclareUnicodeCharacter{1E8C}{\"X}
+  \DeclareUnicodeCharacter{1E8D}{\"x}
+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+  \DeclareUnicodeCharacter{1E90}{\^Z}
+  \DeclareUnicodeCharacter{1E91}{\^z}
+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+  \DeclareUnicodeCharacter{1E97}{\"t}
+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+  \DeclareUnicodeCharacter{1EBC}{\~E}
+  \DeclareUnicodeCharacter{1EBD}{\~e}
+
+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+  \DeclareUnicodeCharacter{1EF2}{\`Y}
+  \DeclareUnicodeCharacter{1EF3}{\`y}
+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+  \DeclareUnicodeCharacter{1EF8}{\~Y}
+  \DeclareUnicodeCharacter{1EF9}{\~y}
+
+  \DeclareUnicodeCharacter{2013}{--}
+  \DeclareUnicodeCharacter{2014}{---}
+  \DeclareUnicodeCharacter{2018}{\quoteleft}
+  \DeclareUnicodeCharacter{2019}{\quoteright}
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+  \DeclareUnicodeCharacter{201C}{\quotedblleft}
+  \DeclareUnicodeCharacter{201D}{\quotedblright}
+  \DeclareUnicodeCharacter{201E}{\quotedblbase}
+  \DeclareUnicodeCharacter{2022}{\bullet}
+  \DeclareUnicodeCharacter{2026}{\dots}
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+  \DeclareUnicodeCharacter{203A}{\guilsinglright}
+  \DeclareUnicodeCharacter{20AC}{\euro}
+
+  \DeclareUnicodeCharacter{2192}{\expansion}
+  \DeclareUnicodeCharacter{21D2}{\result}
+
+  \DeclareUnicodeCharacter{2212}{\minus}
+  \DeclareUnicodeCharacter{2217}{\point}
+  \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+   \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything.  We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize.  We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = .15\hsize
+  \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading.  The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
+  %
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 2\topandbottommargin
+  \pageheight = \vsize
+  %
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
+  %
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \ifpdf
+    \pdfpageheight #7\relax
+    \pdfpagewidth #8\relax
+    % if we don't reset these, they will remain at "1 true in" of
+    % whatever layout pdftex was dumped with.
+    \pdfhorigin = 1 true in
+    \pdfvorigin = 1 true in
+  \fi
+  %
+  \setleading{\textleading}
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{607.2pt}{6in}% that's 46 lines
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{36pt}%
+                    {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.5in}{5in}%
+                    {-.2in}{0in}%
+                    {\bindingoffset}{16pt}%
+                    {9.25in}{7in}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+  \parskip = 1.5pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.4in}{4.8in}%
+                    {-.2in}{-.4in}%
+                    {0pt}{14pt}%
+                    {9in}{6in}%
+  %
+  \lispnarrowing = 0.25in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % Double-side printing via postscript on Laserjet 4050
+  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+  % To change the settings for a different printer or situation, adjust
+  % \normaloffset until the front-side and back-side texts align.  Then
+  % do the same for \bindingoffset.  You can set these for testing in
+  % your texinfo source file like this:
+  % @tex
+  % \global\normaloffset = -6mm
+  % \global\bindingoffset = 10mm
+  % @end tex
+  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{44pt}%
+                    {297mm}{210mm}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+  \parskip = 2pt plus 1pt minus 0.1pt
+  \textleading = 12.5pt
+  %
+  \internalpagesizes{160mm}{120mm}%
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{8pt}%
+                    {210mm}{148mm}%
+  %
+  \lispnarrowing = 0.2in
+  \tolerance = 800
+  \hfuzz = 1.2pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 2mm
+  \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}%
+                    {\voffset}{4.6mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  %
+  % Must explicitly reset to 0 because we call \afourpaper.
+  \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{241mm}{165mm}%
+                    {\voffset}{-2.95mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{\textleading}%
+  %
+  \dimen0 = #1\relax
+  \advance\dimen0 by \voffset
+  %
+  \dimen2 = \hsize
+  \advance\dimen2 by \normaloffset
+  %
+  \internalpagesizes{#1}{\hsize}%
+                    {\voffset}{\normaloffset}%
+                    {\bindingoffset}{44pt}%
+                    {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise.  Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font.  Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts.  But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+  \normalturnoffactive
+  \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active
+@def@normalbackslash{{@tt@backslashcurfont}}
+% On startup, @fixbackslash assigns:
+%  @let \ = @normalbackslash
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
+  @let\=@normalbackslash
+  @let"=@normaldoublequote
+  @let~=@normaltilde
+  @let^=@normalcaret
+  @let_=@normalunderscore
+  @let|=@normalverticalbar
+  @let<=@normalless
+  @let>=@normalgreater
+  @let+=@normalplus
+  @let$=@normaldollar %$ font-lock fix
+  @markupsetuplqdefault
+  @markupsetuprqdefault
+  @unsepspaces
+}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/manual/word-list-compress.1 b/manual/word-list-compress.1
new file mode 100644 (file)
index 0000000..5126cd2
--- /dev/null
@@ -0,0 +1,97 @@
+.TH WORD\-LIST\-COMPRESS 1 "2005-09-05" "GNU" "Aspell Abbreviated User's Manual"
+.SH NAME
+word\-list\-compress \- word list compressor/decompressor for GNU Aspell
+.SH SYNOPSIS
+.B word-list-compress
+\fBc\fR[\fBompress\fR] | \fBd\fR[\fBecompress\fR]
+.SH DESCRIPTION
+.B word-list-compress
+compresses or decompresses sorted word lists for use with the GNU Aspell
+spell checker.
+.SH COMMANDS
+.TP
+\fB\-c\fR, \fBc\fR, \fBcompress\fR
+compress the plain text word list read from standard input.
+.TP
+\fB\-d\fR, \fBd\fR, \fBdecompress\fR
+decompress the compressed word list read from standard input.
+.SH EXAMPLES
+Here are a few examples of how you can use
+.I word\-list\-compress
+.TP
+word\-list\-compress \fBd\fR <wordlist.cwl >wordlist.txt
+Decompress file wordlist.cwl to text file wordlist.txt
+.TP
+word\-list\-compress \fBc\fR <wordlist.wl >wordlist.cwl 2>errors.txt
+Compress wordlist.wl to wordlist.cwl and send any error messages to a
+text file named errors.txt
+.TP
+LC_COLLATE\=C sort \-u <wordlist.txt \fB|\fR word\-list\-compress c >wordlist.cwl
+Sort a word list, then pipe it to
+.I word\-list\-compress
+to create a compressed binary wordlist.cwl file.
+.TP
+word\-list\-compress d <words.cwl \fB|\fR aspell create master ./words.rws
+Decompress a wordlist, then pipe it to
+.I aspell(1)
+to create a spelling list.  Please check the
+.I aspell(1)
+info manual for proper usage and options.
+.SH TIPS
+.I Word\-list\-compress
+is best used with sorted word list type files.  It is not a general
+purpose compression program since the resulting files may actually
+increase in size.
+.PP
+.I Word\-list\-compress
+accepts up to 255 text characters in the range of {0x21...0xFF}. If your
+word list requires a larger character set for certain languages or
+longer length for multi\-word, scientific, medical, technical or other
+use, then it is recommended that you compress your word list using
+.I prezip\-bin(1)
+.
+.SH DIAGNOSTICS
+.I Word\-list\-compress
+normally exits with a return code of 0. If it encounters an error,
+a message is sent to standard error output (stderr), and
+.I word\-list\-compress
+exits with a non-zero return value.  Error messages are listed below:
+.TP
+\fB(display help/usage message)\fR
+Unknown command given on the command line so
+.I word\-list\-compress
+displays a usage message to standard error output.
+.TP
+\fBCorrupt Input\fR
+This is only for the decompression command \fBd\fR.  The input file is
+of an unknown format or the input file/stream is corrupted.  You may
+have some valid output, but
+.I word\-list\-compress
+could not complete the process.  If the input file is a compressed
+wordlist but you have no output file, then it may be a newer
+.I prezip\-bin(1)
+version of compressed file, if so, try decompressing the file with
+.I prezip\-bin(1)
+instead.
+.TP
+\fBOutput Data Error\fR
+The output is full, write protected, or has an error and can no longer
+be written to.
+.SH SEE ALSO
+.PP
+.BR aspell (1),
+.BR aspell\-import (1),
+.BR prezip\-bin (1),
+.BR run\-with\-aspell (1)
+.PP
+Aspell is fully documented in its Texinfo manual.  See the
+.RB "`\|" aspell "\|'"
+entry in
+.B info
+for more complete documentation.
+.SH REPORTING BUGS
+For help, see the Aspell homepage at <http://aspell.net> and send bug
+reports/comments to the Aspell user list at the above address.
+.SH AUTHOR
+This manual page was written by Aaron Lehmann <aaronl@vitelus.com>,
+Brian Nelson <pyro@debian.org> and Jose Da Silva <digital@joescat.com>.
diff --git a/misc/po-filter.c b/misc/po-filter.c
new file mode 100644 (file)
index 0000000..6965180
--- /dev/null
@@ -0,0 +1,145 @@
+/* This file is part of The New Aspell
+   Copyright (C) 2000,2001 Sergey Poznyakoff
+  
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+  
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+  
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* This file implements the loadable filter for *.po files.
+   It is an example of loadable dynamic filters for the Aspell. It
+   should be compiled into a shared library. The only symbol it is
+   expected to export is process(). */
+
+#include <stdio.h>
+
+enum state
+{
+  st_init,
+  st_m,
+  st_s,
+  st_g,
+  st_s1,
+  st_t,
+  st_r,
+  st_bracket,
+  st_hide,
+  st_echo,
+  st_newline
+};
+
+int msgstr_count = 0;
+enum state state = st_init;
+
+int
+process (char *start, char *stop)
+{
+  int c;
+
+  for ( ; start < stop; start++)
+    {
+      c = *start;
+      switch (state)
+       {
+       case st_init:
+       init:
+         switch (c)
+           {
+           default:
+             break;
+
+           case '#':
+             state = st_hide;
+             break;
+
+           case 'm':
+             state = st_m;
+             break;
+           }
+
+         c = ' ';
+         break;
+
+       case st_m:
+         state = (c == 's') ? st_s : st_hide;
+         c = ' ';
+         break;
+
+       case st_s:
+         state = (c == 'g') ? st_g : st_hide;
+         c = ' ';
+         break;
+
+       case st_g:
+         state = (c == 's') ? st_s1 : st_hide;
+         c = ' ';
+         break;
+
+       case st_s1:
+         state = (c == 't') ? st_t : st_hide;
+         c = ' ';
+         break;
+
+       case st_t:
+         state = (c == 'r') ? st_r : st_hide;
+         c = ' ';
+         break;
+
+       case st_r:
+         if (c == '[')
+           state = st_bracket;
+         else if (msgstr_count > 0)
+           state = st_echo;
+         else
+           state = st_hide;
+         msgstr_count++;
+         c = ' ';
+         break;
+
+       case st_bracket:
+         if (c == ']')
+           {
+             state = st_echo;
+             c = ' ';
+             break;
+           }
+        /*FALLTHROUGH*/
+       case st_hide:
+         if (c == '\n')
+           state = st_init;
+         else
+           c = ' ';
+         break;
+
+       case st_newline:
+         switch (c)
+           {
+           case '"':
+             state = st_echo;
+             break;
+
+           default:
+             goto init;
+           }
+         break;
+
+       case st_echo:
+         if (c == '\n')
+           state = st_newline;
+         break;
+       }
+
+      *start = c;
+    }
+
+  return 0;
+}
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..ac3d51c
--- /dev/null
+++ b/missing
@@ -0,0 +1,378 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar*)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar*)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/modules/Makefile.in b/modules/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/modules/filter/Makefile.in b/modules/filter/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/modules/filter/context-filter.info b/modules/filter/context-filter.info
new file mode 100644 (file)
index 0000000..d506341
--- /dev/null
@@ -0,0 +1,23 @@
+# context filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `aspell help context'
+DESCRIPTION experimental filter for hiding delimited contexts
+
+STATIC filter
+
+OPTION delimiters
+TYPE list
+DESCRIPTION context delimiters (separated by spaces)
+DEFAULT " "
+DEFAULT /* */
+DEFAULT // \0
+ENDOPTION
+
+OPTION visible-first
+TYPE bool
+DESCRIPTION swaps visible and invisible text
+DEFAULT false
+ENDOPTION
diff --git a/modules/filter/context.cpp b/modules/filter/context.cpp
new file mode 100644 (file)
index 0000000..8e152c1
--- /dev/null
@@ -0,0 +1,267 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Christoph Hintermüller under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+//
+// Example for a filter implementation usable via extended filter library
+// interface.
+// This was added to Aspell by Christoph Hintermüller
+
+#include "settings.h"
+
+#include "can_have_error.hpp"
+#include "config.hpp"
+#include "filter_char.hpp"
+#include "indiv_filter.hpp"
+#include "iostream.hpp"
+#include "posib_err.hpp"
+#include "string.hpp"
+#include "string_enumeration.hpp"
+#include "string_list.hpp"
+#include "vector.hpp"
+
+using namespace acommon;
+
+namespace {
+
+  enum filterstate {hidden=0, visible=1};
+  
+  class ContextFilter : public IndividualFilter {
+    filterstate state;
+    Vector<String> opening;
+    Vector<String> closing;
+    int correspond;
+    String filterversion;
+  
+    PosibErr<bool> hidecode(FilterChar * begin,FilterChar * end);
+  public:
+    ContextFilter(void);
+    virtual void reset(void);
+    void process(FilterChar *& start,FilterChar *& stop);
+    virtual PosibErr<bool> setup(Config * config);
+    virtual ~ContextFilter();
+  };
+
+  ContextFilter::ContextFilter(void)
+  : opening(),
+    closing()
+  {
+    state=hidden;
+    correspond=-1;
+    opening.resize(3);
+    opening[0]="\"";
+    opening[1]="/*";
+    opening[2]="//";
+    closing.resize(3);
+    closing[0]="\"";
+    closing[1]="*/";
+    closing[2]="";
+    filterversion=VERSION;
+  }
+    
+  PosibErr<bool> ContextFilter::setup(Config * config){
+    name_ = "context-filter";
+    StringList delimiters;
+    StringEnumeration * delimiterpairs;
+    const char * delimiterpair=NULL;
+    char * repair=NULL;
+    char * begin=NULL;
+    char * end=NULL;
+    String delimiter;
+    unsigned int countdelim=0;
+  
+    if (config == NULL) {
+      fprintf(stderr,"Nothing to be configured\n");
+      return true;
+    }
+
+    if (config->retrieve_bool("f-context-visible-first")) {
+      state=visible;
+    }
+
+    config->retrieve_list("f-context-delimiters", &delimiters);
+    delimiterpairs=delimiters.elements();
+    opening.resize(0);
+    closing.resize(0);
+    while ((delimiterpair=delimiterpairs->next())) {
+      if ((begin=repair=strdup(delimiterpair)) == NULL) {
+        //fprintf(stderr,"ifailed to initialise %s filter\n",filter_name());
+        return false;
+      }
+      end=repair+strlen(repair);
+      while ((*begin != ' ') && (*begin != '\t') && (begin != end)) {
+        begin++;
+      }
+      if (begin == repair) {
+        fprintf(stderr,"no delimiter pair: `%s'\n",repair);
+        free(repair);
+//FIXME replace someday by make_err
+        //fprintf(stderr,"ifailed to initialise %s filter\n",filter_name());
+        return false;
+      }
+      if (((*begin == ' ') || (*begin == '\t')) && (begin != end)) {
+        *begin='\0';
+        opening.resize(opening.size()+1);
+        opening[opening.size()-1]=repair;
+        begin++;
+      }
+      while (((*begin == ' ') || (*begin == '\t')) && (begin != end)) {
+        begin++;
+      }
+      if ((*begin != ' ') && (*begin != '\t') && (begin != end)) {
+        closing.resize(closing.size()+1);
+        if (strcmp(begin,"\\0") != 0) {
+          closing[closing.size()-1]=begin;
+        }
+        else {
+          closing[closing.size()-1]="";
+        }
+      }
+      else {
+        closing.resize(closing.size()+1);
+        closing[closing.size()-1]="";
+      }
+      free(repair);
+    }
+    if (state == visible) {
+      for (countdelim=0;(countdelim < opening.size()) &&
+                        (countdelim < closing.size());countdelim++) {
+        delimiter=opening[countdelim];
+        opening[countdelim]=closing[countdelim];
+        closing[countdelim]=delimiter;
+      }
+    }
+    //fprintf(stderr,"%s filter initialised\n",filter_name());
+    return true;
+  } 
+    
+  
+  void ContextFilter::process(FilterChar *& start,FilterChar *& stop) {
+    FilterChar * current=start-1;
+    FilterChar * beginblind=start;
+    FilterChar * endblind=stop;
+    FilterChar * localstop=stop;
+    int countmasking=0;
+    int countdelimit=0;
+    int matchdelim=0;
+
+    if ((localstop > start+1) && (*(localstop-1) == '\0')) {
+      localstop--;
+      endblind=localstop;
+    }
+    if (state == visible) {
+      beginblind=endblind;
+    }
+    while (( ++current < localstop) && (*current != '\0')) {
+      if (*current == '\\') {
+        countmasking++;
+        continue;
+      }
+      if (state == visible) {
+        if ((countmasking % 2 == 0) && (correspond < 0)) {
+          for (countdelimit=0;
+               countdelimit < (signed)closing.size();countdelimit++) {
+            for (matchdelim=0; 
+                 (current+closing[countdelimit].size() < localstop) &&
+                 (matchdelim < (signed)closing[countdelimit].size());
+                 matchdelim++){
+//FIXME Warning about comparison of signed and unsigned in following line
+              if (current[matchdelim] != closing[countdelimit][matchdelim]) {
+                break;
+              }
+            }
+            if ((matchdelim == (signed) closing[countdelimit].size()) &&
+                closing[countdelimit].size()) {
+              correspond=countdelimit;
+              break;
+            }
+          }
+        }
+        if ((countmasking % 2 == 0) && (correspond >= 0) &&
+           (correspond < (signed)closing.size()) &&
+           (closing[correspond].size() > 0) &&
+           (current+closing[correspond].size() < localstop)) {
+          for (matchdelim=0;matchdelim < (signed)closing[correspond].size();
+               matchdelim++) {
+//FIXME Warning about comparison of signed and unsigned in following line
+            if (current[matchdelim] != closing[correspond][matchdelim]) {
+              break;
+            }
+          }
+          if ((matchdelim == (signed) closing[correspond].size()) &&
+              closing[correspond].size()) {
+            beginblind=current;
+            endblind=localstop;
+            state=hidden;
+            correspond=-1;
+          }
+        }
+        countmasking=0;
+        continue;
+      }
+      if (countmasking % 2) {
+        countmasking=0;
+        continue;
+      }
+      countmasking=0;
+      for (countdelimit=0;countdelimit < (signed)opening.size();countdelimit++) {
+        for (matchdelim=0;(current+opening[countdelimit].size() < localstop) &&
+                          (matchdelim < (signed)opening[countdelimit].size());
+             matchdelim++) {
+//FIXME Warning about comparison of signed and unsigned in following line
+          if (current[matchdelim] != opening[countdelimit][matchdelim]) {
+            break;
+          }
+        }
+        if ((matchdelim == (signed) opening[countdelimit].size()) &&
+            opening[countdelimit].size()) {
+          endblind=current+opening[countdelimit].size();
+          state=visible;
+          hidecode(beginblind,endblind);
+          current=endblind-1;
+          beginblind=endblind=localstop;
+          correspond=countdelimit;
+          break;
+        }
+      }
+    }
+    if ((state == visible) &&
+        (correspond >= 0) && (correspond < (signed)closing.size()) &&
+        (closing[correspond] == "") && (countmasking % 2 == 0)) {
+      state=hidden;
+      correspond=-1;
+    } 
+    
+    if (beginblind < endblind) {
+      hidecode(beginblind,endblind);
+    }
+  }
+  
+  PosibErr<bool> ContextFilter::hidecode(FilterChar * begin,FilterChar * end) {
+  //FIXME here we go, a more efficient context hiding blinding might be used :)
+    FilterChar * current=begin;
+    while (current < end) {
+      if ((*current != '\t') && (*current != '\n') && (*current != '\r')) {
+        *current=' ';
+      }
+      current++;
+    }
+    return true;
+  }
+        
+  void ContextFilter::reset(void) {
+    opening.resize(0);
+    closing.resize(0);
+    state=hidden;
+  }
+
+  ContextFilter::~ContextFilter() {
+    reset();
+  }
+}
+
+C_EXPORT 
+IndividualFilter * new_aspell_context_filter() {
+  return new ContextFilter;                                
+}
diff --git a/modules/filter/email-filter.info b/modules/filter/email-filter.info
new file mode 100644 (file)
index 0000000..64b29c1
--- /dev/null
@@ -0,0 +1,23 @@
+# email filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `Aspell help email'
+DESCRIPTION filter for skipping quoted text in email messages
+
+STATIC filter
+
+OPTION quote
+TYPE list
+DESCRIPTION email quote characters
+DEFAULT >
+DEFAULT |
+FLAGS utf-8
+ENDOPTION
+
+OPTION margin
+TYPE int
+DESCRIPTION num chars that can appear before the quote char
+DEFAULT 10
+ENDOPTION
diff --git a/modules/filter/email.cpp b/modules/filter/email.cpp
new file mode 100644 (file)
index 0000000..9731818
--- /dev/null
@@ -0,0 +1,115 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "settings.h"
+
+#include "indiv_filter.hpp"
+#include "convert.hpp"
+#include "config.hpp"
+#include "indiv_filter.hpp"
+#include "mutable_container.hpp"
+
+namespace {
+
+  using namespace acommon;
+
+  class EmailFilter : public IndividualFilter 
+  {
+    bool prev_newline;
+    bool in_quote;
+    int margin;
+    int n;
+
+    class QuoteChars : public MutableContainer {
+    public:
+      typedef FilterChar::Chr Value;
+      Vector<Value> data;
+      Conv conv;
+      bool have(Value c) {
+        Value * i = data.pbegin();
+        Value * end = data.pend();
+        for (; i != end && *i != c; ++i);
+        return i != end;
+      }
+      PosibErr<bool> add(ParmStr s) {
+        Value c = *(Value *)conv(s);
+        if (!have(c)) data.push_back(c);
+        return true;
+      }
+      PosibErr<bool> remove(ParmStr s) {
+        Value c = *(Value *)conv(s);
+        Vector<Value>::iterator i = data.begin();
+        Vector<Value>::iterator end = data.end();
+        for (; i != end && *i != c; ++i);
+        if (i != end) data.erase(i);
+        return true;
+      }
+      PosibErr<void> clear() {
+        data.clear();
+       return no_err;
+      }
+    };
+    QuoteChars is_quote_char;
+    
+  public:
+    PosibErr<bool> setup(Config *);
+    void reset();
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  PosibErr<bool> EmailFilter::setup(Config * opts) 
+  {
+    name_ = "email-filter";
+    order_num_ = 0.85;
+    is_quote_char.conv.setup(*opts, "utf-8", "ucs-4", NormNone);
+    opts->retrieve_list("f-email-quote", &is_quote_char);
+    margin = opts->retrieve_int("f-email-margin");
+    reset();
+    return true;
+  }
+  
+  void EmailFilter::reset() 
+  {
+    prev_newline = true;
+    in_quote = false;
+    n = 0;
+  }
+
+  void EmailFilter::process(FilterChar * & str, FilterChar * & end)
+  {
+    FilterChar * line_begin = str;
+    FilterChar * cur = str;
+    while (cur < end) {
+      if (prev_newline && is_quote_char.have(*cur))
+       in_quote = true;
+      if (*cur == '\n') {
+       if (in_quote) {
+         for (FilterChar * i = line_begin; i != cur; ++i)
+           *i = ' ';
+       }
+       line_begin = cur;
+       in_quote = false;
+       prev_newline = true;
+       n = 0;
+      } else if (n < margin) {
+       ++n;
+      } else {
+       prev_newline = false;
+      }
+      ++cur;
+    }
+    if (in_quote)
+      for (FilterChar * i = line_begin; i != cur; ++i)
+       *i = ' ';
+  }
+}
+
+C_EXPORT 
+IndividualFilter * new_aspell_email_filter() {
+  return new EmailFilter;                                
+}
+
+
diff --git a/modules/filter/html-filter.info b/modules/filter/html-filter.info
new file mode 100644 (file)
index 0000000..2bb9f0a
--- /dev/null
@@ -0,0 +1,26 @@
+# SGML filter option file
+
+LIB-FILE sgml-filter
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `Aspell help SGML'
+DESCRIPTION filter for dealing with HTML documents
+
+STATIC filter
+
+OPTION check
+TYPE list
+DESCRIPTION   HTML attributes to always check
+DEFAULT alt
+ENDOPTION
+
+OPTION skip
+TYPE list
+DESCRIPTION  HTML tags to always skip the contents of
+DEFAULT script
+DEFAULT style
+ENDOPTION
+
+STATIC decoder
diff --git a/modules/filter/modes/ccpp.amf b/modules/filter/modes/ccpp.amf
new file mode 100644 (file)
index 0000000..4de9070
--- /dev/null
@@ -0,0 +1,18 @@
+MODE ccpp
+
+ASPELL >=0.60.1
+
+MAGIC /<noregex>/c/cc/cpp
+MAGIC /<noregex>/h/hpp
+
+DESCRIPTION mode for checking C++ comments and string literals
+
+FILTER url
+FILTER context
+OPTION clear-context-delimiters 
+OPTION add-context-delimiters /* */
+OPTION add-context-delimiters // \0
+OPTION add-context-delimiters " "
+OPTION disable-context-visible-first
+
+
diff --git a/modules/filter/modes/comment.amf b/modules/filter/modes/comment.amf
new file mode 100644 (file)
index 0000000..078193b
--- /dev/null
@@ -0,0 +1,12 @@
+MODE comment 
+
+ASPELL >=0.60
+
+DESCRIPTION mode to check any lines starting with a \#
+
+FILTER url
+FILTER context
+OPTION clear-context-delimiters
+OPTION add-context-delimiters \# \0
+
+
diff --git a/modules/filter/modes/email.amf b/modules/filter/modes/email.amf
new file mode 100644 (file)
index 0000000..988726a
--- /dev/null
@@ -0,0 +1,8 @@
+MODE email 
+
+ASPELL >=0.60
+
+DESCRIPTION mode for skipping quoted text in email messages
+
+FILTER url
+FILTER email
diff --git a/modules/filter/modes/html.amf b/modules/filter/modes/html.amf
new file mode 100644 (file)
index 0000000..f3a8c86
--- /dev/null
@@ -0,0 +1,13 @@
+# HTML mode description file
+
+MODE html
+
+ASPELL >=0.60
+
+MAGIC /0:256:^[ \t]*<[Hh][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/htm/html
+MAGIC /0:256:^[ \t]*<[h][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/HTM/HTML
+
+DESCRIPTION mode for checking HTML documents
+
+FILTER url
+FILTER html
diff --git a/modules/filter/modes/none.amf b/modules/filter/modes/none.amf
new file mode 100644 (file)
index 0000000..0fad4e8
--- /dev/null
@@ -0,0 +1,5 @@
+MODE none 
+
+ASPELL >=0.60.1
+
+DESCRIPTION mode to disable all filters
diff --git a/modules/filter/modes/nroff.amf b/modules/filter/modes/nroff.amf
new file mode 100644 (file)
index 0000000..42a3977
--- /dev/null
@@ -0,0 +1,10 @@
+MODE nroff
+
+ASPELL >=0.60.1
+
+MAGIC /0:3:\.\/"/0/1/2/3/4/5/6/7/8/9/n/man/tmac
+
+DESCRIPTION mode for checking Nroff documents
+
+FILTER url
+FILTER nroff
diff --git a/modules/filter/modes/perl.amf b/modules/filter/modes/perl.amf
new file mode 100644 (file)
index 0000000..114c49a
--- /dev/null
@@ -0,0 +1,16 @@
+MODE perl
+
+ASPELL >=0.60.1
+
+MAGIC /0:256:^[ \t]*\#!((\/\w*)+)\/perl/pl/pm
+MAGIC /<noregex>/pl/pm
+
+DESCRIPTION mode for checking Perl comments and string literals
+
+FILTER url
+FILTER context
+OPTION clear-context-delimiters 
+OPTION add-context-delimiters " "
+OPTION add-context-delimiters \# \0
+OPTION disable-context-visible-first
+
diff --git a/modules/filter/modes/sgml.amf b/modules/filter/modes/sgml.amf
new file mode 100644 (file)
index 0000000..e1b1c01
--- /dev/null
@@ -0,0 +1,12 @@
+MODE sgml
+
+ASPELL >=0.60
+
+MAGIC /0:256:^[ \t]*<[Hh][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/htm/html
+MAGIC /0:256:^[ \t]*<[h][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/HTM/HTML
+
+DESCRIPTION mode for checking generic SGML/XML documents
+
+FILTER url
+FILTER sgml
+
diff --git a/modules/filter/modes/tex.amf b/modules/filter/modes/tex.amf
new file mode 100644 (file)
index 0000000..beb32dc
--- /dev/null
@@ -0,0 +1,10 @@
+MODE tex
+
+ASPELL >=0.60
+
+MAGIC /0:256:^[ \t]*\\documentclass\[[^\[\]]*\]\{[^\{\}]*\}/tex
+
+DESCRIPTION mode for checking TeX/LaTeX documents
+
+FILTER url
+FILTER tex
diff --git a/modules/filter/modes/texinfo.amf b/modules/filter/modes/texinfo.amf
new file mode 100644 (file)
index 0000000..0cd1068
--- /dev/null
@@ -0,0 +1,10 @@
+MODE texinfo
+
+ASPELL >=0.60.1
+
+MAGIC /<noregex>/texi/texinfo
+
+DESCRIPTION mode for checking Texinfo documents
+
+FILTER url
+FILTER texinfo
diff --git a/modules/filter/modes/url.amf b/modules/filter/modes/url.amf
new file mode 100644 (file)
index 0000000..24ce649
--- /dev/null
@@ -0,0 +1,7 @@
+MODE url 
+
+ASPELL >=0.60
+
+DESCRIPTION mode to skip URL like constructs (default mode)
+
+FILTER url
diff --git a/modules/filter/nroff-filter.info b/modules/filter/nroff-filter.info
new file mode 100644 (file)
index 0000000..858146f
--- /dev/null
@@ -0,0 +1,10 @@
+# sgml filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `aspell help nroff'
+DESCRIPTION filter for dealing with Nroff documents
+
+STATIC filter
+
diff --git a/modules/filter/nroff.cpp b/modules/filter/nroff.cpp
new file mode 100644 (file)
index 0000000..3be33b8
--- /dev/null
@@ -0,0 +1,312 @@
+/* This file is part of The New Aspell
+
+   Copyright (C) 2004 Sergey Poznyakoff
+
+   GNU Aspell free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   GNU Aspell is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with GNU Aspell; see the file COPYING.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <stdio.h>
+
+#include "settings.h"
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "indiv_filter.hpp"
+#include "string_map.hpp"
+#include "mutable_container.hpp"
+#include "clone_ptr-t.hpp"
+#include "filter_char_vector.hpp"
+
+namespace {
+  using namespace acommon;
+
+  class NroffFilter : public IndividualFilter
+  {
+  private:
+    enum filter_state {
+      initial,
+      escape,
+      request,
+      font_switch,
+      size_switch,
+      skip_char,
+      skip_digit,
+      skip_space_before_ident,
+      skip_ident,
+      skip_cond,
+      skip_leading_ws,
+      argument,
+      register_reference,
+      gnu_register_name      
+    } state;
+    bool newline;      // Newline has just been seen.
+    size_t skip_chars; // Number of characters to skip
+    char req_name[2];  // Name of the recent nroff request
+    int pos;           // position of the next char in req_name
+    bool in_request;   // are we within a request?
+
+    // Return true if we should ignore argument to the current request.
+    bool inline ignore_request_argument ()
+    {
+      static char ignore_req_tab[][3] = {
+       "ds",
+       "de",
+       "nr",
+       "do",
+       "so"
+      };
+      for (unsigned i = 0; i < sizeof(ignore_req_tab)/sizeof(ignore_req_tab[0]);
+          i++)
+       if (memcmp(ignore_req_tab[i], req_name, 2) == 0)
+         return true;
+      return false;
+    }
+    
+    bool process_char (FilterChar::Chr c);
+      
+  public:
+
+    PosibErr<bool> setup(Config *);
+    void reset();
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  PosibErr<bool> NroffFilter::setup(Config * opts) 
+  {
+    name_ = "nroff-filter";
+    order_num_ = 0.2;
+    reset();
+    return true;
+  }
+
+  void NroffFilter::reset() 
+  {
+    state = initial;
+    newline = true;
+    in_request = false;
+    pos = 0;
+    skip_chars = 0;
+  }
+
+  bool NroffFilter::process_char(FilterChar::Chr c)
+  {
+    if (skip_chars)
+      {
+       skip_chars--;
+       return true;
+      }
+
+    switch (state)
+      {
+      case initial:
+       switch (c)
+         {
+         case '\\':
+           state = escape;
+           return true;
+           
+         case '\'':
+         case '.':
+           if (newline)
+             {
+               state = skip_leading_ws;
+               return true;
+             }
+           else if (in_request)
+             {
+               state = request;
+               pos = 0;
+               return true;
+             }
+           break;
+         }
+       break;
+
+      case escape:
+       switch (c)
+         {
+         case 'f': // font switch
+           state = font_switch;
+           return true;
+           
+         case '*': // string register
+         case 'n': // numeric register
+           state = register_reference;
+           return true;
+           
+         case 's': // change size escape
+           state = size_switch;
+           return true;
+
+         case '(':
+           // extended char set: \(XX
+           skip_chars = 2;
+           state = initial;
+           return true;
+
+         case '[':
+           // extended char set: \[comp1 comp2 ... ] (GNU extension)
+           state = gnu_register_name;
+           return true;
+             
+         case '"': // comment
+           state = initial;
+           return true;
+
+         case '\\': // quoting;
+           return true;
+
+         case '$':
+           state = argument;
+           return true;
+
+         default:
+           state = initial;
+         }
+       break;
+       
+      case register_reference:
+       // Reference to a string or numeric register. 
+       switch (c)
+         {
+         case '(': // Traditional nroff
+           skip_chars = 2;
+           state = initial;
+           return true;
+           
+         case '[': // register long name (GNU extension)
+           state = gnu_register_name;
+           return true;
+
+         default:
+           state = initial;
+         }
+       break;
+
+      case gnu_register_name:
+       if (c == ']' || c == '\n')
+         state = initial;
+       return true;
+       
+      case font_switch:
+       // font change escape. Either
+       //     \f(XY
+       // or
+       //     \fX
+       if (c == '(')
+         skip_chars = 2;
+       state = initial;
+       return true;
+
+      case size_switch:
+       // size chage escape. It can be called in a variety of ways:
+       // \sN \s+N \s-N \s(NN \s+(NN \s-(NN \s(+NN \s(-NN  
+       if (c == '+' || c == '-')
+         {
+           state = skip_char;
+           return true;
+         }
+       /* FALL THROUGH */
+
+      case skip_char:
+       state = skip_digit;
+       return true;
+       
+      case skip_digit:
+       state = initial;
+       if (asc_isdigit (c))
+         return true;
+       break;
+
+      case skip_leading_ws:
+       if (asc_isspace(c))
+         break;
+       state = request;
+       pos = 0;
+       /* FALL THROUGH */
+           
+      case request:
+       if (c == '\n' || c == '.') //double-dot
+         {
+           state = initial;
+         }
+       else
+         {
+           req_name[pos++] = c;
+           if (pos == 2)
+             {
+               if (ignore_request_argument ())
+                 state = skip_space_before_ident;
+               else if (memcmp (req_name, "if", 2) == 0)
+                 state = skip_cond;
+               else
+                 state = skip_ident;
+             }
+         }
+       return true;
+
+      case skip_cond:
+       if (asc_isspace(c))
+         return true;
+
+       state = initial;
+       in_request = true;
+       if (c == 't' || c == 'n') // if t .. if n
+         return true;
+       return process_char(c); // tail recursion;
+       
+      case skip_space_before_ident:
+       if (!asc_isspace(c))
+         state = skip_ident;
+       return true;
+
+      case skip_ident:
+       if (asc_isspace(c))
+         {
+           state = initial;
+           in_request = true;
+         }
+       return true;
+
+      case argument:
+       if (asc_isdigit(c))
+         return true;
+       state = initial;
+       return process_char(c); // tail recursion;
+      }
+    
+    return false;
+  }
+
+  void NroffFilter::process(FilterChar * & str, FilterChar * & stop)
+  {
+    FilterChar * cur = str;
+    for (; cur != stop; cur++)
+      {
+       if (process_char (*cur) && *cur != '\n')
+         *cur = ' ';
+       newline = *cur == '\n';
+       if (newline)
+         in_request = false;
+      }
+  }
+
+}
+
+C_EXPORT
+IndividualFilter * new_aspell_nroff_filter() {
+  return new NroffFilter;                                
+}
+
+  
diff --git a/modules/filter/sgml-filter.info b/modules/filter/sgml-filter.info
new file mode 100644 (file)
index 0000000..92595ca
--- /dev/null
@@ -0,0 +1,23 @@
+# SGML filter option file
+
+LIB-FILE sgml-filter
+
+#THIS Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `Aspell help SGML'
+DESCRIPTION filter for dealing with generic SGML/XML documents
+
+STATIC filter
+
+OPTION check
+TYPE list
+DESCRIPTION   SGML attributes to always check
+ENDOPTION
+
+OPTION skip
+TYPE list
+DESCRIPTION  SGML tags to always skip the contents of
+ENDOPTION
+
+STATIC decoder
diff --git a/modules/filter/sgml.cpp b/modules/filter/sgml.cpp
new file mode 100644 (file)
index 0000000..585c017
--- /dev/null
@@ -0,0 +1,604 @@
+// This file is part of The New Aspell
+// Copyright (C) 2004 by Tom Snyder
+// Copyright (C) 2001-2004 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+//
+// The orignal filter was written by Kevin Atkinson.
+// Tom Snyder rewrote the filter to support skipping SGML tags
+//
+// This filter enables the spell checking of sgml, html, and xhtml files
+// by skipping the <elements> and such.
+// The overall strategy is based on http://www.w3.org/Library/SGML.c.
+// We don't use that code (nor the sourceforge 'expat' project code) for
+// simplicity's sake.  We don't need to fully parse all aspects of HTML -
+// we just need to skip and handle a few aspects. The w3.org code had too
+// many linkages into their overall SGML/HTML processing engine.
+//
+// See the comment at the end of this file for examples of what we handle.
+// See the config setting docs regarding our config lists: check and skip.
+
+#include <stdio.h> // needed for sprintf
+
+#include "settings.h"
+
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "indiv_filter.hpp"
+#include "string_map.hpp"
+#include "mutable_container.hpp"
+#include "clone_ptr-t.hpp"
+#include "filter_char_vector.hpp"
+
+//right now unused option
+//  static const KeyInfo sgml_options[] = {
+//    {"sgml-extension", KeyInfoList, "html,htm,php,sgml",
+//     N_("sgml file extensions")}
+//  };
+
+namespace {
+
+  using namespace acommon;
+
+  class ToLowerMap : public StringMap
+  {
+  public:
+    PosibErr<bool> add(ParmStr to_add) {
+      String new_key;
+      for (const char * i = to_add; *i; ++i) new_key += asc_tolower(*i);
+      return StringMap::add(new_key);
+    }
+
+    PosibErr<bool> remove(ParmStr to_rem) {
+      String new_key;
+      for (const char * i = to_rem; *i; ++i) new_key += asc_tolower(*i);
+      return StringMap::remove(new_key);
+    }
+  };
+
+  class SgmlFilter : public IndividualFilter 
+  {
+    // State enum. These states track where we are in the HTML/tag/element constructs.
+    // This diagram shows the main states. The marked number is the state we enter
+    // *after* we've read that char. Note that some of the state transitions handle
+    // illegal HTML such as <tag=what?>.
+    //
+    //  real text <tag attrib = this  attrib2='that'> &nbsp; </tag> &#123;
+    //   |        |   |  |   ||  |             |      |  |    |      | 
+    //   1        2   3  4   56  7             8      10 11   9      12
+    enum ScanState {
+      S_text,   // 1. raw user text outside of any markup.
+      S_tag,    // 2. reading the 'tag' in <tag>
+      S_tag_gap,// 3. gap between attributes within an element:
+      S_attr,   // 4. Looking at an attrib name
+      S_attr_gap,// 5. optional gap after attrib name
+      S_equals,  // 6. Attrib equals sign, also space after the equals.
+      S_value,   // 7. In attrib value.
+      S_quoted,  // 8. In quoted attrib value.
+      S_end,     // 9. Same as S_tag, but this is a </zee> type end tag.
+      S_ignore_junk, // special case invalid area to ignore.
+      S_ero,     // 10. in the &code; special encoding within HTML.
+      S_entity,  // 11. in the alpha named &nom; special encoding.. 
+      S_cro,     // 12. after the # of a &#nnn; numerical char reference encoding.
+  
+    // SGML.. etc can have these special "declarations" within them. We skip them
+    //  in a more raw manners since they don't abide by the attrib= rules.
+    // Most importantly, some of the attrib quoting rules don't apply.
+    //  <!ENTITY rtfchar "gg" - - (high, low)>  <!--  fully commented -->
+    //   |               |                        ||                   |
+    //   20              21                     23  24                 25
+    S_md,     // 20. In a declaration (or beginning a comment).
+    S_mdq,    // 21. Declaration in quotes - double or single quotes.
+    S_com_1,  // 23. perhaps a comment beginning.
+    S_com,    // 24. Fully in a comment
+    S_com_e,  // 25. Perhaps ending a comment.
+    
+    //S_literal, // within a tag pair that means all content should be interpreted literally: <PRE>
+               // NOT CURRENTLY SUPPORTED FULLY.
+               
+    //S_esc,S_dollar,S_paren,S_nonasciitext // WOULD BE USED FOR ISO_2022_JP support.
+                                          // NOT CURRENTLY SUPPORTED.               
+    };
+    
+    ScanState in_what;
+            // which quote char is quoting this attrib value.\r 
+    FilterChar::Chr  quote_val;   
+           // one char prior to this one. For escape handling and such.
+    FilterChar::Chr  lookbehind;   
+
+    String tag_name;    // we accumulate the current tag name here.
+    String attrib_name; // we accumulate the current attribute name here.
+    
+    bool include_attrib;  // are we in one of the attribs that *should* be spell checked (alt=..)
+    int  skipall;         // are we in one of the special skip-all content tags? This is treated
+                         // as a bool and as a nesting level count.
+    String tag_endskip;  // tag name that will end that.
+    
+    StringMap check_attribs; // list of attribs that we *should* spell check.
+    StringMap skip_tags;   // list of tags that start a no-check-at-all zone.
+
+    String which;
+
+    bool process_char(FilterChar::Chr c);
+  public:
+
+    SgmlFilter(const char * n) : which(n) {}
+
+    PosibErr<bool> setup(Config *);
+    void reset();
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  PosibErr<bool> SgmlFilter::setup(Config * opts) 
+  {
+    name_ = which + "-filter";
+    order_num_ = 0.35;
+    check_attribs.clear();
+    skip_tags.clear();
+    opts->retrieve_list("f-" + which + "-skip",  &skip_tags);
+    opts->retrieve_list("f-" + which + "-check", &check_attribs);
+    reset();
+    return true;
+  }
+  
+  void SgmlFilter::reset() 
+  {
+    in_what = S_text;
+    quote_val = lookbehind = '\0';
+    skipall = 0;
+    include_attrib = false;
+  }
+
+  // yes this should be inlines, it is only called once
+  
+  // RETURNS: TRUE if the caller should skip the passed char and
+  //  not do any spell check on it. FALSE if char is a part of the text
+  //  of the document.
+  bool SgmlFilter::process_char(FilterChar::Chr c) {
+  
+    bool retval = true;  // DEFAULT RETURN VALUE. All returns are done
+                        // via retval and falling out the bottom. Except for
+                        // one case that must manage the lookbehind char.
+    
+    // PS: this switch will be fast since S_ABCs are an enum and
+    //  any good compiler will build a jump table for it.
+    // RE the gotos: Sometimes considered bad practice but that is
+    //  how the W3C code (1995) handles it. Could be done also with recursion
+    //  but I doubt that will clarify it. The gotos are done in cases where several
+    //  state changes occur on a single input char.
+
+    switch( in_what ) {
+    
+      case S_text:   // 1. raw user text outside of any markup.
+          s_text:
+        switch( c ) {
+          case '&': in_what = S_ero; 
+                   break;
+          case '<': in_what = S_tag; tag_name.clear(); 
+                   break;
+          default:
+                retval = skipall;  // ********** RETVAL ASSIGNED
+        }                          // **************************
+        break;
+        
+      case S_tag:    // 2. reading the 'tag' in <tag>
+                    //  heads up: <foo/bar will be treated as an end tag. That's what w3c does.
+        switch( c ) {
+         case '>': goto all_end_tags;
+          case '/': in_what = S_end; 
+                   tag_name.clear(); 
+                   break;
+          case '!': in_what = S_md;  
+                   break;
+          default: // either more alphanum of the tag, or end of tagname:
+            if( asc_isalpha(c) || asc_isdigit(c) ) {
+                tag_name += asc_tolower(c);            
+            }
+            else {  // End of the tag:
+                in_what = S_tag_gap;
+               goto s_tag_gap;  // handle content in that zone.
+           }
+       }
+       break;
+
+       // '>'  '>'  '>'  '>' 
+      all_end_tags:   // this gets called by several states to handle the
+                      // possibility of a '>' ending a whole <tag...> guy.
+       if( c != '>' ) break;
+       in_what = S_text;
+
+       if( lookbehind == '/' ) {
+           // Wowza: this is how we handle the <script stuff /> XML style self
+           //  terminating tag. By clearing the tagname out tag-skip-all code
+           //  will not be invoked.
+           tag_name.clear();
+       }
+           
+       // Does this tag cause us to skip all content?
+       if( skipall ) {  
+           // already in a skip-all context. See if this is
+           // the same skipall tag:
+           if( !strcmp( tag_name.c_str(), tag_endskip.c_str() ) ) {
+               ++skipall;  // increment our nesting level count.
+           }
+       }
+       else {  // Should we begin a skip all range?
+           skipall = (skip_tags.have( tag_name.c_str() ) ? 1 : 0);
+           if( skipall ) {
+               tag_endskip = tag_name;  // remember what tag to end on.
+           }
+       }
+       break;
+                        
+      case S_tag_gap: // 3. gap between attributes within an element:
+          s_tag_gap:
+       switch( c ) {
+         case '>': goto all_end_tags;
+
+         case '=': in_what = S_attr_gap; 
+                   break; // uncommon - no-name attrib value
+         default:
+           if( asc_isspace( c ) ) break; // still in gap.
+           else {
+               in_what = S_attr;   // start of attribute name;
+               attrib_name.clear();
+               attrib_name += asc_tolower( c );
+           }
+           break;
+        }
+        break;
+        
+      case S_end:     // 9. Same as S_tag, but this is a </zee> type end tag.
+       if( asc_isalpha(c) || asc_isdigit(c) ) {
+         tag_name += asc_tolower( c );
+       }
+       else {
+         // See if we have left a skipall tag range.
+         if( skipall && !strcmp( tag_name.c_str(), tag_endskip.c_str() ) ) {
+           --skipall; // lessen nesting level count. This usually takes us to zero.
+         }
+         if( c == '>' ) in_what = S_text;  // --don't go to all_end_tags.  Really.
+         else in_what = S_ignore_junk;  // no-mans land: </end whats this??>
+       }
+       break;
+       
+      case S_ignore_junk:  // no-mans land state: </end whats this here??>
+       if( c == '>' ) in_what = S_text;
+       break;
+      
+      case S_attr:   // 4. Looking at an attrib name
+       if( asc_isspace(c) ) in_what = S_attr_gap;
+       else if( c == '=' )  in_what = S_equals;
+       else if( c == '>' )  goto all_end_tags;
+       else {
+         attrib_name += asc_tolower( c );
+       }
+       break;
+       
+      case S_attr_gap: // 5. optional gap after attrib name
+       if( asc_isspace(c) ) break;
+       else if( c == '=' )  in_what = S_equals;
+       else if( c == '>' )  goto all_end_tags;
+       else { // beginning of a brand new attr
+         attrib_name.clear();
+         attrib_name += asc_tolower( c );
+       }
+       break;
+      
+      case S_equals:  // 6. Attrib equals sign, also space after the equals.
+       if( asc_isspace(c) ) break;
+       switch( c ) {
+         case '>':  goto all_end_tags;
+
+         case '\'': 
+         case '"':  in_what = S_quoted;
+                    quote_val = c;
+                    break;
+         default:   in_what = S_value;   
+                    break;
+       }
+       // See if this attrib deserves full checking:
+       include_attrib=check_attribs.have( attrib_name.c_str() );
+       // Handle the first value char if that is where we are now:
+       if( in_what == S_value ) goto s_value;
+       break;
+      
+      case S_value:   // 7. In attrib value.
+          s_value:
+       if( c == '>' ) goto all_end_tags;
+       else if( asc_isspace(c) ) in_what = S_tag_gap; // end of attrib value
+                               // *****************************
+                               // ********** RETVAL ASSIGNED
+       else if( include_attrib ) retval = false; // spell check this value.
+       break;
+      
+      case S_quoted: // 8. In quoted attrib value.
+       if( c == quote_val && lookbehind != '\\' ) in_what = S_tag_gap;
+       else if( c == '\\' && lookbehind == '\\' ) {
+               // This is an escape of an backslash. Therefore the backslash
+               // does not escape what follows. Therefore we don't leave it in
+               // the lookbehind. Yikes!
+         lookbehind = '\0';
+         return !include_attrib;      // ************* RETURN RETURN RETURN RETURN
+       }
+       else retval = !include_attrib;
+       break;
+      
+      // note: these three cases - S_ero, S_cro, and S_entity which all handle
+      //  the &stuff; constructs are broken into 3 states for future upgrades. Someday
+      //  you may want to handle the chars these guys represent as individual chars.
+      //  I don't have the desire nor the knowledge to do it now.  -Tom, 5/5/04.       
+      case S_ero:     // 10. in the &code; special encoding within HTML.
+               // &# is a 'Char Ref Open'
+       if( c == '#' ) {
+         in_what = S_cro;
+         break;
+       }
+       // FALLTHROUGH INTENTIONAL
+       
+      case S_cro:     // 12. after the # of a &#nnn; numerical char reference encoding.
+      case S_entity:  // 11. in the alpha named &nom; special encoding.. 
+       if( asc_isalpha(c) || asc_isdigit(c) ) break; // more entity chars.
+       in_what = S_text;
+       if( c == ';' ) break;  // end of char code.
+       goto s_text; // ran right into text. Handle it.
+      
+  
+      // SGML.. etc can have these special "declarations" within them. We skip them
+      //  in a more raw manners since they don't abide by the attrib= rules.
+      // Most importantly, some of the quoting rules don't apply.
+      //  <!ENTITY rtfchar "gg" 'tt' - - (high, low)>  <!--  fully commented -->
+      //   |               |    |                        ||                  ||
+      //   20              21   22                     23  24              25  26
+      case S_md:     // 20. In a declaration (or comment).
+       switch( c ) {
+         case '-': if( lookbehind == '!' ) {
+                       in_what = S_com_1;
+                   }
+                   break;
+
+         case '"':     // fallthrough - yes.
+         case '\'': in_what = S_mdq; 
+                    quote_val=c; 
+                    break;
+         case '>':  in_what = S_text; // note: NOT all_end_tags cause it's not a real tag.
+                    break;
+       }
+       break;
+    
+    case S_mdq: // 22. Declaration in quotes.
+       if( c == quote_val ) in_what = S_md;
+       else if( c == '>' )  in_what = S_text;
+       break;
+    
+    case S_com_1:  // 23. perhaps a comment beginning.
+       if( c == '-' ) in_what = S_com;
+       else if( c == '>' ) in_what = S_text;
+       else in_what = S_md; // out of possible comment.
+       break;
+       
+    case S_com:    // 24. Fully in a comment
+       if( c == '-' && lookbehind == '-' ) in_what = S_com_e;
+       break;
+    
+    case S_com_e:  // 25. Perhaps ending a comment.
+       if( c == '>' ) in_what = S_text;
+       else if( c != '-' ) in_what = S_com;  // back to basic comment.
+       break;
+    }
+  
+    // update the lookbehind:
+    lookbehind = c;
+   
+    return( retval );
+  }
+  
+  void SgmlFilter::process(FilterChar * & str, FilterChar * & stop)
+  {
+    FilterChar * cur = str;
+    while (cur != stop) {
+      if (process_char(*cur))
+       *cur = ' ';
+      ++cur;
+    }
+  }
+  
+  //
+  //
+  //
+
+  class SgmlDecoder : public IndividualFilter 
+  {
+    FilterCharVector buf;
+    String which;
+  public:
+    SgmlDecoder(const char * n) : which(n) {}
+    PosibErr<bool> setup(Config *);
+    void reset() {}
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  PosibErr<bool> SgmlDecoder::setup(Config *) 
+  {
+    name_ = which + "-decoder";
+    order_num_ = 0.65;
+    return true;
+  }
+
+  void SgmlDecoder::process(FilterChar * & start, FilterChar * & stop)
+  {
+    buf.clear();
+    FilterChar * i = start;
+    while (i != stop)
+    {
+      if (*i == '&') {
+       FilterChar * i0 = i;
+       FilterChar::Chr chr;
+       ++i;
+       if (i != stop && *i == '#') {
+         chr = 0;
+         ++i;
+         while (i != stop && asc_isdigit(*i)) {
+           chr *= 10;
+           chr += *i - '0';
+           ++i;
+         }
+       } else {
+         while (i != stop && (asc_isalpha(*i) || asc_isdigit(*i))) {
+           ++i;
+         }
+         chr = '?';
+       }
+       if (i != stop && *i == ';')
+         ++i;
+       buf.append(FilterChar(chr, i0, i));
+      } else {
+       buf.append(*i);
+       ++i;
+      }
+    }
+    buf.append('\0');
+    start = buf.pbegin();
+    stop  = buf.pend() - 1;
+  }
+
+  //
+  // Sgml Encoder - BROKEN do not use
+  //
+
+//   class SgmlEncoder : public IndividualFilter 
+//   {
+//     FilterCharVector buf;
+//     String which;
+//   public:
+//     SgmlEncoder(const char * n) : which(n) {}
+//     PosibErr<bool> setup(Config *);
+//     void reset() {}
+//     void process(FilterChar * &, FilterChar * &);
+//   };
+
+//   PosibErr<bool> SgmlEncoder::setup(Config *) 
+//   {
+//     name_ = which + "-encoder";
+//     order_num_ = 0.99;
+//     return true;
+//   }
+
+//   void SgmlEncoder::process(FilterChar * & start, FilterChar * & stop)
+//   {
+//     buf.clear();
+//     FilterChar * i = start;
+//     while (i != stop)
+//     {
+//       if (*i > 127) {
+//     buf.append("&#", i->width);
+//     char b[10];
+//     sprintf(b, "%d", i->chr);
+//     buf.append(b, 0);
+//     buf.append(';', 0);
+//       } else {
+//     buf.append(*i);
+//       }
+//       ++i;
+//     }
+//     buf.append('\0');
+//     start = buf.pbegin();
+//     stop  = buf.pend() - 1;
+//   }
+}
+
+C_EXPORT IndividualFilter * new_aspell_sgml_filter() 
+{
+  return new SgmlFilter("sgml");
+}
+C_EXPORT IndividualFilter * new_aspell_sgml_decoder() 
+{
+  return new SgmlDecoder("sgml");
+}
+// C_EXPORT IndividualFilter * new_aspell_sgml_encoder() 
+// {
+//   return new SgmlEncoder("sgml");
+// }
+
+C_EXPORT IndividualFilter * new_aspell_html_filter() 
+{
+  return new SgmlFilter("html");
+}
+C_EXPORT IndividualFilter * new_aspell_html_decoder() 
+{
+  return new SgmlDecoder("html");
+}
+// C_EXPORT IndividualFilter * new_aspell_html_encoder() 
+// {
+//   return new SgmlEncoder("html");
+// }
+
+
+/* Example HTML:
+
+<!-- 
+This file contains several constructs that test the parsing and
+handling of SGML/HTML/XML in sgml.cpp.
+
+The only spelling errors you should see will be the word 'report this NNNN'.
+There will be 22 of these.
+
+run this by executing:
+aspell pipe -H < sgmltest.html
+
+WARNING: this is not really valid HTML. Don't display in a browser!
+-->
+
+<!-- phase 1 - SGML comments. -->
+reportthiszphaseONE
+ <!-- ** 1.0 Valid comments... This file is full of them.  -->
+ <!-- ** 1.1 invalid open comment: -->
+<!- not in a comment>reportthisyes</!->
+
+ <!-- ** 1.2 invalid close comment: -->
+<!-- -- > spallwhat DON'T REPORT -> spallwhat DON'T REPORT -->
+
+<!-- phase 1.5 - special entity encodings -->
+reportthisphaseONEFIVE
+ &nbsp; don't&nbsp;report&nbsp;this
+ &#011; do not&#x20;report this.
+ do not&gt;report this.
+ this &amp; that.
+
+<!-- phase 2 - special skip tags -->
+reportthisphaseTWO
+<SCRIPT> spallwhat DON'T REPORT </SCRIPT> reportthisyes
+<style> spallwhat DON'T REPORT </style> reportthisyes
+<STYLE something="yes yes"
+      > spallwhat DON'T REPORT </style > reportthisyes
+<script/> reportthisyes  <!-- XHTML style terminated tag -->
+<script someattrib=value/> reportthisyes  <!-- XHTML style terminated tag -->
+<!-- Nested skip tags -->
+<script> spallwhatnoreport <script> nonoreport </script><b>hello</b> nonoreport</script>reportthisyes
+
+<!-- phase 3 - special 'include this' attributes -->
+reportthisphaseTHREE
+<tagname alt="image text reportthisyes" alt2=spallwhat altt="spallwhat don't report">
+<tagname ALT="image text reportthisyes" ALT2=spallwhat AL="spallwhat don't report">
+
+<!-- phase 4 - attribute value quoteing and escaping -->
+reportthisphaseoneFOUR
+<checkthis attribute111=simple/value.value >
+<checkagain SOMEattrib   =   "whoa boy, mimimimspelled  ">
+<singlequotes gotcha=   'singlypingly quoted///'>
+<dblescaped gogogogo="dontcheck \">still in dontcheck\\\" still in dontcheck"> reportthisyes.
+<dBLmore TomTomTomTom="so many escapes: \\\\\\\\"> reportthisyes.
+<dblescaped gogogogo='dontcheck \'>still in dontcheck\\\' still in dontcheck'> reportthisyes.
+<dBLmore TomTomTomTom='so many escapes: \\\\\\\\'> reportthisyes.
+<mixnmatch scanhere='">dontcheck \"dontcheck \'dontcheck' alt=reportthisyes>
+
+<!-- phase 5 - questionable (though all too common) constructs -->
+reportthisphaseFIVE
+<tag=dontreport> reportthisyes <tag hahahahhaha>reportthisyes
+<!-- this one is from Yahoo! -->
+<td width=1%><img src="http://wellll/thereeee/nowwww" alt="cool stuff">
+<td width=1%><img src=http://wellll/thereeee/nowwww alt=real cool stuff>
+
+*/
diff --git a/modules/filter/tex-filter.info b/modules/filter/tex-filter.info
new file mode 100644 (file)
index 0000000..81d9c5b
--- /dev/null
@@ -0,0 +1,105 @@
+# TeX filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.51
+
+#This line will be printed when typing `Aspell help TeX'
+DESCRIPTION filter for dealing with TeX/LaTeX documents
+
+STATIC filter
+#STATIC encoder
+#STATIC decoder
+
+OPTION check-comments
+TYPE bool
+DESCRIPTION check TeX comments
+DEFAULT false
+ENDOPTION
+
+OPTION command
+TYPE list
+DESCRIPTION TeX commands
+DEFAULT addtocounter pp
+DEFAULT addtolength pp
+DEFAULT alpha p
+DEFAULT arabic p
+DEFAULT fnsymbol p
+DEFAULT roman p
+DEFAULT stepcounter p
+DEFAULT setcounter pp
+DEFAULT usecounter p
+DEFAULT value p
+DEFAULT newcounter po
+DEFAULT refstepcounter p
+DEFAULT label p
+DEFAULT pageref p
+DEFAULT ref p
+DEFAULT newcommand poOP
+DEFAULT renewcommand poOP
+DEFAULT newenvironment poOPP
+DEFAULT renewenvironment poOPP
+DEFAULT newtheorem poPo
+DEFAULT newfont pp
+DEFAULT documentclass op
+DEFAULT usepackage op
+DEFAULT begin po
+DEFAULT end p
+DEFAULT setlength pp
+DEFAULT addtolength pp
+DEFAULT settowidth pp
+DEFAULT settodepth pp
+DEFAULT settoheight pp
+DEFAULT enlargethispage p
+DEFAULT hyphenation p
+DEFAULT pagenumbering p
+DEFAULT pagestyle p
+DEFAULT addvspace p
+DEFAULT framebox ooP
+DEFAULT hspace p
+DEFAULT vspace p
+DEFAULT makebox ooP
+DEFAULT parbox ooopP
+DEFAULT raisebox pooP
+DEFAULT rule opp
+DEFAULT sbox pO
+DEFAULT savebox pooP
+DEFAULT usebox p
+DEFAULT include p
+DEFAULT includeonly p
+DEFAULT input p
+DEFAULT addcontentsline ppP
+DEFAULT addtocontents pP
+DEFAULT fontencoding p
+DEFAULT fontfamily p
+DEFAULT fontseries p
+DEFAULT fontshape p
+DEFAULT fontsize pp
+DEFAULT usefont pppp
+DEFAULT documentstyle op
+DEFAULT cite p
+DEFAULT nocite p
+DEFAULT psfig p
+DEFAULT selectlanguage p
+DEFAULT includegraphics op
+DEFAULT bibitem op
+DEFAULT geometry p
+ENDOPTION
+
+#OPTION multi-byte
+#TYPE list
+#DESCRIPTION multi character coded letters (<char>,<rep>[,<rep>[...]])
+#DEFAULT Ä,\\"A,"A
+#DEFAULT ä,\\"a,"a
+#DEFAULT Ö,\\"O,"O
+#DEFAULT ö,\\"o,"o
+#DEFAULT Ü,\\"U,"U
+#DEFAULT ü,\\"u,"u
+#DEFAULT ß,\\"s,"s
+#FLAGS utf-8
+#ENDOPTION
+
+#OPTION hyphen
+#TYPE list
+#DESCRIPTION characters used to encode hyphenation locations
+#DEFAULT \\-
+#ENDOPTION
diff --git a/modules/filter/tex.cpp b/modules/filter/tex.cpp
new file mode 100644 (file)
index 0000000..a979539
--- /dev/null
@@ -0,0 +1,767 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "string.hpp"
+#include "indiv_filter.hpp"
+#include "mutable_container.hpp"
+#include "string_map.hpp"
+#include "clone_ptr-t.hpp"
+#include "vector.hpp"
+#include "errors.hpp"
+#include "convert.hpp"
+
+//#define FILTER_PROGRESS_CONTROL "tex-filter-debug.log"
+//#include "filter_debug.hpp"
+//#include <stdio.h>
+//#include <cstdio>
+#include "filter_char_vector.hpp"
+#include "string_list.hpp"
+#include "string_enumeration.hpp"
+
+#include "gettext.h"
+
+namespace {
+
+  using namespace acommon;
+
+  class TexFilter : public IndividualFilter 
+  {
+  private:
+    enum InWhat {Name, Opt, Parm, Other, Swallow};
+    struct Command {
+      InWhat in_what;
+      String name;
+      const char * do_check;
+      Command() {}
+      Command(InWhat w) : in_what(w), do_check("P") {}
+    };
+
+    bool in_comment;
+    bool prev_backslash;
+    Vector<Command> stack;
+
+    class Commands : public StringMap {
+    public:
+      PosibErr<bool> add(ParmStr to_add);
+      PosibErr<bool> remove(ParmStr to_rem);
+    };
+    
+    Commands commands;
+    bool check_comments;
+    
+    inline void push_command(InWhat);
+    inline void pop_command();
+
+    bool end_option(char u, char l);
+
+    inline bool process_char(FilterChar::Chr c);
+    
+  public:
+    PosibErr<bool> setup(Config *);
+    void reset();
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  //
+  //
+  //
+
+  inline void TexFilter::push_command(InWhat w) {
+    stack.push_back(Command(w));
+  }
+
+  inline void TexFilter::pop_command() {
+    stack.pop_back();
+    if (stack.empty())
+      push_command(Parm);
+  }
+
+  //
+  //
+  //
+
+  PosibErr<bool> TexFilter::setup(Config * opts) 
+  {
+    name_ = "tex-filter";
+    order_num_ = 0.35;
+    //fprintf(stderr,"name %s \n",name_);
+
+    commands.clear();
+    opts->retrieve_list("f-tex-command", &commands);
+    
+    check_comments = opts->retrieve_bool("f-tex-check-comments");
+
+    reset();
+    return true;
+  }
+  
+  void TexFilter::reset() 
+  {
+    in_comment = false;
+    prev_backslash = false;
+    stack.resize(0);
+    push_command(Parm);
+  }
+
+#  define top stack.back()
+
+  // yes this should be inlined, it is only called once
+  inline bool TexFilter::process_char(FilterChar::Chr c) 
+  {
+    // deal with comments
+    if (c == '%' && !prev_backslash) in_comment = true;
+    if (in_comment && c == '\n')     in_comment = false;
+
+    prev_backslash = false;
+
+    if (in_comment)                  return !check_comments;
+
+    if (top.in_what == Name) {
+      if (asc_isalpha(c)) {
+
+       top.name += c;
+       return true;
+
+      } else {
+
+       if (top.name.empty() && (c == '@')) {
+         top.name += c;
+         return true;
+       }
+         
+       top.in_what = Other;
+
+       if (top.name.empty()) {
+         top.name.clear();
+         top.name += c;
+         top.do_check = commands.lookup(top.name.c_str());
+         if (top.do_check == 0) top.do_check = "";
+         return !asc_isspace(c);
+       }
+
+       top.do_check = commands.lookup(top.name.c_str());
+       if (top.do_check == 0) top.do_check = "";
+
+       if (asc_isspace(c)) { // swallow extra spaces
+         top.in_what = Swallow;
+         return true;
+       } else if (c == '*') { // ignore * at end of commands
+         return true;
+       }
+       
+       // continue o...
+      }
+
+    } else if (top.in_what == Swallow) {
+
+      if (asc_isspace(c))
+       return true;
+      else
+       top.in_what = Other;
+    }
+
+    if (c == '{')
+      while (*top.do_check == 'O' || *top.do_check == 'o') 
+       ++top.do_check;
+
+    if (*top.do_check == '\0')
+      pop_command();
+
+    if (c == '{') {
+
+      if (top.in_what == Parm || top.in_what == Opt || top.do_check == '\0')
+       push_command(Parm);
+
+      top.in_what = Parm;
+      return true;
+    }
+
+    if (top.in_what == Other) {
+
+      if (c == '[') {
+
+       top.in_what = Opt;
+       return true;
+
+      } else if (asc_isspace(c)) {
+
+       return true;
+
+      } else {
+       
+       pop_command();
+
+      }
+
+    } 
+
+    if (c == '\\') {
+      prev_backslash = true;
+      push_command(Name);
+      return true;
+    }
+
+    if (top.in_what == Parm) {
+
+      if (c == '}')
+       return end_option('P','p');
+      else
+       return *top.do_check == 'p';
+
+    } else if (top.in_what == Opt) {
+
+      if (c == ']')
+       return end_option('O', 'o');
+      else
+       return *top.do_check == 'o';
+
+    }
+
+    return false;
+  }
+
+  void TexFilter::process(FilterChar * & str, FilterChar * & stop)
+  {
+    FilterChar * cur = str;
+
+    while (cur != stop) {
+      if (process_char(*cur))
+       *cur = ' ';
+      ++cur;
+    }
+  }
+
+  bool TexFilter::end_option(char u, char l) {
+    top.in_what = Other;
+    if (*top.do_check == u || *top.do_check == l)
+      ++top.do_check;
+    return true;
+  }
+
+  //
+  // TexFilter::Commands
+  //
+
+  PosibErr<bool> TexFilter::Commands::add(ParmStr value) {
+    int p1 = 0;
+    while (!asc_isspace(value[p1])) {
+      if (value[p1] == '\0') 
+       return make_err(bad_value, value,"",
+                        _("a string of 'o','O','p',or 'P'"));
+      ++p1;
+    }
+    int p2 = p1 + 1;
+    while (asc_isspace(value[p2])) {
+      if (value[p2] == '\0') 
+       return make_err(bad_value, value,"",
+                        _("a string of 'o','O','p',or 'P'"));
+      ++p2;
+    }
+    String t1; t1.assign(value,p1);
+    String t2; t2.assign(value+p2);
+    return StringMap::replace(t1, t2);
+  }
+  
+  PosibErr<bool> TexFilter::Commands::remove(ParmStr value) {
+    int p1 = 0;
+    while (!asc_isspace(value[p1]) && value[p1] != '\0') ++p1;
+    String temp; temp.assign(value,p1);
+    return StringMap::remove(temp);
+  }
+#if 0  
+  //
+  //
+  class Recode {
+    Vector<char *> code;
+    int minlength;
+  public:
+    Recode();
+    Recode(const Recode & recode) {*this=recode;}
+    void reset();
+    bool setExpansion(const char * expander);
+    virtual int encode(FilterChar * & begin,FilterChar * & end,
+                       FilterCharVector * external);
+    virtual int decode(FilterChar * & begin,FilterChar * & end,
+                       FilterCharVector * internal);
+    bool operator == (char test) ;
+    bool operator != (char test) ;
+    Recode & operator = (const Recode & rec);
+    virtual ~Recode();
+  };
+
+  Recode::Recode()
+    : code(0)
+  {  
+    minlength=0;
+    reset();
+  }
+
+  Recode & Recode::operator = (const Recode & rec) {
+    reset();
+    code.resize(rec.code.size());
+    
+    int countrec=0;
+  
+    for (countrec=0;
+         countrec < code.size();
+         countrec++) {
+      code[countrec]=NULL;
+      if (!rec.code[countrec]) {
+        continue;
+      }
+      int length=strlen(rec.code[countrec]);
+
+      code[countrec]= new char[length+1];
+      strncpy(code[countrec],rec.code[countrec],length);
+      code[countrec][length]='\0';
+    }
+    return *this;
+  }
+      
+
+  bool Recode::operator == (char test) {
+    return (code.size() && (code[0][0] == test));
+  }
+
+  bool Recode::operator != (char test) {
+    return (!code.size() || (code[0][0] != test));
+  }
+
+  void Recode::reset() {
+
+    unsigned int countcode=0;
+
+    for (countcode=0;
+         countcode < code.size();
+         countcode++) {
+      if (code[countcode]) {
+        delete[] code[countcode];
+      }
+      code[countcode] = NULL;
+    }
+    code.resize(0);
+    minlength=0;
+  }
+
+  bool Recode::setExpansion(const char * expander) {
+
+    char * begin=(char *)expander;
+    char * end=begin;
+    char * start=begin;
+    int keylen=0;
+
+
+    if (code.size() > 0) {
+      keylen=strlen(code[0]);
+    }
+    while (begin && end && *begin) {
+      while (end && *end && (*end != ',')) {
+        end++;
+      }
+      if (end  && (begin != end)) {
+        
+        char hold = *end;
+  
+        *end='\0';
+
+        int length=strlen(begin);
+
+        if ((begin == start) && (keylen || (length != 1))) {
+          if ((length != 1) || (keylen != length) ||
+              strncmp(code[0],begin,length)) {
+            *end=hold;
+            return false;
+          }
+          *end=hold;
+          if (*end) {
+            end++;
+          }
+          begin=end;
+          continue;
+        }
+        else if (minlength < length) {
+          minlength=0;
+        }
+  
+        code.resize(code.size()+1);
+        code[code.size()-1] = new char[length+1];
+        strncpy(code[code.size()-1],begin,length);
+        code[code.size()-1][length]='\0';
+        *end=hold;
+        if (*end) {
+          end++;
+        }
+        begin=end;
+      }
+    }
+    return true;
+  }
+
+  int Recode::encode(FilterChar * & begin,FilterChar * & end,
+                     FilterCharVector * external) {
+    if ((code.size() < 2) || 
+        (begin == NULL) || 
+        (begin == end) || 
+        (begin->width < (unsigned int) minlength )) {
+      return 0;
+    }
+    
+    if (code[0][0] != (char)*begin) {
+      return 0;
+    }
+    external->append(code[1],1);
+    return strlen(code[0]);
+  }
+
+  int Recode::decode(FilterChar * & begin,FilterChar * & end,
+                     FilterCharVector * internal) {
+  
+    FilterChar * i = begin;
+    char * codepointer = NULL;
+    char * codestart   = NULL; 
+  
+    if (code.size() < 2) {
+      return 0;
+    } 
+    while((i != end) && 
+          ((codepointer == NULL) || (*codepointer))) {
+      if (codepointer == NULL) {
+
+        int countcodes=0;
+
+        for (countcodes=1;
+             countcodes < (int) code.size();
+             countcodes++) {
+          if (*i == code[countcodes][0]) {
+            codestart=codepointer=code[countcodes];
+            break;
+          }
+        }
+        if (codepointer == NULL) {
+          return 0;
+        }
+      }
+      if (*codepointer != *i) {
+        return 0;
+      }
+      i++;
+      codepointer++;
+    }
+    if ((codepointer == NULL) || (*codepointer)) {
+      return 0;
+    }
+
+    int length=strlen(codestart);
+    internal->append(code[0],length);
+    return length;
+  }
+        
+    
+  Recode::~Recode() {
+    reset();
+  }
+
+  class TexEncoder : public IndividualFilter {
+    Vector<Recode> multibytes;
+    FilterCharVector buf;
+     
+  public:
+    TexEncoder();
+    virtual PosibErr<bool> setup(Config * config); 
+    virtual void process(FilterChar * & start, FilterChar * & stop);
+    virtual void reset() ;
+    virtual ~TexEncoder();
+  };
+
+  TexEncoder::TexEncoder()
+    : multibytes(0),
+      buf()
+  {
+  }
+
+  PosibErr<bool> TexEncoder::setup(Config * config) {
+    name_ = "tex-encoder";
+    order_num_ = 0.40;
+
+    StringList multibytechars;
+
+    config->retrieve_list("f-tex-multi-byte", &multibytechars);
+
+    Conv conv; // this a quick and dirty fix witch will only work for
+               // iso-8859-1.  Full unicode support needs to be
+               // implemented
+    conv.setup(*config, "utf-8", "iso-8859-1", NormNone);
+
+    StringEnumeration * multibytelist=multibytechars.elements();
+    const char * multibyte0=NULL;
+    const char * multibyte=NULL;
+
+    while ((multibyte0=multibytelist->next())) {
+
+      multibyte = conv(multibyte0);
+
+      if (strlen(multibyte) < 3) {
+        fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",
+                name_,multibyte);
+        continue;
+      }
+
+      int countmulti=0;
+
+      while ((countmulti < multibytes.size()) &&
+             !multibytes[countmulti].setExpansion(multibyte)) {
+        countmulti++;
+      }
+      if (countmulti >= multibytes.size()) {
+        multibytes.resize(multibytes.size()+1);
+        if (!multibytes[multibytes.size()-1].setExpansion(multibyte)) {
+          fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",name_,multibyte);
+          continue;
+        }
+      }
+    }
+    return true;
+  }
+
+  void TexEncoder::process(FilterChar * & start, FilterChar * & stop) {
+    buf.clear();
+
+    FilterChar * i=start;
+
+    while (i && (i != stop)) {
+
+      FilterChar * old = i;
+      int count=0;
+
+      for (count=0;
+           count < multibytes.size();
+           count++) { 
+
+
+        i+=multibytes[count].encode(i,stop,&buf);
+      }
+      if (i == old) {
+        buf.append(*i);
+        i++;
+      }
+    }
+    buf.append('\0');
+    start = buf.pbegin();
+    stop  = buf.pend() - 1;
+  }
+    
+
+  void TexEncoder::reset() {
+    multibytes.resize(0);
+    buf.clear();
+  }
+
+  TexEncoder::~TexEncoder(){
+  }
+        
+    
+  class TexDecoder : public IndividualFilter {
+    Vector<Recode> multibytes;
+    FilterCharVector buf;
+    Vector<char *>hyphens;
+     
+  public:
+    TexDecoder();
+    virtual PosibErr<bool> setup(Config * config); 
+    virtual void process(FilterChar * & start, FilterChar * & stop);
+    virtual void reset() ;
+    virtual ~TexDecoder();
+  };
+
+  TexDecoder::TexDecoder()
+    : multibytes(0),
+      buf(),
+      hyphens()
+  {
+    FDEBUGNOTOPEN;
+  }
+
+  PosibErr<bool> TexDecoder::setup(Config * config) {
+    name_ = "tex-decoder";
+    order_num_ = 0.3;
+
+    StringList multibytechars;
+    
+    config->retrieve_list("f-tex-multi-byte", &multibytechars);
+
+    Conv conv; // this a quick and dirty fix witch will only work for
+               // iso-8859-1.  Full unicode support needs to be
+               // implemented
+    conv.setup(*config, "utf-8", "iso-8859-1", NormNone);
+
+    StringEnumeration * multibytelist=multibytechars.elements();
+    const char * multibyte0=NULL;
+    const char * multibyte=NULL;
+
+    multibytes.resize(0);
+    
+    while ((multibyte0=multibytelist->next())) {
+
+      multibyte = conv(multibyte0);
+      
+      if (strlen(multibyte) < 3) {
+        fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",
+                name_,multibyte);
+        continue;
+      }
+      FDEBUGPRINTF("next multibyte chars `");
+      FDEBUGPRINTF(multibyte);
+      FDEBUGPRINTF("'\n");
+
+      int countmulti=0;
+
+      while ((countmulti < multibytes.size()) &&
+             !multibytes[countmulti].setExpansion(multibyte)) {
+        countmulti++;
+      }
+      FDEBUGPRINTF("next multibyte chars `");
+      FDEBUGPRINTF(multibyte);
+      FDEBUGPRINTF("'\n");
+      if (countmulti >= multibytes.size()) {
+        multibytes.resize(multibytes.size()+1);
+        if (!multibytes[multibytes.size()-1].setExpansion(multibyte)) {
+          fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",name_,multibyte);
+          continue;
+        }
+      }
+      FDEBUGPRINTF("next multibyte chars `");
+      FDEBUGPRINTF(multibyte);
+      FDEBUGPRINTF("'\n");
+    }
+    StringList hyphenChars;
+    
+    config->retrieve_list("f-tex-hyphen", &hyphenChars);
+
+    StringEnumeration * hyphenList=hyphenChars.elements();
+    const char * hyphen=NULL;
+
+    hyphens.resize(0);
+    while ((hyphen=hyphenList->next())) {
+      FDEBUGPRINTF("next hyphen char `");
+      FDEBUGPRINTF(hyphen);
+      FDEBUGPRINTF("'\n");
+      hyphens.push_back(strdup(hyphen));
+    }
+    return true;
+  }
+
+  void TexDecoder::process(FilterChar * & start, FilterChar * & stop) {
+    buf.clear();
+
+    FilterChar * i=start;
+
+    FDEBUGPRINTF("filtin `");
+    while (i && (i != stop)) {
+      
+      FilterChar * old = i;
+      int count=0;
+      
+      for (count=0;
+           count < multibytes.size();
+           count++) { 
+        
+        FilterChar * j = i;
+        
+        i+=multibytes[count].decode(i,stop,&buf);
+
+        while (j != i) {
+          char jp[2]={'\0','\0'};
+
+          jp[0]=*j;
+          FDEBUGPRINTF(jp);
+          j++;
+        }
+      }
+      for(count=0;
+          count < hyphens.size();
+          count++) {
+        if (!hyphens[count]) {
+          continue;
+        }
+        char * hp = &hyphens[count][0];
+        char * hpo = hp;
+        FilterChar * j = i;
+        while (*hp && (j != stop) &&
+               (*hp == *j)) {
+          hp++;
+          j++;
+        }
+        if (!*hp) {
+          FDEBUGPRINTF("{");
+          FilterChar * k = i;
+          while (k != j) {
+            char kp[2]={'\0','\0'};
+
+            kp[0]=*k;
+            FDEBUGPRINTF(kp);
+            k++;
+          } 
+          FDEBUGPRINTF("}");
+          if (buf.size()) {
+            buf[buf.size()-1].width+=strlen(hpo);
+//          buf.append(*i,strlen(hpo)+1);
+          }
+          else {
+//FIXME better solution for illegal hyphenation at begin of line
+//      illegal as new line chars are whitespace for latex
+            buf.append(*i,strlen(hpo));
+            char ip[2]={'\0','\0'};
+            ip[0]=*i;
+            FDEBUGPRINTF(ip);
+          }
+          i=j;
+        }
+      }
+      if (i == old) {
+        char ip[2]={'\0','\0'};
+        ip[0]=*i;
+        FDEBUGPRINTF(ip);
+        buf.append(*i);
+        i++;
+      }
+    }
+    buf.append('\0');
+    start = buf.pbegin();
+    stop  = buf.pend() - 1;
+    FDEBUGPRINTF("'\nfiltout `");
+    i = start;
+    while (i != stop) {
+      char ip[2]={'\0','\0'};
+      ip[0]=*i;
+      FDEBUGPRINTF(ip);
+      i++;
+    }
+    FDEBUGPRINTF("'\n");
+  }
+
+
+  void TexDecoder::reset() {
+    multibytes.resize(0);
+    buf.clear();
+  }
+
+  TexDecoder::~TexDecoder(){
+    FDEBUGCLOSE;
+  }
+#endif
+}
+
+C_EXPORT 
+IndividualFilter * new_aspell_tex_filter() {return new TexFilter;}
+
+#if 0
+C_EXPORT 
+IndividualFilter * new_aspell_tex_decoder() {return new TexDecoder;}
+C_EXPORT 
+IndividualFilter * new_aspell_tex_encoder() {return new TexEncoder;}
+#endif
diff --git a/modules/filter/texinfo-filter.info b/modules/filter/texinfo-filter.info
new file mode 100644 (file)
index 0000000..d7dae6d
--- /dev/null
@@ -0,0 +1,52 @@
+# TeX filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.60
+
+#This line will be printed when typing `Aspell help TeX'
+DESCRIPTION filter for dealing with Texinfo documents
+
+STATIC filter
+
+OPTION ignore
+TYPE list
+DESCRIPTION Texinfo commands to ignore the parameters of
+DEFAULT setfilename
+DEFAULT syncodeindex
+DEFAULT documentencoding
+DEFAULT vskip
+DEFAULT code
+DEFAULT kbd
+DEFAULT key
+DEFAULT samp
+DEFAULT verb
+DEFAULT var
+DEFAULT env
+DEFAULT file
+DEFAULT command
+DEFAULT option
+DEFAULT url
+DEFAULT uref
+DEFAULT email
+DEFAULT verbatiminclude
+DEFAULT xref
+DEFAULT ref
+DEFAULT pxref
+DEFAULT inforef
+DEFAULT c
+ENDOPTION
+
+OPTION ignore-env
+TYPE list
+DESCRIPTION Texinfo environments to ignore
+DEFAULT example
+DEFAULT smallexample
+DEFAULT verbatim
+DEFAULT lisp
+DEFAULT smalllisp
+DEFAULT small
+DEFAULT display
+DEFAULT snalldisplay
+DEFAULT format
+DEFAULT smallformat
+ENDOPTION
diff --git a/modules/filter/texinfo.cpp b/modules/filter/texinfo.cpp
new file mode 100644 (file)
index 0000000..7be1676
--- /dev/null
@@ -0,0 +1,231 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "asc_ctype.hpp"
+#include "config.hpp"
+#include "string.hpp"
+#include "indiv_filter.hpp"
+#include "string_map.hpp"
+#include "vector.hpp"
+
+namespace {
+
+  using namespace acommon;
+
+  class TexInfoFilter : public IndividualFilter 
+  {
+  private:
+    struct Command {
+      bool ignore;
+      Command(bool i = false) : ignore(i) {}
+    };
+
+    struct Table {
+      String name;
+      bool ignore_item;
+      Table(String n) : name(n), ignore_item(false) {}
+    };
+
+    String last_command;
+
+    String env_command;
+    int env_ignore;
+
+    int ignore;
+    bool in_line_command;
+    bool seen_input;
+    Vector<Command> stack;
+    Vector<Table>   table_stack;
+
+    StringMap to_ignore;
+    StringMap to_ignore_env;
+
+    void reset_stack();
+    
+  public:
+    PosibErr<bool> setup(Config *);
+    void reset();
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  //
+  //
+  //
+
+  PosibErr<bool> TexInfoFilter::setup(Config * opts) 
+  {
+    name_ = "texinfo-filter";
+    order_num_ = 0.35;
+    
+    to_ignore.clear();
+    opts->retrieve_list("f-texinfo-ignore", &to_ignore);
+    opts->retrieve_list("f-texinfo-ignore-env", &to_ignore_env);
+    
+    reset();
+    return true;
+  }
+  
+  void TexInfoFilter::reset_stack() 
+  {
+    stack.clear();
+    stack.push_back(Command());
+    in_line_command = false;
+    ignore = 0;
+  }
+
+  void TexInfoFilter::reset() 
+  {
+    reset_stack();
+    seen_input = false;
+    env_command.clear();
+    env_ignore = 0;
+    table_stack.clear();
+    table_stack.push_back(Table(""));
+  }
+
+  void TexInfoFilter::process(FilterChar * & str, FilterChar * & stop)
+  {
+    FilterChar * cur = str;
+
+    while (cur != stop) {
+
+      if (*cur == ' ') {
+
+        ++cur;
+
+      } else if (*cur == '@') {
+
+        *cur = ' ';
+        ++cur;
+        if (cur == stop) break;
+        if (asc_isalpha(*cur)) {
+
+          bool was_table = last_command == table_stack.back().name
+            && (last_command == "table" || last_command == "ftable" 
+                || last_command == "vtable");
+
+          last_command.clear();
+          while (cur != stop && asc_isalpha(*cur)) {
+            last_command += *cur;
+            *cur = ' ';
+            ++cur;
+          }
+
+          if (env_ignore) {
+
+            // do nothing
+
+          } else if (was_table) {
+
+            if (to_ignore.have(last_command))
+              table_stack.back().ignore_item = true;
+
+          } else {
+            
+            if (cur == stop || *cur != '{')
+              in_line_command = true;
+            else
+              ++cur;
+            
+            if (to_ignore.have(last_command) 
+                || (table_stack.back().ignore_item 
+                    && (last_command == "item" || last_command == "itemx")))
+            {
+              stack.push_back(Command(true));
+              ++ignore;
+            } else {
+              stack.push_back(Command(false));
+            }
+            
+            if (last_command == "end") {
+              // do nothing as end command is special
+            } else if (env_command.empty() && to_ignore_env.have(last_command)) {
+              env_command = last_command;
+              env_ignore = 1;
+            } else if (env_command == last_command) {
+              env_ignore++;
+            } else if (last_command.suffix("table")) {
+              table_stack.push_back(last_command);
+            }
+
+          }
+
+        } else {
+
+          *cur = ' ';
+          ++cur;
+      }
+        
+      } else if (!seen_input && *cur == '\\' && stop - cur >= 6 
+                 && cur[1] == 'i' && cur[2] == 'n' && cur[3] == 'p' 
+                 && cur[4] == 'u' && cur[5] == 't') {
+        
+        last_command.clear();
+        for (int i = 0; i != 6; ++i)
+          *cur++ = ' ';
+        stack.push_back(Command(true));
+        ++ignore;
+        in_line_command = true;
+        seen_input = true;
+        ++cur;
+
+      } else if (last_command == "end") {
+
+        last_command.clear();
+
+        while (cur != stop && asc_isalpha(*cur)) {
+          last_command += *cur;
+          *cur = ' ';
+          ++cur;
+        }
+
+        if (last_command == env_command) {
+
+          --env_ignore;
+          if (env_ignore <= 0) {
+            env_ignore = 0;
+            env_command.clear();
+          }
+
+        } else if (last_command == table_stack.back().name) {
+
+          table_stack.pop_back();
+          if (table_stack.empty()) table_stack.push_back(Table(""));
+
+        }
+
+        last_command.clear();
+        
+      } else {
+
+        last_command.clear();
+        if (*cur == '{') {
+          stack.push_back(Command());
+        } else if (*cur == '}') {
+          if (stack.back().ignore) {
+            --ignore;
+            if (ignore < 0) ignore = 0;
+          }
+          stack.pop_back();
+          if (stack.empty())
+            stack.push_back(Command());
+        } else if (in_line_command && *cur == '\n') {
+          reset_stack();
+        } else if (ignore || env_ignore) {
+          *cur = ' ';
+        }
+        ++cur;
+
+      }
+
+    }
+  }
+
+}
+
+C_EXPORT 
+IndividualFilter * new_aspell_texinfo_filter() {return new TexInfoFilter;}
+
diff --git a/modules/filter/url-filter.info b/modules/filter/url-filter.info
new file mode 100644 (file)
index 0000000..3a12c3e
--- /dev/null
@@ -0,0 +1,9 @@
+# URL filter option file
+
+#This Filter is usable with the following version(s) of Aspell
+ASPELL >=0.50
+
+#This line will be printed when typing `aspell help url'
+DESCRIPTION filter to skip URL like constructs
+
+STATIC filter
diff --git a/modules/filter/url.cpp b/modules/filter/url.cpp
new file mode 100644 (file)
index 0000000..fcf8882
--- /dev/null
@@ -0,0 +1,66 @@
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "settings.h"
+#include "indiv_filter.hpp"
+#include "key_info.hpp"
+
+namespace {
+  using namespace acommon;
+
+  class UrlFilter : public IndividualFilter {
+  public:
+    PosibErr<bool> setup(Config *);
+    void reset() {}
+    void process(FilterChar * &, FilterChar * &);
+  };
+
+  PosibErr<bool> UrlFilter::setup(Config *) 
+  {
+    name_ = "url-filter";
+    order_num_ = 0.95;
+    return true;
+  }
+
+  static bool url_char(char c)
+  {
+    return c != '"' && c != ' ' && c != '\n' && c != '\t';
+  }
+  void UrlFilter::process(FilterChar * & str, FilterChar * & end)
+  {
+    for (FilterChar * cur = str; cur < end; ++cur) 
+    {
+      if (!url_char(*cur)) continue;
+      FilterChar * cur0 = cur;
+      bool blank_out = false;
+      int point_chars = 0;
+      // only consider special url deciding characters if they are in
+      // the middle of a word
+      for (++cur; cur + 1 < end && url_char(cur[1]); ++cur) {
+        if (blank_out) continue;
+        if ((cur[0] == '/' && (point_chars > 0 || cur[1] == '/'))
+            || cur[0] == '@') {
+          blank_out = true;
+        } else if (cur[0] == '.' && cur[1] != '.') { 
+          // count multiple '.' as one
+          if (point_chars < 1) ++point_chars;
+          else                 blank_out = true;
+        }
+      }
+      ++cur;
+      if (blank_out) {
+       for (; cur0 != cur; ++cur0) *cur0 = ' ';
+      }
+    }
+  }
+}
+
+C_EXPORT 
+IndividualFilter * new_aspell_url_filter() {
+  return new UrlFilter;                                
+}
+
diff --git a/modules/speller/Makefile.in b/modules/speller/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/modules/speller/default/Makefile.in b/modules/speller/default/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/modules/speller/default/affix.cpp b/modules/speller/default/affix.cpp
new file mode 100644 (file)
index 0000000..2562c24
--- /dev/null
@@ -0,0 +1,1439 @@
+// This file is part of The New Aspell
+// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+//
+// This code is based on the the MySpell affix code:
+//
+/*
+ * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada And
+ * Contributors.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. All modifications to the source code must be clearly marked as
+ *    such.  Binary redistributions based on modified source code
+ *    must be clearly marked as modified versions in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+
+//#include "iostream.hpp"
+
+#include "affix.hpp"
+#include "errors.hpp"
+#include "getdata.hpp"
+#include "parm_string.hpp"
+#include "check_list.hpp"
+#include "speller_impl.hpp"
+#include "vararray.hpp"
+#include "lsort.hpp"
+#include "hash-t.hpp"
+
+#include "gettext.h"
+
+using namespace std;
+
+namespace aspeller {
+
+typedef unsigned char byte;
+static char EMPTY[1] = {0};
+
+//////////////////////////////////////////////////////////////////////
+//
+// Entry struct definations
+//
+
+struct Conds
+{
+  char * str;
+  unsigned num;
+  char conds[SETSIZE];
+  char get(byte i) const {return conds[i];}
+};
+
+struct AffEntry
+{
+  const char *   appnd;
+  const char *   strip;
+  byte           appndl;
+  byte           stripl;
+  byte           xpflg;
+  char           achar;
+  const Conds *  conds;
+  //unsigned int numconds;
+  //char         conds[SETSIZE];
+};
+
+// A Prefix Entry
+  
+struct PfxEntry : public AffEntry
+{
+  PfxEntry * next;
+  PfxEntry * next_eq;
+  PfxEntry * next_ne;
+  PfxEntry * flag_next;
+  PfxEntry() {}
+
+  bool check(const LookupInfo &, const AffixMgr * pmyMgr,
+             ParmString, CheckInfo &, GuessInfo *, bool cross = true) const;
+
+  inline bool          allow_cross() const { return ((xpflg & XPRODUCT) != 0); }
+  inline byte flag() const { return achar;  }
+  inline const char *  key() const  { return appnd;  }
+  bool applicable(SimpleString) const;
+  SimpleString add(SimpleString, ObjStack & buf) const;
+};
+
+// A Suffix Entry
+
+struct SfxEntry : public AffEntry
+{
+  const char * rappnd; // this is set in AffixMgr::build_sfxlist
+  
+  SfxEntry *   next;
+  SfxEntry *   next_eq;
+  SfxEntry *   next_ne;
+  SfxEntry *   flag_next;
+
+  SfxEntry() {}
+
+  bool check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *,
+             int optflags, AffEntry * ppfx);
+
+  inline bool          allow_cross() const { return ((xpflg & XPRODUCT) != 0); }
+  inline byte flag() const { return achar;  }
+  inline const char *  key() const  { return rappnd; } 
+  bool applicable(SimpleString) const;
+  SimpleString add(SimpleString, ObjStack & buf, int limit, SimpleString) const;
+};
+
+//////////////////////////////////////////////////////////////////////
+//
+// Utility functions declarations
+//
+
+/* return 1 if s1 is subset of s2 */
+static bool isSubset(const char * s1, const char * s2)
+{
+  while( *s1 && (*s1 == *s2) ) {
+    s1++;
+    s2++;
+  }
+  return (*s1 == '\0');
+}
+
+// return 1 if s1 (reversed) is a leading subset of end of s2
+static bool isRevSubset(const char * s1, const char * end_of_s2, int len)
+{
+  while( (len > 0) && *s1 && (*s1 == *end_of_s2) ) {
+    s1++;
+    end_of_s2--;
+    len --;
+  }
+  return (*s1 == '\0');
+}
+
+template <class T>
+struct AffixLess
+{
+  bool operator() (T * x, T * y) const {return strcmp(x->key(),y->key()) < 0;}
+};
+
+// struct StringLookup {
+//   struct Parms {
+//     typedef const char * Value;
+//     typedef const char * Key;
+//     static const bool is_multi = false;
+//     hash<const char *> hfun;
+//     size_t hash(const char * s) {return hfun(s);}
+//     bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;}
+//     const char * key(const char * c) {return c;}
+//   };
+//   typedef HashTable<Parms> Lookup;
+//   Lookup lookup;
+//   ObjStack * data_buf;
+//   StringLookup(ObjStack * b) : data_buf(b) {}
+//   const char * dup(const char * orig) {
+//     pair<Lookup::iterator, bool> res = lookup.insert(orig);
+//     if (res.second) *res.first = data_buf->dup(orig);
+//     return *res.first;
+//     //return data_buf->dup(orig);
+//   }
+// };
+
+struct CondsLookupParms {
+  typedef const Conds * Value;
+  typedef const char * Key;
+  static const bool is_multi = false;
+  acommon::hash<const char *> hfun;
+  size_t hash(const char * s) {return hfun(s);}
+  bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;}
+  const char * key(const Conds * c) {return c->str;}
+};
+
+typedef HashTable<CondsLookupParms> CondsLookup;
+
+// normalizes and checks the cond_str
+// returns the lenth of the new string or -1 if invalid
+static int normalize_cond_str(char * str)
+{
+  char * s = str;
+  char * d = str;
+  while (*s) {
+    if (*s != '[') {
+      *d++ = *s++;
+    } else if (s[1] == '\0' || s[1] == ']') {
+      return -1;
+    } else if (s[2] == ']') {
+      *d++ = s[1];
+      s += 3;
+    } else {
+      *d++ = *s++;
+      if (*s == '^') *d++ = *s++;
+      while (*s != ']') {
+        if (*s == '\0' || *s == '[') return -1;
+        char * min = s;
+        for (char * i = s + 1; *i != ']'; ++i) {
+          if ((byte)*i < (byte)*min) min = i;}
+        char c = *s;
+        *d++ = *min;
+        *min = c;
+        ++s;
+      }
+      *d++ = *s++;
+    }
+  }
+  *d = '\0';
+  return d - str;
+}
+
+static void encodeit(CondsLookup &, ObjStack &, 
+                     AffEntry * ptr, char * cs);
+
+//////////////////////////////////////////////////////////////////////
+//
+// Affix Manager
+//
+
+PosibErr<void> AffixMgr::setup(ParmString affpath, Conv & iconv)
+{
+  // register hash manager and load affix data from aff file
+  //cpdmin = 3;  // default value
+  max_strip_ = 0;
+  for (int i=0; i < SETSIZE; i++) {
+    pStart[i] = NULL;
+    sStart[i] = NULL;
+    pFlag[i] = NULL;
+    sFlag[i] = NULL;
+    max_strip_f[i] = 0;
+  }
+  return parse_file(affpath, iconv);
+}
+
+AffixMgr::AffixMgr(const Language * l) 
+  : lang(l), data_buf(1024*16) {}
+
+AffixMgr::~AffixMgr() {}
+
+static inline void max_(int & lhs, int rhs) 
+{
+  if (lhs < rhs) lhs = rhs;
+}
+
+// read in aff file and build up prefix and suffix entry objects 
+PosibErr<void> AffixMgr::parse_file(const char * affpath, Conv & iconv)
+{
+  // io buffers
+  String buf; DataPair dp;
+
+  CondsLookup conds_lookup;
+  // open the affix file
+  affix_file = data_buf.dup(affpath);
+  FStream afflst;
+  RET_ON_ERR(afflst.open(affpath,"r"));
+
+  // step one is to parse the affix file building up the internal
+  // affix data structures
+
+  // read in each line ignoring any that do not
+  // start with a known line type indicator
+
+  char prev_aff = '\0';
+
+  while (getdata_pair(afflst,dp,buf)) {
+    char affix_type = ' ';
+
+    /* parse in the name of the character set used by the .dict and .aff */
+
+    if (dp.key == "SET") {
+      String buf;
+      encoding = data_buf.dup(fix_encoding_str(dp.value, buf));
+      if (strcmp(encoding, lang->data_encoding()) != 0)
+        return make_err(incorrect_encoding, affix_file, lang->data_encoding(), encoding);
+    }
+
+    /* parse in the flag used by the controlled compound words */
+    //else if (d.key == "COMPOUNDFLAG")
+    //  compound = data_buf.dup(d.value);
+
+    /* parse in the flag used by the controlled compound words */
+    //else if (d.key == "COMPOUNDMIN")
+    //  cpdmin = atoi(d.value); // FiXME
+
+    //else if (dp.key == "TRY" || dp.key == "REP");
+
+    else if (dp.key == "PFX" || dp.key == "SFX")
+      affix_type = dp.key[0];
+
+    if (affix_type == ' ') continue;
+
+    //
+    // parse this affix: P - prefix, S - suffix
+    //
+
+    int numents = 0;      // number of affentry structures to parse
+    char achar='\0';      // affix char identifier
+    short xpflg=0;
+    AffEntry * nptr;
+    {
+      // split affix header line into pieces
+      split(dp);
+      if (dp.key.empty()) goto error;
+      // key is affix char
+      const char * astr = iconv(dp.key);
+      if (astr[0] == '\0' || astr[1] != '\0') goto error;
+      achar = astr[0];
+      if (achar == prev_aff) goto error_count;
+      prev_aff = achar;
+
+      split(dp);
+      if (dp.key.size != 1 || 
+          !(dp.key[0] == 'Y' || dp.key[0] == 'N')) goto error;
+      // key is cross product indicator 
+      if (dp.key[0] == 'Y') xpflg = XPRODUCT;
+    
+      split(dp);
+      if (dp.key.empty()) goto error;
+      // key is number of affentries
+      
+      numents = atoi(dp.key); 
+  
+      for (int j = 0; j < numents; j++) {
+        getdata_pair(afflst, dp, buf);
+
+        if (affix_type == 'P') {
+          nptr = (AffEntry *) data_buf.alloc_bottom(sizeof(PfxEntry));
+          new (nptr) PfxEntry;
+        } else {
+          nptr = (AffEntry *) data_buf.alloc_bottom(sizeof(SfxEntry));
+          new (nptr) SfxEntry;
+        }
+
+        nptr->xpflg = xpflg;
+
+        split(dp);
+        if (dp.key.empty()) goto error;
+        // key is affix charter
+        if (iconv(dp.key)[0] != achar) goto error_count;
+        nptr->achar = achar;
+        split(dp);
+        if (dp.key.empty()) goto error;
+        // key is strip 
+        if (dp.key != "0") {
+          ParmString s0(iconv(dp.key));
+          max_(max_strip_, s0.size());
+          max_(max_strip_f[(byte)achar], s0.size());
+          nptr->strip = data_buf.dup(s0);
+          nptr->stripl = s0.size();
+        } else {
+          nptr->strip  = "";
+          nptr->stripl = 0;
+        }
+    
+        split(dp);
+        if (dp.key.empty()) goto error;
+        // key is affix string or 0 for null
+        if (dp.key != "0") {
+          nptr->appnd  = data_buf.dup(iconv(dp.key));
+          nptr->appndl = strlen(nptr->appnd);
+        } else {
+          nptr->appnd  = "";
+          nptr->appndl = 0;
+        }
+    
+        split(dp);
+        if (dp.key.empty()) goto error;
+        // key is the conditions descriptions
+        char * cond = iconv(dp.key);
+        int cond_len = normalize_cond_str(cond);
+        if (cond_len < 0)
+          return (make_err(invalid_cond, MsgConv(lang)(cond))
+                  .with_file(affix_file, dp.line_num));
+        if (nptr->stripl != 0) {
+          char * cc = cond;
+          if (affix_type == 'S') cc += cond_len - nptr->stripl;
+          if (cond_len < nptr->stripl || 
+              memcmp(cc, nptr->strip, nptr->stripl) != 0)
+            return (make_err(invalid_cond_strip, 
+                             MsgConv(lang)(cond), MsgConv(lang)(nptr->strip))
+                    .with_file(affix_file, dp.line_num));
+        }
+        encodeit(conds_lookup, data_buf, nptr, cond);
+    
+        // now create SfxEntry or PfxEntry objects and use links to
+        // build an ordered (sorted by affix string) list
+        if (affix_type == 'P')
+          build_pfxlist(static_cast<PfxEntry *>(nptr));
+        else
+          build_sfxlist(static_cast<SfxEntry *>(nptr)); 
+      }
+    }
+    continue;
+  error:
+    return make_err(corrupt_affix, MsgConv(lang)(achar)).with_file(affix_file, dp.line_num);
+  error_count:
+    return make_err(corrupt_affix, MsgConv(lang)(achar), 
+                    _("Possibly incorrect count.")).with_file(affix_file, dp.line_num);
+  }
+  afflst.close();
+
+  // now we can speed up performance greatly taking advantage of the 
+  // relationship between the affixes and the idea of "subsets".
+
+  // View each prefix as a potential leading subset of another and view
+  // each suffix (reversed) as a potential trailing subset of another.
+
+  // To illustrate this relationship if we know the prefix "ab" is
+  // found in the word to examine, only prefixes that "ab" is a
+  // leading subset of need be examined.  Furthermore is "ab" is not
+  // present then none of the prefixes that "ab" is is a subset need
+  // be examined.
+
+  // The same argument goes for suffix string that are reversed.
+
+  // Then to top this off why not examine the first char of the word
+  // to quickly limit the set of prefixes to examine (i.e. the
+  // prefixes to examine must be leading supersets of the first
+  // character of the word (if they exist)
+  // To take advantage of this "subset" relationship, we need to add
+  // two links from entry.  One to take next if the current prefix
+  // is found (call it nexteq) and one to take next if the current
+  // prefix is not found (call it nextne).
+
+  // Since we have built ordered lists, all that remains is to
+  // properly intialize the nextne and nexteq pointers that relate
+  // them
+
+  process_pfx_order();
+  process_sfx_order();
+
+  //CERR.printf("%u\n", data_buf.calc_size()/1024);
+
+  return no_err;
+
+}
+
+
+// we want to be able to quickly access prefix information
+// both by prefix flag, and sorted by prefix string itself
+// so we need to set up two indexes
+
+PosibErr<void> AffixMgr::build_pfxlist(PfxEntry* pfxptr)
+{
+  PfxEntry * ptr;
+  PfxEntry * ep = pfxptr;
+
+  // get the right starting point 
+  const char * key = ep->key();
+  const byte flg = ep->flag();
+
+  // first index by flag which must exist
+  ptr = pFlag[flg];
+  ep->flag_next = ptr;
+  pFlag[flg] = ep;
+
+  // next insert the affix string, it will be sorted latter
+
+  byte sp = *((const byte *)key);
+  ptr = pStart[sp];
+  ep->next = ptr;
+  pStart[sp] = ep;
+  return no_err;
+}
+
+// we want to be able to quickly access suffix information
+// both by suffix flag, and sorted by the reverse of the
+// suffix string itself; so we need to set up two indexes
+
+PosibErr<void> AffixMgr::build_sfxlist(SfxEntry* sfxptr)
+{
+  SfxEntry * ptr;
+  SfxEntry * ep = sfxptr;
+  char * tmp = (char *)data_buf.alloc(sfxptr->appndl + 1);
+  sfxptr->rappnd = tmp;
+
+  // reverse the string
+  char * dest = tmp + sfxptr->appndl;
+  *dest-- = 0;
+  const char * src = sfxptr->appnd;
+  for (; dest >= tmp; --dest, ++src)
+    *dest = *src;
+
+  /* get the right starting point */
+  const char * key = ep->key();
+  const byte flg = ep->flag();
+
+  // first index by flag which must exist
+  ptr = sFlag[flg];
+  ep->flag_next = ptr;
+  sFlag[flg] = ep;
+
+  // next insert the affix string, it will be sorted latter
+    
+  byte sp = *((const byte *)key);
+  ptr = sStart[sp];
+  ep->next = ptr;
+  sStart[sp] = ep;
+  return no_err;
+}
+
+
+
+// initialize the PfxEntry links NextEQ and NextNE to speed searching
+PosibErr<void> AffixMgr::process_pfx_order()
+{
+  PfxEntry* ptr;
+
+  // loop through each prefix list starting point
+  for (int i=1; i < SETSIZE; i++) {
+
+    ptr = pStart[i];
+
+    if (ptr && ptr->next)
+      ptr = pStart[i] = sort(ptr, AffixLess<PfxEntry>());
+
+    // look through the remainder of the list
+    //  and find next entry with affix that 
+    // the current one is not a subset of
+    // mark that as destination for NextNE
+    // use next in list that you are a subset
+    // of as NextEQ
+
+    for (; ptr != NULL; ptr = ptr->next) {
+
+      PfxEntry * nptr = ptr->next;
+      for (; nptr != NULL; nptr = nptr->next) {
+        if (! isSubset( ptr->key() , nptr->key() )) break;
+      }
+      ptr->next_ne = nptr;
+      ptr->next_eq = NULL;
+      if ((ptr->next) && isSubset(ptr->key() , 
+                                  (ptr->next)->key())) 
+        ptr->next_eq = ptr->next;
+    }
+
+    // now clean up by adding smart search termination strings
+    // if you are already a superset of the previous prefix
+    // but not a subset of the next, search can end here
+    // so set NextNE properly
+
+    ptr = pStart[i];
+    for (; ptr != NULL; ptr = ptr->next) {
+      PfxEntry * nptr = ptr->next;
+      PfxEntry * mptr = NULL;
+      for (; nptr != NULL; nptr = nptr->next) {
+        if (! isSubset(ptr->key(),nptr->key())) break;
+        mptr = nptr;
+      }
+      if (mptr) mptr->next_ne = NULL;
+    }
+  }
+  return no_err;
+}
+
+
+
+// initialize the SfxEntry links NextEQ and NextNE to speed searching
+PosibErr<void> AffixMgr::process_sfx_order()
+{
+  SfxEntry* ptr;
+
+  // loop through each prefix list starting point
+  for (int i=1; i < SETSIZE; i++) {
+
+    ptr = sStart[i];
+
+    if (ptr && ptr->next)
+      ptr = sStart[i] = sort(ptr, AffixLess<SfxEntry>());
+
+    // look through the remainder of the list
+    //  and find next entry with affix that 
+    // the current one is not a subset of
+    // mark that as destination for NextNE
+    // use next in list that you are a subset
+    // of as NextEQ
+
+    for (; ptr != NULL; ptr = ptr->next) {
+      SfxEntry * nptr = ptr->next;
+      for (; nptr != NULL; nptr = nptr->next) {
+        if (! isSubset(ptr->key(),nptr->key())) break;
+      }
+      ptr->next_ne = nptr;
+      ptr->next_eq = NULL;
+      if ((ptr->next) && isSubset(ptr->key(),(ptr->next)->key())) 
+        ptr->next_eq = ptr->next;
+    }
+
+
+    // now clean up by adding smart search termination strings:
+    // if you are already a superset of the previous suffix
+    // but not a subset of the next, search can end here
+    // so set NextNE properly
+
+    ptr = sStart[i];
+    for (; ptr != NULL; ptr = ptr->next) {
+      SfxEntry * nptr = ptr->next;
+      SfxEntry * mptr = NULL;
+      for (; nptr != NULL; nptr = nptr->next) {
+        if (! isSubset(ptr->key(),nptr->key())) break;
+        mptr = nptr;
+      }
+      if (mptr) mptr->next_ne = NULL;
+    }
+  }
+  return no_err;
+}
+
+// takes aff file condition string and creates the
+// conds array - please see the appendix at the end of the
+// file affentry.cxx which describes what is going on here
+// in much more detail
+
+static void encodeit(CondsLookup & l, ObjStack & buf, 
+                     AffEntry * ptr, char * cs)
+{
+  byte c;
+  int i, j, k;
+
+  // see if we already have this conds matrix
+
+  CondsLookup::iterator itr = l.find(cs);
+  if (!(itr == l.end())) {
+    ptr->conds = *itr;
+    return;
+  }
+
+  Conds * cds = (Conds *)buf.alloc_bottom(sizeof(Conds));
+  cds->str = buf.dup(cs);
+  l.insert(cds);
+  ptr->conds = cds;
+
+  int nc = strlen(cs);
+  VARARRAYM(byte, mbr, nc + 1, MAXLNLEN);
+
+  // now clear the conditions array
+  memset(cds->conds, 0, sizeof(cds->conds));
+
+  // now parse the string to create the conds array
+  
+  int neg = 0;   // complement indicator
+  int grp = 0;   // group indicator
+  int n = 0;     // number of conditions
+  int ec = 0;    // end condition indicator
+  int nm = 0;    // number of member in group
+
+  // if no condition just return
+  if (strcmp(cs,".")==0) {
+    cds->num = 0;
+    return;
+  }
+
+  i = 0;
+  while (i < nc) {
+    c = *((byte *)(cs + i));
+
+    // start group indicator
+    if (c == '[') {
+      grp = 1;
+      c = 0;
+    }
+
+    // complement flag
+    if ((grp == 1) && (c == '^')) {
+      neg = 1;
+      c = 0;
+    }
+
+    // end goup indicator
+    if (c == ']') {
+      ec = 1;
+      c = 0;
+    }
+
+    // add character of group to list
+    if ((grp == 1) && (c != 0)) {
+      *(mbr + nm) = c;
+      nm++;
+      c = 0;
+    }
+
+    // end of condition 
+    if (c != 0) {
+      ec = 1;
+    }
+
+    
+    if (ec) {
+      if (grp == 1) {
+        if (neg == 0) {
+          // set the proper bits in the condition array vals for those chars
+          for (j=0;j<nm;j++) {
+            k = (unsigned int) mbr[j];
+            cds->conds[k] = cds->conds[k] | (1 << n);
+          }
+        } else {
+          // complement so set all of them and then unset indicated ones
+          for (j=0;j<SETSIZE;j++) cds->conds[j] = cds->conds[j] | (1 << n);
+          for (j=0;j<nm;j++) {
+            k = (unsigned int) mbr[j];
+            cds->conds[k] = cds->conds[k] & ~(1 << n);
+          }
+        }
+        neg = 0;
+        grp = 0;   
+        nm = 0;
+      } else {
+        // not a group so just set the proper bit for this char
+        // but first handle special case of . inside condition
+        if (c == '.') {
+          // wild card character so set them all
+          for (j=0;j<SETSIZE;j++) cds->conds[j] = cds->conds[j] | (1 << n);
+        } else {  
+          cds->conds[(unsigned int)c] = cds->conds[(unsigned int)c] | (1 << n);
+        }
+      }
+      n++;
+      ec = 0;
+    }
+
+
+    i++;
+  }
+  cds->num = n;
+  return;
+}
+
+
+// check word for prefixes
+bool AffixMgr::prefix_check (const LookupInfo & linf, ParmString word, 
+                             CheckInfo & ci, GuessInfo * gi, bool cross) const
+{
+  // first handle the special case of 0 length prefixes
+  PfxEntry * pe = pStart[0];
+  while (pe) {
+    if (pe->check(linf,this,word,ci,gi)) return true;
+    pe = pe->next;
+  }
+  
+  // now handle the general case
+  byte sp = *reinterpret_cast<const byte *>(word.str());
+  PfxEntry * pptr = pStart[sp];
+
+  while (pptr) {
+    if (isSubset(pptr->key(),word)) {
+      if (pptr->check(linf,this,word,ci,gi,cross)) return true;
+      pptr = pptr->next_eq;
+    } else {
+      pptr = pptr->next_ne;
+    }
+  }
+    
+  return false;
+}
+
+
+// check word for suffixes
+bool AffixMgr::suffix_check (const LookupInfo & linf, ParmString word, 
+                             CheckInfo & ci, GuessInfo * gi,
+                             int sfxopts, AffEntry * ppfx) const
+{
+
+  // first handle the special case of 0 length suffixes
+  SfxEntry * se = sStart[0];
+  while (se) {
+    if (se->check(linf, word, ci, gi, sfxopts, ppfx)) return true;
+    se = se->next;
+  }
+  
+  // now handle the general case
+  byte sp = *((const byte *)(word + word.size() - 1));
+  SfxEntry * sptr = sStart[sp];
+
+  while (sptr) {
+    if (isRevSubset(sptr->key(), word + word.size() - 1, word.size())) {
+      if (sptr->check(linf, word, ci, gi, sfxopts, ppfx)) return true;
+      sptr = sptr->next_eq;
+    } else {
+      sptr = sptr->next_ne;
+    }
+  }
+    
+  return false;
+}
+
+// check if word with affixes is correctly spelled
+bool AffixMgr::affix_check(const LookupInfo & linf, ParmString word, 
+                           CheckInfo & ci, GuessInfo * gi) const
+{
+  // Deal With Case in a semi-intelligent manner
+  CasePattern cp = lang->LangImpl::case_pattern(word);
+  ParmString pword = word;
+  ParmString sword = word;
+  CharVector lower;
+  if (cp == FirstUpper) {
+    lower.append(word, word.size() + 1);
+    lower[0] = lang->to_lower(word[0]);
+    pword = ParmString(lower.data(), lower.size() - 1);
+  } else if (cp == AllUpper) {
+    lower.resize(word.size() + 1);
+    unsigned int i = 0;
+    for (; i != word.size(); ++i)
+      lower[i] = lang->to_lower(word[i]);
+    lower[i] = '\0';
+    pword = ParmString(lower.data(), lower.size() - 1);
+    sword = pword;
+  }
+
+  // check all prefixes (also crossed with suffixes if allowed) 
+  if (prefix_check(linf, pword, ci, gi)) return true;
+
+  // if still not found check all suffixes
+  if (suffix_check(linf, sword, ci, gi, 0, NULL)) return true;
+
+  // if still not found check again but with the lower case version
+  // which can make a difference if the entire word matches the cond
+  // string
+  if (cp == FirstUpper) {
+    return suffix_check(linf, pword, ci, gi, 0, NULL);
+  } else {
+    return false;
+  }
+}
+
+void AffixMgr::munch(ParmString word, GuessInfo * gi, bool cross) const
+{
+  LookupInfo li(0, LookupInfo::AlwaysTrue);
+  CheckInfo ci;
+  gi->reset();
+  CasePattern cp = lang->LangImpl::case_pattern(word);
+  if (cp == AllUpper) return;
+  if (cp != FirstUpper)
+    prefix_check(li, word, ci, gi, cross);
+  suffix_check(li, word, ci, gi, 0, NULL);
+}
+
+WordAff * AffixMgr::expand(ParmString word, ParmString aff, 
+                           ObjStack & buf, int limit) const
+{
+  byte * empty = (byte *)buf.alloc(1);
+  *empty = 0;
+
+  byte * suf  = (byte *)buf.alloc(aff.size() + 1); 
+  byte * suf_e = suf;
+  byte * csuf = (byte *)buf.alloc(aff.size() + 1); 
+  byte * csuf_e = csuf;
+
+  WordAff * head = (WordAff *)buf.alloc_bottom(sizeof(WordAff));
+  WordAff * cur = head;
+  cur->word = buf.dup(word);
+  cur->aff  = suf;
+
+  for (const byte * c = (const byte *)aff.str(), * end = c + aff.size();
+       c != end; 
+       ++c) 
+  {
+    if (sFlag[*c]) *suf_e++ = *c; 
+    if (sFlag[*c] && sFlag[*c]->allow_cross()) *csuf_e++ = *c;
+    
+    for (PfxEntry * p = pFlag[*c]; p; p = p->flag_next) {
+      SimpleString newword = p->add(word, buf);
+      if (!newword) continue;
+      cur->next = (WordAff *)buf.alloc_bottom(sizeof(WordAff));
+      cur = cur->next;
+      cur->word = newword;
+      cur->aff = p->allow_cross() ? csuf : empty;
+    }
+  }
+
+  *suf_e = 0;
+  *csuf_e = 0;
+  cur->next = 0;
+
+  if (limit == 0) return head;
+
+  WordAff * * end = &cur->next;
+  WordAff * * very_end = end;
+  size_t nsuf_s = suf_e - suf + 1;
+
+  for (WordAff * * cur = &head; cur != end; cur = &(*cur)->next) {
+    if ((int)(*cur)->word.size - max_strip_ >= limit) continue;
+    byte * nsuf = (byte *)buf.alloc(nsuf_s);
+    expand_suffix((*cur)->word, (*cur)->aff, buf, limit, nsuf, &very_end, word);
+    (*cur)->aff = nsuf;
+  }
+
+  return head;
+}
+
+WordAff * AffixMgr::expand_suffix(ParmString word, const byte * aff, 
+                                  ObjStack & buf, int limit,
+                                  byte * new_aff, WordAff * * * l,
+                                  ParmString orig_word) const
+{
+  WordAff * head = 0;
+  if (l) head = **l;
+  WordAff * * cur = l ? *l : &head;
+  bool expanded     = false;
+  bool not_expanded = false;
+  if (!orig_word) orig_word = word;
+
+  while (*aff) {
+    if ((int)word.size() - max_strip_f[*aff] < limit) {
+      for (SfxEntry * p = sFlag[*aff]; p; p = p->flag_next) {
+        SimpleString newword = p->add(word, buf, limit, orig_word);
+        if (!newword) continue;
+        if (newword == EMPTY) {not_expanded = true; continue;}
+        *cur = (WordAff *)buf.alloc_bottom(sizeof(WordAff));
+        (*cur)->word = newword;
+        (*cur)->aff  = (const byte *)EMPTY;
+        cur = &(*cur)->next;
+        expanded = true;
+      }
+    }
+    if (new_aff && (!expanded || not_expanded)) *new_aff++ = *aff;
+    ++aff;
+  }
+  *cur = 0;
+  if (new_aff) *new_aff = 0;
+  if (l) *l = cur;
+  return head;
+}
+
+CheckAffixRes AffixMgr::check_affix(ParmString word, char aff) const
+{
+  CheckAffixRes res = InvalidAffix;
+  
+  for (PfxEntry * p = pFlag[(unsigned char)aff]; p; p = p->flag_next) {
+    res = InapplicableAffix;
+    if (p->applicable(word)) return ValidAffix;
+  }
+
+  for (SfxEntry * p = sFlag[(unsigned char)aff]; p; p = p->flag_next) {
+    if (res == InvalidAffix) res = InapplicableAffix;
+    if (p->applicable(word)) return ValidAffix;
+  }
+
+  return res;
+}
+
+
+
+//////////////////////////////////////////////////////////////////////
+//
+// LookupInfo
+//
+
+int LookupInfo::lookup (ParmString word, const SensitiveCompare * c, 
+                        char achar, 
+                        WordEntry & o, GuessInfo * gi) const
+{
+  SpellerImpl::WS::const_iterator i = begin;
+  const char * g = 0;
+  if (mode == Word) {
+    do {
+      (*i)->lookup(word, c, o);
+      for (;!o.at_end(); o.adv()) {
+        if (TESTAFF(o.aff, achar))
+          return 1;
+        else
+          g = o.word;
+      }
+      ++i;
+    } while (i != end);
+  } else if (mode == Clean) {
+    do {
+      (*i)->clean_lookup(word, o);
+      for (;!o.at_end(); o.adv()) {
+        if (TESTAFF(o.aff, achar))
+          return 1;
+        else
+          g = o.word;
+      }
+      ++i;
+    } while (i != end);
+  } else if (gi) {
+    g = gi->dup(word);
+  }
+  if (gi && g) {
+    CheckInfo * ci = gi->add();
+    ci->word = g;
+    return -1;
+  }
+  return 0;
+}
+
+//////////////////////////////////////////////////////////////////////
+//
+// Affix Entry
+//
+
+bool PfxEntry::applicable(SimpleString word) const
+{
+  unsigned int cond;
+  /* make sure all conditions match */
+  if ((word.size > stripl) && (word.size >= conds->num)) {
+    const byte * cp = (const byte *) word.str;
+    for (cond = 0;  cond < conds->num;  cond++) {
+      if ((conds->get(*cp++) & (1 << cond)) == 0)
+        break;
+    }
+    if (cond >= conds->num) return true;
+  }
+  return false;
+}
+
+// add prefix to this word assuming conditions hold
+SimpleString PfxEntry::add(SimpleString word, ObjStack & buf) const
+{
+  unsigned int cond;
+  /* make sure all conditions match */
+  if ((word.size > stripl) && (word.size >= conds->num)) {
+    const byte * cp = (const byte *) word.str;
+    for (cond = 0;  cond < conds->num;  cond++) {
+      if ((conds->get(*cp++) & (1 << cond)) == 0)
+        break;
+    }
+    if (cond >= conds->num) {
+      /* */
+      int alen = word.size - stripl;
+      char * newword = (char *)buf.alloc(alen + appndl + 1);
+      if (appndl) memcpy(newword, appnd, appndl);
+      memcpy(newword + appndl, word + stripl, alen + 1);
+      return SimpleString(newword, alen + appndl);
+    }
+  }
+  return SimpleString();
+}
+
+// check if this prefix entry matches 
+bool PfxEntry::check(const LookupInfo & linf, const AffixMgr * pmyMgr,
+                     ParmString word,
+                     CheckInfo & ci, GuessInfo * gi, bool cross) const
+{
+  unsigned int         cond;   // condition number being examined
+  unsigned              tmpl;   // length of tmpword
+  WordEntry             wordinfo;     // hash entry of root word or NULL
+  byte *       cp;             
+  VARARRAYM(char, tmpword, word.size()+stripl+1, MAXWORDLEN+1);
+
+  // on entry prefix is 0 length or already matches the beginning of the word.
+  // So if the remaining root word has positive length
+  // and if there are enough chars in root word and added back strip chars
+  // to meet the number of characters conditions, then test it
+
+  tmpl = word.size() - appndl;
+
+  if ((tmpl > 0) &&  (tmpl + stripl >= conds->num)) {
+
+    // generate new root word by removing prefix and adding
+    // back any characters that would have been stripped
+
+    if (stripl) strcpy (tmpword, strip);
+    strcpy ((tmpword + stripl), (word + appndl));
+
+    // now make sure all of the conditions on characters
+    // are met.  Please see the appendix at the end of
+    // this file for more info on exactly what is being
+    // tested
+
+    cp = (byte *)tmpword;
+    for (cond = 0;  cond < conds->num;  cond++) {
+      if ((conds->get(*cp++) & (1 << cond)) == 0) break;
+    }
+
+    // if all conditions are met then check if resulting
+    // root word in the dictionary
+
+    if (cond >= conds->num) {
+      CheckInfo * lci = 0;
+      CheckInfo * guess = 0;
+      tmpl += stripl;
+
+      int res = linf.lookup(tmpword, &linf.sp->s_cmp_end, achar, wordinfo, gi);
+
+      if (res == 1) {
+
+        lci = &ci;
+        lci->word = wordinfo.word;
+        goto quit;
+        
+      } else if (res == -1) {
+
+        guess = gi->head;
+
+      }
+      
+      // prefix matched but no root word was found 
+      // if XPRODUCT is allowed, try again but now 
+      // cross checked combined with a suffix
+      
+      if (gi)
+        lci = gi->head;
+      
+      if (cross && xpflg & XPRODUCT) {
+        if (pmyMgr->suffix_check(linf, ParmString(tmpword, tmpl), 
+                                 ci, gi,
+                                 XPRODUCT, (AffEntry *)this)) {
+          lci = &ci;
+          
+        } else if (gi) {
+          
+          CheckInfo * stop = lci;
+          for (lci = gi->head; 
+               lci != stop; 
+               lci = const_cast<CheckInfo *>(lci->next)) 
+          {
+            lci->pre_flag = achar;
+            lci->pre_strip_len = stripl;
+            lci->pre_add_len = appndl;
+            lci->pre_add = appnd;
+          }
+          
+        } else {
+          
+          lci = 0;
+          
+        }
+      }
+    
+      if (guess)
+        lci = guess;
+      
+    quit:
+      if (lci) {
+        lci->pre_flag = achar;
+        lci->pre_strip_len = stripl;
+        lci->pre_add_len = appndl;
+        lci->pre_add = appnd;
+      }
+      if (lci == &ci) return true;
+    }
+  }
+  return false;
+}
+
+bool SfxEntry::applicable(SimpleString word) const
+{
+  int cond;
+  /* make sure all conditions match */
+  if ((word.size > stripl) && (word.size >= conds->num)) {
+    const byte * cp = (const byte *) (word + word.size);
+    for (cond = conds->num; --cond >=0; ) {
+      if ((conds->get(*--cp) & (1 << cond)) == 0)
+        break;
+    }
+    if (cond < 0) return true;
+  }
+  return false;
+}
+
+// add suffix to this word assuming conditions hold
+SimpleString SfxEntry::add(SimpleString word, ObjStack & buf, 
+                           int limit, SimpleString orig_word) const
+{
+  int cond;
+  /* make sure all conditions match */
+  if ((orig_word.size > stripl) && (orig_word.size >= conds->num)) {
+    const byte * cp = (const byte *) (orig_word + orig_word.size);
+    for (cond = conds->num; --cond >=0; ) {
+      if ((conds->get(*--cp) & (1 << cond)) == 0)
+        break;
+    }
+    if (cond < 0) {
+      int alen = word.size - stripl;
+      if (alen >= limit) return EMPTY;
+      /* we have a match so add suffix */
+      char * newword = (char *)buf.alloc(alen + appndl + 1);
+      memcpy(newword, word, alen);
+      memcpy(newword + alen, appnd, appndl + 1);
+      return SimpleString(newword, alen + appndl);
+    }
+  }
+  return SimpleString();
+}
+
+// see if this suffix is present in the word 
+bool SfxEntry::check(const LookupInfo & linf, ParmString word,
+                     CheckInfo & ci, GuessInfo * gi,
+                     int optflags, AffEntry* ppfx)
+{
+  unsigned              tmpl;           // length of tmpword 
+  int                  cond;            // condition beng examined
+  WordEntry             wordinfo;        // hash entry pointer
+  byte *       cp;
+  VARARRAYM(char, tmpword, word.size()+stripl+1, MAXWORDLEN+1);
+  PfxEntry* ep = (PfxEntry *) ppfx;
+
+  // if this suffix is being cross checked with a prefix
+  // but it does not support cross products skip it
+
+  if ((optflags & XPRODUCT) != 0 &&  (xpflg & XPRODUCT) == 0)
+    return false;
+
+  // upon entry suffix is 0 length or already matches the end of the word.
+  // So if the remaining root word has positive length
+  // and if there are enough chars in root word and added back strip chars
+  // to meet the number of characters conditions, then test it
+
+  tmpl = word.size() - appndl;
+
+  if ((tmpl > 0)  &&  (tmpl + stripl >= conds->num)) {
+
+    // generate new root word by removing suffix and adding
+    // back any characters that would have been stripped or
+    // or null terminating the shorter string
+
+    strcpy (tmpword, word);
+    cp = (byte *)(tmpword + tmpl);
+    if (stripl) {
+      strcpy ((char *)cp, strip);
+      tmpl += stripl;
+      cp = (byte *)(tmpword + tmpl);
+    } else *cp = '\0';
+
+    // now make sure all of the conditions on characters
+    // are met.  Please see the appendix at the end of
+    // this file for more info on exactly what is being
+    // tested
+
+    for (cond = conds->num;  --cond >= 0; ) {
+      if ((conds->get(*--cp) & (1 << cond)) == 0) break;
+    }
+
+    // if all conditions are met then check if resulting
+    // root word in the dictionary
+
+    if (cond < 0) {
+      CheckInfo * lci = 0;
+      tmpl += stripl;
+      const SensitiveCompare * cmp = 
+        optflags & XPRODUCT ? &linf.sp->s_cmp_middle : &linf.sp->s_cmp_begin;
+      int res = linf.lookup(tmpword, cmp, achar, wordinfo, gi);
+      if (res == 1
+          && ((optflags & XPRODUCT) == 0 || TESTAFF(wordinfo.aff, ep->achar)))
+      {
+        lci = &ci;
+        lci->word = wordinfo.word;
+      } else if (res == 1 && gi) {
+        lci = gi->add();
+        lci->word = wordinfo.word;
+      } else if (res == -1) { // gi must be defined
+        lci = gi->head;
+      }
+
+      if (lci) {
+        lci->suf_flag = achar;
+        lci->suf_strip_len = stripl;
+        lci->suf_add_len = appndl;
+        lci->suf_add = appnd;
+      }
+      
+      if (lci == &ci) return true;
+    }
+  }
+  return false;
+}
+
+//////////////////////////////////////////////////////////////////////
+//
+// new_affix_mgr
+//
+
+
+PosibErr<AffixMgr *> new_affix_mgr(ParmString name, 
+                                   Conv & iconv,
+                                   const Language * lang)
+{
+  if (name == "none")
+    return 0;
+  //CERR << "NEW AFFIX MGR\n";
+  String file;
+  file += lang->data_dir();
+  file += '/';
+  file += lang->name();
+  file += "_affix.dat";
+  AffixMgr * affix;
+  affix = new AffixMgr(lang);
+  PosibErrBase pe = affix->setup(file, iconv);
+  if (pe.has_err()) {
+    delete affix;
+    return pe;
+  } else {
+    return affix;
+  }
+}
+}
+
+/**************************************************************************
+
+Appendix:  Understanding Affix Code
+
+
+An affix is either a  prefix or a suffix attached to root words to make 
+other words.
+
+Basically a Prefix or a Suffix is set of AffEntry objects
+which store information about the prefix or suffix along 
+with supporting routines to check if a word has a particular 
+prefix or suffix or a combination.
+
+The structure affentry is defined as follows:
+
+struct AffEntry
+{
+   unsigned char achar;   // char used to represent the affix
+   char * strip;          // string to strip before adding affix
+   char * appnd;          // the affix string to add
+   short  stripl;         // length of the strip string
+   short  appndl;         // length of the affix string
+   short  numconds;       // the number of conditions that must be met
+   short  xpflg;          // flag: XPRODUCT- combine both prefix and suffix 
+   char   conds[SETSIZE]; // array which encodes the conditions to be met
+};
+
+
+Here is a suffix borrowed from the en_US.aff file.  This file 
+is whitespace delimited.
+
+SFX D Y 4 
+SFX D   0     e          d
+SFX D   y     ied        [^aeiou]y
+SFX D   0     ed         [^ey]
+SFX D   0     ed         [aeiou]y
+
+This information can be interpreted as follows:
+
+In the first line has 4 fields
+
+Field
+-----
+1     SFX - indicates this is a suffix
+2     D   - is the name of the character flag which represents this suffix
+3     Y   - indicates it can be combined with prefixes (cross product)
+4     4   - indicates that sequence of 4 affentry structures are needed to
+               properly store the affix information
+
+The remaining lines describe the unique information for the 4 SfxEntry 
+objects that make up this affix.  Each line can be interpreted
+as follows: (note fields 1 and 2 are as a check against line 1 info)
+
+Field
+-----
+1     SFX         - indicates this is a suffix
+2     D           - is the name of the character flag for this affix
+3     y           - the string of chars to strip off before adding affix
+                         (a 0 here indicates the NULL string)
+4     ied         - the string of affix characters to add
+5     [^aeiou]y   - the conditions which must be met before the affix
+                    can be applied
+
+Field 5 is interesting.  Since this is a suffix, field 5 tells us that
+there are 2 conditions that must be met.  The first condition is that 
+the next to the last character in the word must *NOT* be any of the 
+following "a", "e", "i", "o" or "u".  The second condition is that
+the last character of the word must end in "y".
+
+So how can we encode this information concisely and be able to 
+test for both conditions in a fast manner?  The answer is found
+but studying the wonderful ispell code of Geoff Kuenning, et.al. 
+(now available under a normal BSD license).
+
+If we set up a conds array of 256 bytes indexed (0 to 255) and access it
+using a character (cast to an unsigned char) of a string, we have 8 bits
+of information we can store about that character.  Specifically we
+could use each bit to say if that character is allowed in any of the 
+last (or first for prefixes) 8 characters of the word.
+
+Basically, each character at one end of the word (up to the number 
+of conditions) is used to index into the conds array and the resulting 
+value found there says whether the that character is valid for a 
+specific character position in the word.  
+
+For prefixes, it does this by setting bit 0 if that char is valid 
+in the first position, bit 1 if valid in the second position, and so on. 
+
+If a bit is not set, then that char is not valid for that postion in the
+word.
+
+If working with suffixes bit 0 is used for the character closest 
+to the front, bit 1 for the next character towards the end, ..., 
+with bit numconds-1 representing the last char at the end of the string. 
+
+Note: since entries in the conds[] are 8 bits, only 8 conditions 
+(read that only 8 character positions) can be examined at one
+end of a word (the beginning for prefixes and the end for suffixes.
+
+So to make this clearer, lets encode the conds array values for the 
+first two affentries for the suffix D described earlier.
+
+
+  For the first affentry:    
+     numconds = 1             (only examine the last character)
+
+     conds['e'] =  (1 << 0)   (the word must end in an E)
+     all others are all 0
+
+  For the second affentry:
+     numconds = 2             (only examine the last two characters)     
+
+     conds[X] = conds[X] | (1 << 0)     (aeiou are not allowed)
+         where X is all characters *but* a, e, i, o, or u
+         
+
+     conds['y'] = (1 << 1)     (the last char must be a y)
+     all other bits for all other entries in the conds array are zero
+
+
+**************************************************************************/
diff --git a/modules/speller/default/affix.hpp b/modules/speller/default/affix.hpp
new file mode 100644 (file)
index 0000000..5a6f50a
--- /dev/null
@@ -0,0 +1,130 @@
+// This file is part of The New Aspell
+// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+//
+// Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada And
+// Contributors.  All rights reserved.
+//
+
+#ifndef ASPELL_AFFIX__HPP
+#define ASPELL_AFFIX__HPP
+
+#include "posib_err.hpp"
+#include "wordinfo.hpp"
+#include "fstream.hpp"
+#include "parm_string.hpp"
+#include "simple_string.hpp"
+#include "char_vector.hpp"
+#include "objstack.hpp"
+
+#define SETSIZE         256
+#define MAXAFFIXES      256
+#define MAXWORDLEN      255
+#define XPRODUCT        (1 << 0)
+
+#define MAXLNLEN        1024
+
+#define TESTAFF( a , b) strchr(a, b)
+
+namespace acommon {
+  class Config;
+  struct CheckInfo;
+  struct Conv;
+}
+
+namespace aspeller {
+
+  using namespace acommon;
+
+  class Language;
+
+  class SpellerImpl;
+  using acommon::CheckInfo;
+  struct GuessInfo;
+
+  struct LookupInfo;
+  struct AffEntry;
+  struct PfxEntry;
+  struct SfxEntry;
+
+  struct WordAff
+  {
+    SimpleString word;
+    const unsigned char * aff;
+    WordAff * next;
+  };
+
+  enum CheckAffixRes {InvalidAffix, InapplicableAffix, ValidAffix};
+
+  class AffixMgr
+  {
+    const Language * lang;
+
+    PfxEntry *          pStart[SETSIZE];
+    SfxEntry *          sStart[SETSIZE];
+    PfxEntry *          pFlag[SETSIZE];
+    SfxEntry *          sFlag[SETSIZE];
+
+    int max_strip_f[SETSIZE];
+    int max_strip_;
+
+    const char *        encoding;
+    //const char *        compound;
+    //int                 cpdmin;
+
+    ObjStack data_buf;
+
+    const char * affix_file;
+
+  public:
+    AffixMgr(const Language * l);
+    ~AffixMgr();
+
+    unsigned int max_strip() const {return max_strip_;}
+
+    PosibErr<void> setup(ParmString affpath, Conv &);
+
+    bool affix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *) const;
+    bool prefix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *, 
+                      bool cross = true) const;
+    bool suffix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *,
+                      int sfxopts, AffEntry* ppfx) const;
+
+    void munch(ParmString word, GuessInfo *, bool cross = true) const;
+
+    // None of the expand methods reset the objstack
+
+    WordAff * expand(ParmString word, ParmString aff, 
+                     ObjStack &, int limit = INT_MAX) const;
+
+    CheckAffixRes check_affix(ParmString word, char aff) const;
+
+    WordAff * expand_prefix(ParmString word, ParmString aff, 
+                            ObjStack & buf) const 
+    {
+      return expand(word,aff,buf,0);
+    }
+    WordAff * expand_suffix(ParmString word, const unsigned char * aff,
+                            ObjStack &, int limit = INT_MAX,
+                            unsigned char * new_aff = 0, WordAff * * * l = 0,
+                            ParmString orig_word = 0) const;
+    
+  private:
+    PosibErr<void> parse_file(const char * affpath, Conv &);
+
+    PosibErr<void> build_pfxlist(PfxEntry* pfxptr);
+    PosibErr<void> build_sfxlist(SfxEntry* sfxptr);
+    PosibErr<void> process_pfx_order();
+    PosibErr<void> process_sfx_order();
+  };
+
+  PosibErr<AffixMgr *> new_affix_mgr(ParmString name, 
+                                     Conv &,
+                                     const Language * lang);
+}
+
+#endif
+
diff --git a/modules/speller/default/asuggest.hpp b/modules/speller/default/asuggest.hpp
new file mode 100644 (file)
index 0000000..bdb24ea
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef _asuggest_hh_
+#define _asuggest_hh_
+
+#include "suggest.hpp"
+#include "editdist.hpp"
+#include "typo_editdist.hpp"
+#include "cache.hpp"
+
+namespace aspeller {
+  class Speller;
+  class SpellerImpl;
+  class Suggest;
+
+  struct SuggestParms {
+    // implementation at the end of suggest.cc
+
+    EditDistanceWeights     edit_distance_weights;
+    CachePtr<const TypoEditDistanceInfo> ti;
+
+    bool try_one_edit_word, try_scan_1, try_scan_2, try_ngram;
+
+    int ngram_threshold, ngram_keep;
+
+    bool check_after_one_edit_word;
+
+    bool use_typo_analysis;
+    bool use_repl_table;
+
+    int normal_soundslike_weight; // percentage
+
+    int small_word_soundslike_weight; 
+    int small_word_threshold;
+    
+    int soundslike_weight;
+    int word_weight;
+
+    int skip;
+    int span;
+    int limit;
+
+    String split_chars;
+
+    SuggestParms() {}
+    
+    PosibErr<void> set(ParmString mode, SpellerImpl * sp);
+    PosibErr<void> fill_distance_lookup(const Config * c, const Language & l);
+    
+    virtual ~SuggestParms() {}
+    virtual SuggestParms * clone() const;
+    virtual void set_original_word_size(int size);
+  };
+  
+  Suggest * new_default_suggest(const Speller *, const SuggestParms &);
+}
+
+#endif
diff --git a/modules/speller/default/block_vector.hpp b/modules/speller/default/block_vector.hpp
new file mode 100644 (file)
index 0000000..cbeabe5
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (c) 2000
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef __autil_block_vector__
+#define __autil_block_vector__
+
+#include <stddef.h>
+//#include <iterator>
+
+namespace aspeller {
+
+  template <typename T>
+  class BlockVector {
+    T * begin_;
+    T * end_;
+  public:
+    typedef T value_type;
+    typedef size_t    size_type;
+    typedef ptrdiff_t difference_type;
+    typedef T *       iterator;
+    typedef T *       const_iterator;
+    typedef T &       reference;
+    typedef const T & const_reference;
+    typedef T *       pointer;
+    typedef T *       const_pointer;
+    //typedef std::random_access_iterator_tag  iterator_category;
+    typedef ptrdiff_t                        distance_type;
+
+    BlockVector() : begin_(0), end_(0) {}
+    BlockVector(size_type) : begin_(0), end_(0) {} // noop
+    BlockVector(T * b, T * e) : begin_(b), end_(e) {}
+    void set(T * b, T * e) {begin_ = b; end_ = e;}
+    iterator begin() {return begin_;}
+    iterator end()   {return end_;}
+    const_iterator begin() const {return begin_;}
+    const_iterator end()   const {return end_;}
+    size_type size() const {return end_ - begin_;}
+    bool empty() const {return begin_ != end_;}
+    reference operator[](size_type i) {return *(begin_ + i);}
+    const_reference operator[](size_type i) const {return *(begin_ + i);}
+  };
+
+}
+
+#endif
diff --git a/modules/speller/default/check_list.hpp b/modules/speller/default/check_list.hpp
new file mode 100644 (file)
index 0000000..89ddb03
--- /dev/null
@@ -0,0 +1,47 @@
+// This file is part of The New Aspell
+// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#ifndef __aspeller_check_list__
+#define __aspeller_check_list__
+
+#include "objstack.hpp"
+#include "speller.hpp"
+
+namespace aspeller {
+
+  using acommon::CheckInfo;
+
+  static inline void clear_check_info(CheckInfo & ci)
+  {
+    memset(&ci, 0, sizeof(ci));
+  }
+
+  struct GuessInfo
+  {
+    int num;
+    CheckInfo * head;
+    GuessInfo() : num(0), head(0) {}
+    void reset() { buf.reset(); num = 0; head = 0; }
+    CheckInfo * add() {
+      num++;
+      CheckInfo * tmp = (CheckInfo *)buf.alloc_top(sizeof(CheckInfo), 
+                                                   sizeof(void*));
+      clear_check_info(*tmp);
+      tmp->next = head;
+      head = tmp;
+      head->guess = true;
+      return head;
+    }
+    void * alloc(unsigned s) {return buf.alloc_bottom(s);}
+    char * dup(ParmString str) {return buf.dup(str);}
+  private:
+    ObjStack buf;
+  };
+
+
+}
+
+#endif
diff --git a/modules/speller/default/data.cpp b/modules/speller/default/data.cpp
new file mode 100644 (file)
index 0000000..4be5b53
--- /dev/null
@@ -0,0 +1,468 @@
+// This file is part of The New Aspell
+// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include "config.hpp"
+#include "convert.hpp"
+#include "data.hpp"
+#include "data_id.hpp"
+#include "errors.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "language.hpp"
+#include "speller_impl.hpp"
+#include "cache-t.hpp"
+#include "vararray.hpp"
+
+#include "gettext.h"
+
+namespace aspeller {
+
+  GlobalCache<Dictionary> dict_cache("dictionary");
+
+  //
+  // Dict impl
+  //
+
+  Dictionary::Id::Id(Dict * p, const FileName & fn)
+    : ptr(p)
+  {
+    file_name = fn.name;
+#ifdef USE_FILE_INO
+    struct stat s;
+    // the file ,i
+    if (file_name[0] != '\0' && stat(fn.path.c_str(), &s) == 0) {
+      ino = s.st_ino;
+      dev = s.st_dev;
+    } else {
+      ino = 0;
+      dev = 0;
+    }
+#endif
+  }
+
+  bool operator==(const Dictionary::Id & rhs, const Dictionary::Id & lhs)
+  {
+    if (rhs.ptr == 0 || lhs.ptr == 0) {
+      if (rhs.file_name == 0 || lhs.file_name == 0)
+       return false;
+#ifdef USE_FILE_INO
+      return rhs.ino == lhs.ino && rhs.dev == lhs.dev;
+#else
+      return strcmp(rhs.file_name, lhs.file_name) == 0;
+#endif
+    } else {
+      return rhs.ptr == lhs.ptr;
+    }
+  }
+
+  PosibErr<void> Dictionary::attach(const Language &l) {
+    if (lang_ && strcmp(l.name(),lang_->name()) != 0)
+      return make_err(mismatched_language, lang_->name(), l.name());
+    if (!lang_) lang_.copy(&l);
+    copy();
+    return no_err;
+  }
+
+  Dictionary::Dictionary(BasicType t, const char * n)
+    : Cacheable(&dict_cache), lang_(), id_(), 
+      basic_type(t), class_name(n),
+      affix_compressed(false), 
+      invisible_soundslike(false), soundslike_root_only(false),
+      fast_scan(false), fast_lookup(false)
+  {
+    id_.reset(new Id(this));
+  }
+
+  Dictionary::~Dictionary() 
+  {
+  }
+
+  const char *  Dictionary::lang_name() const {
+    return lang_->name();
+  }
+
+  PosibErr<void>  Dictionary::check_lang(ParmString l) {
+    if (l != lang_->name())
+      return make_err(mismatched_language, lang_->name(), l);
+    return no_err;
+  }
+  PosibErr<void> Dictionary::set_check_lang (ParmString l, Config & config)
+  {
+    if (lang_ == 0) {
+      PosibErr<Language *> res = new_language(config, l);
+      if (res.has_err()) return res;
+      lang_.reset(res.data);
+      lang_->set_lang_defaults(config);
+      set_lang_hook(config);
+    } else {
+      if (l != lang_->name())
+       return make_err(mismatched_language, l, lang_->name());
+    }
+    return no_err;
+  }
+
+  void Dictionary::FileName::copy(const FileName & other) 
+  {
+    const_cast<String &      >(path) = other.path;
+    const_cast<const char * &>(name) = path.c_str() + (other.name - other.path.c_str());
+  }
+
+  void Dictionary::FileName::clear()
+  {
+    path  = "";
+    name = path.c_str();
+  }
+
+  void Dictionary::FileName::set(ParmString str) 
+  {
+    path = str;
+    int i = path.size() - 1;
+    while (i >= 0) {
+      if (path[i] == '/' || path[i] == '\\') {
+       ++i;
+       break;
+      }
+      --i;
+    }
+    name = path.c_str() + i;
+  }
+
+  PosibErr<void> Dictionary::set_file_name(ParmString fn) 
+  {
+    file_name_.set(fn);
+    *id_ = Id(this, file_name_);
+    return no_err;
+  }
+
+  PosibErr<void> Dictionary::update_file_info(FStream & f) 
+  {
+#ifdef USE_FILE_INO
+    struct stat s;
+    int ok = fstat(f.file_no(), &s);
+    assert(ok == 0);
+    id_->ino = s.st_ino;
+    id_->dev = s.st_dev;
+#endif
+    return no_err;
+  }
+
+  //
+  // BasicDict
+  //
+
+  class DictStringEnumeration : public StringEnumeration 
+  {
+    ClonePtr<Dict::Enum> real_;
+  public:
+    DictStringEnumeration(Dict::Enum * r) : real_(r) {}
+    
+    bool at_end() const {
+      return real_->at_end();
+    }
+    const char * next() {
+      // FIXME: It's not this simple when affixes are involved
+      WordEntry * w =  real_->next(); 
+      if (!w) return 0;
+      return w->word;
+    }
+    StringEnumeration * clone() const {
+      return new DictStringEnumeration(*this);
+    }
+    void assign(const StringEnumeration * other) {
+      *this = *static_cast<const DictStringEnumeration *>(other);
+    }
+  };
+
+  PosibErr<void> Dictionary::add_repl(ParmString mis, ParmString cor) 
+  {
+    if (!invisible_soundslike) {
+      VARARRAY(char, sl, mis.size() + 1);
+      lang()->LangImpl::to_soundslike(sl, mis.str(), mis.size());
+      return add_repl(mis, cor, sl);
+    } else {
+      return add_repl(mis, cor, "");
+    }
+  }
+
+  PosibErr<void> Dictionary::add(ParmString w) 
+  {
+    if (!invisible_soundslike) {
+      VARARRAY(char, sl, w.size() + 1);
+      lang()->LangImpl::to_soundslike(sl, w.str(), w.size());
+      return add(w, sl);
+    } else {
+      return add(w, "");
+    }
+  }
+
+  //
+  // Default implementation;
+  //
+
+  PosibErr<void> Dictionary::load(ParmString, Config &, 
+                                  DictList *, SpellerImpl *) 
+  {
+    return make_err(unimplemented_method, "load", class_name);
+  }
+  
+  PosibErr<void> Dictionary::merge(ParmString)
+  {
+    return make_err(unimplemented_method, "load", class_name);
+  }
+  
+  PosibErr<void> Dictionary::synchronize() 
+  {
+    return make_err(unimplemented_method, "synchronize", class_name);
+  }
+  
+  PosibErr<void> Dictionary::save_noupdate()
+  {
+    return make_err(unimplemented_method, "save_noupdate", class_name);
+  }
+  
+  PosibErr<void> Dictionary::save_as(ParmString)
+  {
+    return make_err(unimplemented_method, "save_as", class_name);
+  }
+  
+  PosibErr<void> Dictionary::clear() 
+  {
+    return make_err(unimplemented_method, "clear", class_name);
+  }
+
+  StringEnumeration * Dictionary::elements() const
+  {
+    Enum * e = detailed_elements();
+    if (!e) return 0;
+    return new DictStringEnumeration(e);
+  }
+  
+  Dict::Enum * Dictionary::detailed_elements() const
+  {
+    return 0;
+  }
+  
+  Dict::Size   Dictionary::size()     const
+  {
+    if (empty()) return 0;
+    else         return 1;
+  }
+  
+  bool Dictionary::empty()    const 
+  {
+    return false;
+  }
+  
+  bool Dictionary::lookup (ParmString word, const SensitiveCompare *,
+                           WordEntry &) const
+  {
+    return false;
+  }
+  
+  bool Dictionary::clean_lookup(ParmString, WordEntry &) const 
+  {
+    return false;
+  }
+  
+  bool Dictionary::soundslike_lookup(const WordEntry &, WordEntry &) const
+  {
+    return false;
+  }
+  
+  bool Dictionary::soundslike_lookup(ParmString, WordEntry &) const
+  {
+    return false;
+  }
+  
+  SoundslikeEnumeration * Dictionary::soundslike_elements() const
+  {
+    return 0;
+  }
+  
+  PosibErr<void> Dictionary::add(ParmString w, ParmString s) 
+  {
+    return make_err(unimplemented_method, "add", class_name);
+  }
+  
+  PosibErr<void> Dictionary::remove(ParmString w) 
+  {
+    return make_err(unimplemented_method, "remove", class_name);
+  }
+  
+  bool Dictionary::repl_lookup(const WordEntry &, WordEntry &) const 
+  {
+    return false;
+  }
+
+  bool Dictionary::repl_lookup(ParmString, WordEntry &) const 
+  {
+    return false;
+  }
+
+  PosibErr<void> Dictionary::add_repl(ParmString mis, ParmString cor, ParmString s) 
+  {
+    return make_err(unimplemented_method, "add_repl", class_name);
+  }
+  
+  PosibErr<void> Dictionary::remove_repl(ParmString mis, ParmString cor) 
+  {
+    return make_err(unimplemented_method, "remove_repl", class_name);
+  }
+  
+  DictsEnumeration * Dictionary::dictionaries() const 
+  {
+    return 0;
+  }
+
+#define write_conv(s) do { \
+    if (!c) {o << s;} \
+    else {ParmString ss(s); buf.clear(); c->convert(ss.str(), ss.size(), buf); o.write(buf.data(), buf.size());} \
+  } while (false)
+
+  OStream & WordEntry::write (OStream & o,
+                              const Language & l,
+                              Convert * c) const
+  {
+    CharVector buf;
+    write_conv(word);
+    if (aff && *aff) {
+      o << '/';
+      write_conv(aff);
+    }
+    return o;
+  }
+
+  PosibErr<Dict *> add_data_set(ParmString fn,
+                                Config & config,
+                                DictList * new_dicts,
+                                SpellerImpl * speller,
+                                ParmString dir,
+                                DataType allowed)
+  {
+    Dict * res = 0;
+    static const char * suffix_list[] = {"", ".multi", ".alias", 
+                                        ".spcl", ".special",
+                                        ".pws", ".prepl"};
+    FStream in;
+    const char * * suffix;
+    const char * * suffix_end 
+      = suffix_list + sizeof(suffix_list)/sizeof(const char *);
+    String dict_dir = config.retrieve("dict-dir");
+    String true_file_name;
+    Dict::FileName file_name(fn);
+    const char * d = dir;
+    do {
+      if (d == 0) d = dict_dir.c_str();
+      suffix = suffix_list;
+      do {
+       true_file_name = add_possible_dir(d, ParmString(file_name.path)
+                                         + ParmString(*suffix));
+       in.open(true_file_name, "r").ignore_err();
+       ++suffix;
+      } while (!in && suffix != suffix_end);
+      if (d == dict_dir.c_str()) break;
+      d = 0;
+    } while (!in);
+    if (!in) {
+      true_file_name = add_possible_dir(dir ? dir.str() : d, file_name.path);
+      return make_err(cant_read_file, true_file_name);
+    }
+    DataType actual_type;
+    if ((true_file_name.size() > 5
+        && true_file_name.substr(true_file_name.size() - 6, 6) == ".spcl") 
+       ||
+       (true_file_name.size() > 6 
+        && (true_file_name.substr(true_file_name.size() - 6, 6) == ".multi" 
+            || true_file_name.substr(true_file_name.size() - 6, 6) == ".alias")) 
+       ||
+       (true_file_name.size() > 8
+        && true_file_name.substr(true_file_name.size() - 6, 6) == ".special")) 
+    {
+
+      actual_type = DT_Multi;
+
+    } else {
+      
+      char head[32] = {0};
+      in.read(head, 32);
+      if      (strncmp(head, "aspell default speller rowl", 27) ==0)
+       actual_type = DT_ReadOnly;
+      else if (strncmp(head, "personal_repl", 13) == 0)
+       actual_type = DT_WritableRepl;
+      else if (strncmp(head, "personal_ws", 11) == 0)
+       actual_type = DT_Writable;
+      else
+       return make_err(bad_file_format, true_file_name);
+    }
+    
+    if (actual_type & ~allowed)
+      return make_err(bad_file_format, true_file_name
+                     , _("is not one of the allowed types"));
+
+    Dict::FileName id_fn(true_file_name);
+    Dict::Id id(0,id_fn);
+
+    if (speller != 0) {
+      const SpellerDict * d = speller->locate(id);
+      if (d != 0) {
+        return d->dict;
+      }
+    }
+
+    res = 0;
+
+    Lock dict_cache_lock(NULL);
+
+    if (actual_type == DT_ReadOnly) { // try to get it from the cache
+      dict_cache_lock.set(&dict_cache.lock); 
+      res = dict_cache.find(id);
+    }
+
+    if (!res) {
+
+      StackPtr<Dict> w;
+      switch (actual_type) {
+      case DT_ReadOnly: 
+        w = new_default_readonly_dict();
+        break;
+      case DT_Multi:
+        w = new_default_multi_dict();
+        break;
+      case DT_Writable: 
+        w = new_default_writable_dict();
+        break;
+      case DT_WritableRepl:
+        w = new_default_replacement_dict();
+        break;
+      default:
+        abort();
+      }
+
+      RET_ON_ERR(w->load(true_file_name, config, new_dicts, speller));
+
+      if (actual_type == DT_ReadOnly)
+        dict_cache.add(w);
+      
+      res = w.release();
+
+    } else { // actual_type == DT_ReadOnly implied, and hence the lock
+             // is already acquired
+
+      res->copy_no_lock();
+      
+    }
+
+    dict_cache_lock.release();
+
+    if (new_dicts)
+      new_dicts->add(res);
+    
+    return res;
+  }
+
+}
+
diff --git a/modules/speller/default/data.hpp b/modules/speller/default/data.hpp
new file mode 100644 (file)
index 0000000..b25c4ab
--- /dev/null
@@ -0,0 +1,223 @@
+// Copyright 2000,2011 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef ASPELLER_DATA__HPP
+#define ASPELLER_DATA__HPP
+
+#include "ndebug.hpp"
+#include <assert.h>
+
+#include "copy_ptr.hpp"
+#include "enumeration.hpp"
+#include "language.hpp"
+#include "posib_err.hpp"
+#include "string.hpp"
+#include "string_enumeration.hpp"
+#include "word_list.hpp"
+#include "cache.hpp"
+#include "wordinfo.hpp"
+
+using namespace acommon;
+
+namespace acommon {
+  class Config;
+  class FStream;
+  class OStream;
+  class Convert;
+}
+
+namespace aspeller {
+
+  class Dictionary;
+  class DictList;
+  typedef Enumeration<WordEntry *> WordEntryEnumeration;
+  typedef Enumeration<Dictionary *> DictsEnumeration;
+
+  class SoundslikeEnumeration 
+  {
+  public:
+    virtual WordEntry * next(int) = 0;
+    virtual ~SoundslikeEnumeration() {}
+    SoundslikeEnumeration() {}
+  private:
+    SoundslikeEnumeration(const SoundslikeEnumeration &);
+    void operator=(const SoundslikeEnumeration &);
+  };
+
+  class Dictionary : public Cacheable, public WordList {
+    friend class SpellerImpl;
+  private:
+    CachePtr<const Language> lang_;
+    PosibErr<void> attach(const Language &);
+  public:
+    class FileName {
+      void copy(const FileName & other);
+    public:
+      String       path;
+      const char * name;
+      
+      void clear();
+      void set(ParmString);
+      
+      FileName() {clear();}
+      explicit FileName(ParmString str) {set(str);}
+      FileName(const FileName & other) {copy(other);}
+      FileName & operator=(const FileName & other) {copy(other); return *this;}
+    };
+    class Id;
+  protected:
+    CopyPtr<Id> id_;
+    virtual void set_lang_hook(Config &) {}
+    
+  public:
+    typedef Id CacheKey;
+    bool cache_key_eq(const Id &);
+
+    enum BasicType {no_type, basic_dict, replacement_dict, multi_dict};
+    const BasicType basic_type;
+    const char * const class_name;
+
+  protected:
+    Dictionary(BasicType,const char *);
+  public:
+    virtual ~Dictionary();
+
+    const Id & id() {return *id_;}
+    PosibErr<void> check_lang(ParmString lang);
+    PosibErr<void> set_check_lang(ParmString lang, Config &);
+    const LangImpl * lang() const {return lang_;};
+    const Language * language() const {return lang_;};
+    const char * lang_name() const;
+
+  private:
+    FileName file_name_;
+  protected:
+    PosibErr<void> set_file_name(ParmString name);
+    PosibErr<void> update_file_info(FStream & f);
+  public:
+    bool compare(const Dictionary &);
+
+    const char * file_name() const {return file_name_.path.c_str();}
+    // returns any additional dictionaries that are also used
+    virtual PosibErr<void> load(ParmString, Config &, DictList * = 0, 
+                                SpellerImpl * = 0);
+
+    virtual PosibErr<void> merge(ParmString);
+    virtual PosibErr<void> synchronize();
+    virtual PosibErr<void> save_noupdate();
+    virtual PosibErr<void> save_as(ParmString);
+    virtual PosibErr<void> clear();
+
+    bool affix_compressed;
+    bool invisible_soundslike; // true when words are grouped by the
+                               // soundslike but soundslike data is not
+                               // actually stored with the word
+    bool soundslike_root_only; // true when affix compression is used AND
+                               // the stored soundslike corresponds to the
+                               // root word only
+    bool fast_scan;  // can effectly scan for all soundslikes (or
+                     // clean words if have_soundslike is false)
+                     // with an edit distance of 1 or 2
+    bool fast_lookup; // can effectly find all words with a given soundslike
+                      // when the SoundslikeWord is not given
+    
+    typedef WordEntryEnumeration        Enum;
+    typedef const char *                Value;
+    typedef unsigned int                Size;
+
+    StringEnumeration * elements() const;
+
+    virtual Enum * detailed_elements() const;
+    virtual Size   size()     const;
+    virtual bool   empty()    const;
+  
+    virtual bool lookup (ParmString word, const SensitiveCompare *, 
+                         WordEntry &) const;
+    
+    virtual bool clean_lookup(ParmString, WordEntry &) const;
+
+    virtual bool soundslike_lookup(const WordEntry &, WordEntry &) const;
+    virtual bool soundslike_lookup(ParmString, WordEntry & o) const;
+
+    // the elements returned are only guaranteed to remain valid
+    // guaranteed to return all soundslike and all words 
+    // however an individual soundslike may appear multiple
+    // times in the list....
+    virtual SoundslikeEnumeration * soundslike_elements() const;
+
+    virtual PosibErr<void> add(ParmString w, ParmString s);
+    PosibErr<void> add(ParmString w);
+
+    virtual PosibErr<void> remove(ParmString w);
+
+    virtual bool repl_lookup(const WordEntry &, WordEntry &) const;
+    virtual bool repl_lookup(ParmString, WordEntry &) const;
+
+    virtual PosibErr<void> add_repl(ParmString mis, ParmString cor, ParmString s);
+    PosibErr<void> add_repl(ParmString mis, ParmString cor);
+
+    virtual PosibErr<void> remove_repl(ParmString mis, ParmString cor);
+
+    virtual DictsEnumeration * dictionaries() const;
+  };
+
+  typedef Dictionary Dict;
+  typedef Dictionary ReplacementDict;
+  typedef Dictionary MultiDict;
+
+  bool operator==(const Dictionary::Id & rhs, const Dictionary::Id & lhs);
+
+  inline bool operator!=(const  Dictionary::Id & rhs, const Dictionary::Id & lhs)
+  {
+    return !(rhs == lhs);
+  }
+
+  class DictList {
+    // well a stack at the moment but it may eventually become a list
+    // NOT necessarily first in first out
+    Vector<Dict *> data;
+  private:
+    DictList(const DictList &);
+    void operator= (const DictList &);
+  public:
+    // WILL take ownership of the dict
+    DictList() {}
+    void add(Dict * o) {data.push_back(o);}
+    Dict * last() {return data.back();}
+    void pop() {data.pop_back();}
+    bool empty() {return data.empty();}
+    ~DictList() {for (; !empty(); pop()) last()->release();}
+  };
+
+  typedef unsigned int DataType;
+  static const DataType DT_ReadOnly     = 1<<0;
+  static const DataType DT_Writable     = 1<<1;
+  static const DataType DT_WritableRepl = 1<<2;
+  static const DataType DT_Multi        = 1<<3;
+  static const DataType DT_Any          = 0xFF;
+
+  // any new extra dictionaries that were loaded will be ii
+  PosibErr<Dict *> add_data_set(ParmString file_name,
+                                Config &,
+                                DictList * other_dicts = 0,
+                                SpellerImpl * = 0,
+                                ParmString dir = 0,
+                                DataType allowed = DT_Any);
+  
+  // implemented in readonly_ws.cc
+  Dictionary * new_default_readonly_dict();
+  
+  PosibErr<void> create_default_readonly_dict(StringEnumeration * els,
+                                              Config & config);
+  
+  // implemented in multi_ws.cc
+  MultiDict * new_default_multi_dict();
+
+  // implemented in writable.cpp
+  Dictionary * new_default_writable_dict();
+
+  // implemented in writable.cpp
+  ReplacementDict * new_default_replacement_dict();
+}
+
+#endif
+
diff --git a/modules/speller/default/data_id.hpp b/modules/speller/default/data_id.hpp
new file mode 100644 (file)
index 0000000..f640ad6
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef ASPELLER_DATA_ID__HPP
+#define ASPELLER_DATA_ID__HPP
+
+#include "settings.h"
+
+#include <sys/stat.h>
+
+namespace aspeller {
+  
+  class Dict::Id {
+  public: // but don't use
+    const Dict * ptr;
+    const char * file_name;
+#ifdef USE_FILE_INO
+    ino_t           ino;
+    dev_t           dev;
+#endif
+  public:
+    Id(Dict * p, const FileName & fn = FileName());
+  };
+
+  inline bool Dict::cache_key_eq(const Id & o) 
+  {
+    return *id_ == o;
+  }
+
+}
+
+#endif
diff --git a/modules/speller/default/data_util.hpp b/modules/speller/default/data_util.hpp
new file mode 100644 (file)
index 0000000..58fd128
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef __aspeller_data_util_hh__
+#define __aspeller_data_util_hh__
+
+#include <ctime>
+
+//POSIX headers
+#include <sys/stat.h>
+
+#include "parm_string.hpp"
+
+using namespace acommon;
+
+namespace aspeller {
+
+  template <class Itr>
+  struct CharStrParms {
+    typedef const char * Value;
+    typedef Itr          Iterator;
+    Iterator   end_;
+    CharStrParms(Iterator e) : end_(e) {}
+    bool endf(Iterator i) const {return i == end_;}
+      Value deref(Iterator i) const {return *i;}
+    Value end_state() const {return 0;}
+  };
+  
+  template <class Itr>
+  struct StrParms {
+    typedef const char * Value;
+    typedef Itr          Iterator;
+    Iterator   end_;
+    StrParms(Iterator e) : end_(e) {}
+    bool endf(Iterator i) const {return i == end_;}
+    Value deref(Iterator i) const {return i->c_str();}
+    Value end_state() const {return 0;}
+  };
+  
+  inline time_t modification_date(ParmString file) {
+    struct stat file_stat;
+    if (stat(file, &file_stat) == 0)
+      return file_stat.st_mtime;
+    else 
+      return 0;
+  }
+}
+
+#endif
diff --git a/modules/speller/default/editdist.cpp b/modules/speller/default/editdist.cpp
new file mode 100644 (file)
index 0000000..a3f946c
--- /dev/null
@@ -0,0 +1,56 @@
+
+#include <cstring>
+
+#include "editdist.hpp"
+#include "matrix.hpp"
+#include "vararray.hpp"
+
+// edit_distance is implemented using a straight forward dynamic
+// programming algorithm with out any special tricks.  Its space
+// usage AND running time is tightly asymptotically bounded by
+// strlen(a)*strlen(b)
+
+namespace aspeller {
+
+  short edit_distance(ParmString a0, ParmString b0,
+                     const EditDistanceWeights & w) 
+  {
+    int a_size = a0.size() + 1;
+    int b_size = b0.size() + 1;
+    VARARRAY(short, e_d, a_size * b_size);
+    ShortMatrix e(a_size,b_size,e_d);
+    e(0, 0) = 0;
+    for (int j = 1; j != b_size; ++j)
+      e(0, j) = e(0, j-1) + w.del1;
+    const char * a = a0.str() - 1;
+    const char * b = b0.str() - 1;
+    short te;
+    for (int i = 1; i != a_size; ++i) {
+      e(i, 0) = e(i-1, 0) + w.del2;
+      for (int j = 1; j != b_size; ++j) {
+       if (a[i] == b[j]) {
+
+         e(i, j) = e(i-1, j-1);
+
+       } else {
+
+         e(i, j) = w.sub + e(i-1, j-1);
+
+         if (i != 1 && j != 1 && 
+             a[i] == b[j-1] && a[i-1] == b[j]) 
+           {
+             te = w.swap + e(i-2, j-2);
+             if (te < e(i, j)) e(i, j) = te;
+           }
+         
+         te = w.del1 + e(i-1, j);
+         if (te < e(i, j)) e(i, j) = te;
+         te = w.del2 + e(i, j-1);
+         if (te < e(i, j)) e(i, j) = te;
+
+       }
+      } 
+    }
+    return e(a_size-1, b_size-1);
+  }
+}
diff --git a/modules/speller/default/editdist.hpp b/modules/speller/default/editdist.hpp
new file mode 100644 (file)
index 0000000..11c0bfa
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef __aspeller_edit_distance_hh__
+#define __aspeller_edit_distance_hh__
+
+#include "parm_string.hpp"
+#include "weights.hpp"
+
+namespace aspeller {
+
+  using acommon::ParmString;
+
+  // edit_distance finds the shortest edit distance.  The edit distance is 
+  // (cost of swap)(# of swaps) + (cost of deletion)(# of deletions) 
+  //   + (cost of insertion)(# of insertions) 
+  //   + (cost of substitutions)(# of substitutions)
+
+  // Preconditions:
+  // max(strlen(a), strlen(b))*max(of the edit weights) <= 2^15
+  //   if violated than an incorrect result may be returned (which may be negative)
+  //   due to overflow of a short integer
+  // a,b are not null pointers
+  // Returns:
+  //   the edit distance between a and b
+
+  // the running time is tightly asymptotically bounded by strlen(a)*strlen(b)
+
+  short edit_distance(ParmString a, ParmString b,
+                     const EditDistanceWeights & w = EditDistanceWeights());
+}
+
+#endif
diff --git a/modules/speller/default/editdist2.hpp b/modules/speller/default/editdist2.hpp
new file mode 100644 (file)
index 0000000..072a9ea
--- /dev/null
@@ -0,0 +1,28 @@
+
+#include "leditdist.hpp"
+#include "editdist.hpp"
+
+#include <cassert>
+
+namespace aspeller {
+  inline int edit_distance(ParmString a, ParmString b, 
+                          int level, // starting level
+                          int limit, // maximum level
+                          const EditDistanceWeights & w 
+                          = EditDistanceWeights()) 
+  {
+    int score;
+    assert(level > 0  && limit >= level);
+    do {
+      if (level == 2) {
+       score = limit2_edit_distance(a,b,w);
+      } else if (level < 5) {
+       score = limit_edit_distance(a,b,level,w);
+      } else {
+       score = edit_distance(a,b,w);
+      }
+      ++level;
+    } while (score >= LARGE_NUM && level <= limit);
+    return score;
+  }
+}
diff --git a/modules/speller/default/language.cpp b/modules/speller/default/language.cpp
new file mode 100644 (file)
index 0000000..c7c9706
--- /dev/null
@@ -0,0 +1,742 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#include "settings.h"
+
+#include <vector>
+#include <assert.h>
+
+#include <iostream.hpp>
+
+#include "asc_ctype.hpp"
+#include "clone_ptr-t.hpp"
+#include "config.hpp"
+#include "enumeration.hpp"
+#include "errors.hpp"
+#include "file_data_util.hpp"
+#include "fstream.hpp"
+#include "language.hpp"
+#include "string.hpp"
+#include "cache-t.hpp"
+#include "getdata.hpp"
+#include "file_util.hpp"
+
+#ifdef ENABLE_NLS
+#  include <langinfo.h>
+#endif
+
+#include "gettext.h"
+
+namespace aspeller {
+
+  static const char TO_CHAR_TYPE[256] = {
+    // 1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3
+    0, 4, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 5, 0, 0, // 4
+    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // 5
+    0, 4, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 5, 0, 0, // 6
+    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // 7
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // F
+  };
+
+  static const int FOR_CONFIG = 1;
+
+  static const KeyInfo lang_config_keys[] = {
+    {"charset",             KeyInfoString, "iso-8859-1", ""}
+    , {"data-encoding",       KeyInfoString, "<charset>", ""}
+    , {"name",                KeyInfoString, "", ""}
+    , {"run-together",        KeyInfoBool,   "", "", 0, FOR_CONFIG}
+    , {"run-together-limit",  KeyInfoInt,    "", "", 0, FOR_CONFIG}
+    , {"run-together-min",    KeyInfoInt,    "", "", 0, FOR_CONFIG}
+    , {"soundslike",          KeyInfoString, "none", ""}
+    , {"special",             KeyInfoString, "", ""}
+    , {"ignore-accents" ,     KeyInfoBool, "", "", 0, FOR_CONFIG}
+    , {"invisible-soundslike",KeyInfoBool, "", "", 0, FOR_CONFIG}
+    , {"keyboard",            KeyInfoString, "standard", "", 0, FOR_CONFIG} 
+    , {"affix",               KeyInfoString, "none", ""}
+    , {"affix-compress",      KeyInfoBool, "false", "", 0, FOR_CONFIG}
+    , {"partially-expand",    KeyInfoBool, "false", "", 0, FOR_CONFIG}
+    , {"affix-char",          KeyInfoString, "/", "", 0, FOR_CONFIG}
+    , {"flag-char",           KeyInfoString, ":", "", 0, FOR_CONFIG}
+    , {"repl-table",          KeyInfoString, "none", ""}
+    , {"sug-split-char",      KeyInfoList, "", "", 0, FOR_CONFIG}
+    , {"store-as",            KeyInfoString, "", ""}
+    , {"try",                 KeyInfoString, "", ""}
+    , {"normalize",           KeyInfoBool, "false", "", 0, FOR_CONFIG}
+    , {"norm-required",       KeyInfoBool, "false", "", 0, FOR_CONFIG}
+    , {"norm-form",           KeyInfoString, "nfc", "", 0, FOR_CONFIG}
+  };
+
+  static GlobalCache<Language> language_cache("language");
+
+  PosibErr<void> Language::setup(const String & lang, const Config * config)
+  {
+    //
+    // get_lang_info
+    //
+
+    String dir1,dir2,path;
+
+    fill_data_dir(config, dir1, dir2);
+    dir_ = find_file(path,dir1,dir2,lang,".dat");
+
+    lang_config_ = 
+      new Config("speller-lang",
+                 lang_config_keys, 
+                 lang_config_keys + sizeof(lang_config_keys)/sizeof(KeyInfo));
+    Config & data = *lang_config_;
+
+    {
+      PosibErrBase pe = data.read_in_file(path);
+      if (pe.has_err(cant_read_file)) {
+       String mesg = pe.get_err()->mesg;
+       mesg[0] = asc_tolower(mesg[0]);
+       mesg = _("This is probably because: ") + mesg;
+       return make_err(unknown_language, lang, mesg);
+      } else if (pe.has_err())
+       return pe;
+    }
+
+    if (!data.have("name"))
+      return make_err(bad_file_format, path, _("The required field \"name\" is missing."));
+
+    String buf;
+    name_          = data.retrieve("name");
+    charset_       = fix_encoding_str(data.retrieve("charset"), buf);
+    charmap_       = charset_;
+    data_encoding_ = fix_encoding_str(data.retrieve("data-encoding"), buf);
+
+    DataPair d;
+
+    //
+    // read header of cset data file
+    //
+  
+    FStream char_data;
+    String char_data_name;
+    find_file(char_data_name,dir1,dir2,charset_,".cset");
+    RET_ON_ERR(char_data.open(char_data_name, "r"));
+    
+    String temp;
+    char * p;
+    do {
+      p = get_nb_line(char_data, temp);
+      if (*p == '=') {
+        ++p;
+        while (asc_isspace(*p)) ++p;
+        charmap_ = p;
+      }
+    } while (*p != '/');
+
+    //
+    // fill in tables
+    //
+
+    for (unsigned int i = 0; i != 256; ++i) {
+      p = get_nb_line(char_data, temp);
+      if (!p || strtoul(p, &p, 16) != i) 
+        return make_err(bad_file_format, char_data_name);
+      to_uni_[i] = strtol(p, &p, 16);
+      while (asc_isspace(*p)) ++p;
+      char_type_[i] = static_cast<CharType>(TO_CHAR_TYPE[to_uchar(*p++)]);
+      while (asc_isspace(*p)) ++p;
+      ++p; // display, ignored for now
+      CharInfo inf = char_type_[i] >= Letter ? LETTER : 0;
+      to_upper_[i] = static_cast<char>(strtol(p, &p, 16));
+      inf |= to_uchar(to_upper_[i]) == i ? UPPER : 0;
+      to_lower_[i] = static_cast<char>(strtol(p, &p, 16));
+      inf |= to_uchar(to_lower_[i]) == i ? LOWER : 0;
+      to_title_[i] = static_cast<char>(strtol(p, &p, 16));
+      inf |= to_uchar(to_title_[i]) == i ? TITLE : 0;
+      to_plain_[i] = static_cast<char>(strtol(p, &p, 16));
+      inf |= to_uchar(to_plain_[i]) == i ? PLAIN : 0;
+      inf |= to_uchar(to_plain_[i]) == 0 ? PLAIN : 0;
+      sl_first_[i] = static_cast<char>(strtol(p, &p, 16));
+      sl_rest_[i]  = static_cast<char>(strtol(p, &p, 16));
+      char_info_[i] = inf;
+    }
+
+    for (unsigned int i = 0; i != 256; ++i) {
+      de_accent_[i] = to_plain_[i] == 0 ? to_uchar(i) : to_plain_[i];
+    }
+
+    to_plain_[0] = 0x10; // to make things slightly easier
+    to_plain_[1] = 0x10;
+
+    for (unsigned int i = 0; i != 256; ++i) {
+      to_stripped_[i] = to_plain_[(unsigned char)to_lower_[i]];
+    }
+    
+    char_data.close();
+
+    if (data.have("store-as"))
+      buf = data.retrieve("store-as");
+    else if (data.retrieve_bool("affix-compress"))
+      buf = "lower";
+    else
+      buf = "stripped";
+    char * clean_is;
+    if (buf == "stripped") {
+      store_as_ = Stripped;
+      clean_is = to_stripped_;
+    } else {
+      store_as_ = Lower;
+      clean_is = to_lower_;
+    }
+
+    for (unsigned i = 0; i != 256; ++i) {
+      to_clean_[i] = char_type_[i] > NonLetter ? clean_is[i] : 0;
+      if ((unsigned char)to_clean_[i] == i) char_info_[i] |= CLEAN;
+    }
+
+    to_clean_[0x00] = 0x10; // to make things slightly easier
+    to_clean_[0x10] = 0x10;
+
+    clean_chars_   = get_clean_chars(*this);
+
+    //
+    // determine which mapping to use
+    //
+
+    if (charmap_ != charset_) {
+      if (file_exists(dir1 + charset_ + ".cmap") || 
+          file_exists(dir2 + charset_ + ".cmap"))
+      {
+        charmap_ = charset_;
+      } else if (data_encoding_ == charset_) {
+        data_encoding_ = charmap_;
+      }
+    }
+      
+    //
+    // set up conversions
+    //
+    {
+#ifdef ENABLE_NLS
+      const char * tmp = 0;
+      tmp = bind_textdomain_codeset("aspell", 0);
+#ifdef HAVE_LANGINFO_CODESET
+      if (!tmp) tmp = nl_langinfo(CODESET);
+#endif
+      if (ascii_encoding(*config, tmp)) tmp = 0;
+      if (tmp)
+        RET_ON_ERR(mesg_conv_.setup(*config, charmap_, fix_encoding_str(tmp, buf), NormTo));
+      else 
+#endif
+        RET_ON_ERR(mesg_conv_.setup(*config, charmap_, data_encoding_, NormTo));
+      // no need to check for errors here since we know charmap_ is a
+      // supported encoding
+      to_utf8_.setup(*config, charmap_, "utf-8", NormTo);
+      from_utf8_.setup(*config, "utf-8", charmap_, NormFrom);
+    }
+    
+    Conv iconv;
+    RET_ON_ERR(iconv.setup(*config, data_encoding_, charmap_, NormFrom));
+
+    //
+    // set up special
+    //
+
+    init(data.retrieve("special"), d, buf);
+    while (split(d)) {
+      char c = iconv(d.key)[0];
+      split(d);
+      special_[to_uchar(c)] = 
+        SpecialChar (d.key[0] == '*',d.key[1] == '*', d.key[2] == '*');
+    }
+
+    //
+    // prep phonetic code
+    //
+
+    {
+      PosibErr<Soundslike *> pe = new_soundslike(data.retrieve("soundslike"),
+                                                 iconv,
+                                               this);
+      if (pe.has_err()) return pe;
+      soundslike_.reset(pe.data);
+    }
+    soundslike_chars_ = soundslike_->soundslike_chars();
+
+    have_soundslike_ = strcmp(soundslike_->name(), "none") != 0;
+
+    //
+    // prep affix code
+    //
+    {
+      PosibErr<AffixMgr *> pe = new_affix_mgr(data.retrieve("affix"), iconv, this);
+      if (pe.has_err()) return pe;
+      affix_.reset(pe.data);
+    }
+
+    //
+    // fill repl tables (if any)
+    //
+
+    String repl = data.retrieve("repl-table");
+    have_repl_ = false;
+    if (repl != "none") {
+
+      String repl_file;
+      FStream REPL;
+      find_file(repl_file, dir1, dir2, repl, "_repl", ".dat");
+      RET_ON_ERR(REPL.open(repl_file, "r"));
+      
+      size_t num_repl = 0;
+      while (getdata_pair(REPL, d, buf)) {
+        ::to_lower(d.key);
+        if (d.key == "rep") {
+          num_repl = atoi(d.value); // FIXME make this more robust
+          break;
+        }
+      }
+
+      if (num_repl > 0)
+        have_repl_ = true;
+
+      for (size_t i = 0; i != num_repl; ++i) {
+        bool res = getdata_pair(REPL, d, buf);
+        assert(res); // FIXME
+        ::to_lower(d.key);
+        assert(d.key == "rep"); // FIXME
+        split(d);
+        SuggestRepl rep;
+        rep.substr = buf_.dup(iconv(d.key));
+        if (check_if_valid(*this, rep.substr).get_err()) 
+          continue; // FIXME: This should probably be an error, but
+                    // this may cause problems with compatibility with
+                    // Myspell as these entries may make sense for
+                    // Myspell (but obviously not for Aspell)
+        to_clean((char *)rep.substr, rep.substr);
+        rep.repl   = buf_.dup(iconv(d.value));
+        if (check_if_valid(*this, rep.repl).get_err()) 
+          continue; // FIXME: Ditto
+        to_clean((char *)rep.repl, rep.repl);
+        if (strcmp(rep.substr, rep.repl) == 0 || rep.substr[0] == '\0')
+          continue; // FIXME: Ditto
+        repls_.push_back(rep);
+      }
+
+    }
+    return no_err;
+  }
+
+  void Language::set_lang_defaults(Config & config) const
+  {
+    config.replace_internal("actual-lang", name());
+    config.lang_config_merge(*lang_config_, FOR_CONFIG, data_encoding_);
+  }
+
+  WordInfo Language::get_word_info(ParmStr str) const
+  {
+    CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL;
+    const char * p = str;
+    while (*p && (first = char_info(*p++), all &= first, !(first & LETTER)));
+    while (*p) all &= char_info(*p++);
+    WordInfo res;
+    if      (all & LOWER)   res = AllLower;
+    else if (all & UPPER)   res = AllUpper;
+    else if (first & TITLE) res = FirstUpper;
+    else                    res = Other;
+    if (all & PLAIN)  res |= ALL_PLAIN;
+    if (all & CLEAN)  res |= ALL_CLEAN;
+    return res;
+  }
+  
+  CasePattern Language::case_pattern(ParmStr str) const  
+  {
+    CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL;
+    const char * p = str;
+    while (*p && (first = char_info(*p++), all &= first, !(first & LETTER)));
+    while (*p) all &= char_info(*p++);
+    if      (all & LOWER)   return AllLower;
+    else if (all & UPPER)   return AllUpper;
+    else if (first & TITLE) return FirstUpper;
+    else                    return Other;
+  }
+
+  CasePattern Language::case_pattern(const char * str, unsigned size) const  
+  {
+    CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL;
+    const char * p = str;
+    const char * end = p + size;
+    while (p < end && (first = char_info(*p++), all &= first, !(first & LETTER)));
+    while (p < end) all &= char_info(*p++);
+    if      (all & LOWER)   return AllLower;
+    else if (all & UPPER)   return AllUpper;
+    else if (first & TITLE) return FirstUpper;
+    else                    return Other;
+  }
+  
+  void Language::fix_case(CasePattern case_pattern,
+                          char * res, const char * str) const 
+  {
+    if (!str[0]) return;
+    if (case_pattern == AllUpper) {
+      to_upper(res,str);
+    } if (case_pattern == FirstUpper && is_lower(str[0])) {
+      *res = to_title(str[0]);
+      if (res == str) return;
+      res++;
+      str++;
+      while (*str) *res++ = *str++;
+      *res = '\0';
+    } else {
+      if (res == str) return;
+      while (*str) *res++ = *str++;
+      *res = '\0';
+    }
+  }
+
+  const char * Language::fix_case(CasePattern case_pattern, const char * str,
+                                  String & buf) const 
+  {
+    if (!str[0]) return str;
+    if (case_pattern == AllUpper) {
+      to_upper(buf,str);
+      return buf.str();
+    } if (case_pattern == FirstUpper && is_lower(str[0])) {
+      buf.clear();
+      buf += to_title(str[0]);
+      str++;
+      while (*str) buf += *str++;
+      return buf.str();
+    } else {
+      return str;
+    }
+  }
+
+  WordAff * Language::fake_expand(ParmStr word, ParmStr aff, 
+                                  ObjStack & buf) const 
+  {
+    WordAff * cur = (WordAff *)buf.alloc_bottom(sizeof(WordAff));
+    cur->word = buf.dup(word);
+    cur->aff = (unsigned char *)buf.dup("");
+    cur->next = 0;
+    return cur;
+  }
+  
+  bool SensitiveCompare::operator() (const char * word0, 
+                                    const char * inlist0) const
+  {
+    assert(*word0 && *inlist0);
+  try_again:
+    const char * word = word0;
+    const char * inlist = inlist0;
+
+    if (!case_insensitive) {
+      
+      if (begin) {
+        if (*word == *inlist || *word == lang->to_title(*inlist)) ++word, ++inlist;
+        else                                                      goto try_upper;
+      }
+      while (*word && *inlist && *word == *inlist) ++word, ++inlist;
+      if (*inlist) goto try_upper;
+      if (end && lang->special(*word).end) ++word;
+      if (*word) goto try_upper;
+      return true;
+    try_upper:
+      word = word0;
+      inlist = inlist0;
+      while (*word && *inlist && *word == lang->to_upper(*inlist)) ++word, ++inlist;
+      if (*inlist) goto fail;
+      if (end && lang->special(*word).end) ++word;
+      if (*word) goto fail;
+      
+    } else { // case_insensitive
+      
+      while (*word && *inlist && 
+             lang->to_upper(*word) == lang->to_upper(*inlist)) ++word, ++inlist;
+      if (*inlist) goto fail;
+      if (end && lang->special(*word).end) ++word;
+      if (*word) goto fail;
+      
+    }
+    return true;
+
+  fail:
+    if (begin && lang->special(*word0).begin) {++word0; goto try_again;}
+    return false;
+  }
+
+  static PosibErrBase invalid_word_e(const Language & l,
+                                     ParmStr word,
+                                     const char * msg,
+                                     char chr = 0)
+  {
+    char m[200];
+    if (chr) {
+      // the "char *" cast is needed due to an incorrect "snprintf"
+      //   declaration on some platforms.
+      snprintf(m, 200, (char *)msg, MsgConv(l)(chr), l.to_uni(chr));
+      msg = m;
+    }
+    return make_err(invalid_word, MsgConv(l)(word), msg);
+  }
+
+  PosibErr<void> check_if_valid(const Language & l, ParmStr word) {
+    if (*word == '\0') 
+      return invalid_word_e(l, word, _("Empty string."));
+    const char * i = word;
+    if (!l.is_alpha(*i)) {
+      if (!l.special(*i).begin)
+        return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear at the beginning of a word."), *i);
+      else if (!l.is_alpha(*(i+1)))
+        return invalid_word_e(l, word, _("The character '%s' (U+%02X) must be followed by an alphabetic character."), *i);
+      else if (!*(i+1))
+        return invalid_word_e(l, word, _("Does not contain any alphabetic characters."));
+    }
+    for (;*(i+1) != '\0'; ++i) { 
+      if (!l.is_alpha(*i)) {
+        if (!l.special(*i).middle)
+          return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear in the middle of a word."), *i);
+        else if (!l.is_alpha(*(i+1)))
+          return invalid_word_e(l, word, _("The character '%s' (U+%02X) must be followed by an alphabetic character."), *i);
+      }
+    }
+    if (!l.is_alpha(*i)) {
+      if (*i == '\r')
+        return invalid_word_e(l, word, _("The character '\\r' (U+0D) may not appear at the end of a word. " 
+                                         "This probably means means that the file is using MS-DOS EOL instead of Unix EOL."), *i);
+      if (!l.special(*i).end)
+        return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear at the end of a word."), *i);
+    }
+    return no_err;
+  }
+
+  PosibErr<void> validate_affix(const Language & l, ParmStr word, ParmStr aff)
+  {
+    for (const char * a = aff; *a; ++a) {
+      CheckAffixRes res = l.affix()->check_affix(word, *a);
+      if (res == InvalidAffix)
+        return make_err(invalid_affix, MsgConv(l)(*a), MsgConv(l)(word));
+      else if (res == InapplicableAffix)
+        return make_err(inapplicable_affix, MsgConv(l)(*a), MsgConv(l)(word));
+    }
+    return no_err;
+  }
+
+  CleanAffix::CleanAffix(const Language * lang0, OStream * log0)
+    : lang(lang0), log(log0), msgconv1(lang0), msgconv2(lang0)
+  {
+  }
+  
+  char * CleanAffix::operator()(ParmStr word, char * aff)
+  {
+    char * r = aff;
+    for (const char * a = aff; *a; ++a) {
+      CheckAffixRes res = lang->affix()->check_affix(word, *a);
+      if (res == ValidAffix) {
+        *r = *a;
+        ++r;
+      } else if (log) {
+        const char * msg = res == InvalidAffix 
+          ? _("Warning: Removing invalid affix '%s' from word %s.\n")
+          : _("Warning: Removing inapplicable affix '%s' from word %s.\n");
+        log->printf(msg, msgconv1(*a), msgconv2(word));
+      }
+    }
+    *r = '\0';
+    return r;
+  }
+
+  String get_stripped_chars(const Language & lang) {
+    bool chars_set[256] = {0};
+    String     chars_list;
+    for (int i = 0; i != 256; ++i) 
+    {
+      char c = static_cast<char>(i);
+       if (lang.is_alpha(c) || lang.special(c).any)
+         chars_set[static_cast<unsigned char>(lang.to_stripped(c))] = true;
+    }
+    for (int i = 1; i != 256; ++i) 
+    {
+      if (chars_set[i]) 
+       chars_list += static_cast<char>(i);
+    }
+    return chars_list;
+  }
+
+  String get_clean_chars(const Language & lang) {
+    bool chars_set[256] = {0};
+    String     chars_list;
+    for (int i = 0; i != 256; ++i) 
+    {
+      char c = static_cast<char>(i);
+      if (lang.is_alpha(c) || lang.special(c).any) 
+        chars_set[static_cast<unsigned char>(lang.to_clean(c))] = true;
+    }
+    for (int i = 1; i != 256; ++i) 
+    {
+      if (chars_set[i]) {
+       chars_list += static_cast<char>(i);
+      }
+    }
+    return chars_list;
+  }
+
+  PosibErr<Language *> new_language(const Config & config, ParmStr lang)
+  {
+    if (!lang)
+      return get_cache_data(&language_cache, &config, config.retrieve("lang"));
+    else
+      return get_cache_data(&language_cache, &config, lang);
+  }
+
+  PosibErr<void> open_affix_file(const Config & c, FStream & f)
+  {
+    String lang = c.retrieve("lang");
+
+    String dir1,dir2,path;
+    fill_data_dir(&c, dir1, dir2);
+    String dir = find_file(path,dir1,dir2,lang,".dat");
+
+    String file;
+    file += dir;
+    file += '/';
+    file += lang;
+    file += "_affix.dat";
+    
+    RET_ON_ERR(f.open(file,"r"));
+
+    return no_err;
+  }
+
+  bool find_language(Config & c)
+  {
+    String l_data = c.retrieve("lang");
+    char * l = l_data.mstr();
+
+    String dir1,dir2,path;
+    fill_data_dir(&c, dir1, dir2);
+
+    char * s = l + strlen(l);
+
+    while (s > l) {
+      find_file(path,dir1,dir2,l,".dat");
+      if (file_exists(path)) {
+        c.replace_internal("actual-lang", l);
+        return true;
+      }
+      while (s > l && !(*s == '-' || *s == '_')) --s;
+      *s = '\0';
+    }
+    return false;
+  }
+
+  WordListIterator::WordListIterator(StringEnumeration * in0,
+                                   const Language * lang0,
+                                   OStream * log0)
+    : in(in0), lang(lang0), log(log0), val(), str(0), str_end(0), brk(), 
+      clean_affix(lang0, log0)
+  {
+  }
+
+  PosibErr<void>  WordListIterator::init(Config & config)
+  {
+    if (!config.have("norm-strict"))
+      config.replace("norm-strict", "true");
+    have_affix = lang->have_affix();
+    validate_words = config.retrieve_bool("validate-words");
+    validate_affixes = config.retrieve_bool("validate-affixes");
+    clean_words = config.retrieve_bool("clean-words");
+    skip_invalid_words = config.retrieve_bool("skip-invalid-words");
+    clean_affixes = config.retrieve_bool("clean-affixes");
+    if (config.have("encoding")) {
+      RET_ON_ERR(iconv.setup(config, config.retrieve("encoding"), lang->charmap(),NormFrom));
+    } else {
+      RET_ON_ERR(iconv.setup(config, lang->data_encoding(), lang->charmap(), NormFrom));
+    }
+    brk[0] = ' ';
+    if (!lang->special('-').any) brk[1] = '-';
+    return no_err;
+  }
+
+  PosibErr<bool> WordListIterator::adv() 
+  {
+  loop:
+    if (!str) {
+      orig = in->next();
+      if (!orig) return false;
+      if (!*orig) goto loop;
+      PosibErr<const char *> pe = iconv(orig);
+      if (pe.has_err()) {
+        if (!skip_invalid_words) return pe;
+        if (log) log->printf(_("Warning: %s Skipping string.\n"), pe.get_err()->mesg);
+        else pe.ignore_err();
+        goto loop;
+      }
+      if (pe.data == orig) {
+        data = orig;
+        data.ensure_null_end();
+        str = data.pbegin();
+        str_end = data.pend();
+      } else {
+        str = iconv.buf.pbegin();
+        str_end = iconv.buf.pend();
+      }
+      char * aff = str_end;
+      char * aff_end = str_end;
+      if (have_affix) {
+        aff = strchr(str, '/');
+        if (aff == 0) {
+          aff = str_end;
+        } else {
+          *aff = '\0';
+          str_end = aff;
+          ++aff;
+        }
+        if (validate_affixes) {
+          if (clean_affixes)
+            aff_end = clean_affix(str, aff);
+          else
+            RET_ON_ERR(validate_affix(*lang, str, aff));
+        }
+      }
+      val.aff.str = aff;
+      val.aff.size = aff_end - aff;
+      if (!*aff && validate_words && clean_words) {
+        char * s = str;
+        while (s < str_end) {
+          while (s < str_end && !lang->is_alpha(*s) && !lang->special(*s).begin)
+            *s++ = '\0';
+          s += strcspn(s, brk);
+          *s = '\0';
+          char * s2 = s - 1;
+          while (s2 >= str && *s2 && !lang->is_alpha(*s2) && !lang->special(*s2).end)
+            *s2-- = '\0';
+        }
+      }
+    }
+    while (str < str_end) 
+    {
+      if (!*str) {++str; continue;}
+
+      PosibErrBase pe2 = validate_words ? check_if_valid(*lang, str) : no_err;
+
+      val.word.str = str;
+      val.word.size = strlen(str);
+      str += val.word.size + 1;
+
+      if (!pe2.has_err() && val.word.size + (*val.aff ? val.aff.size + 1 : 0) > 240)
+        pe2 = make_err(invalid_word, MsgConv(lang)(val.word),
+                       _("The total length is larger than 240 characters."));
+
+      if (!pe2.has_err()) return true;
+      if (!skip_invalid_words) return pe2;
+      if (log) log->printf(_("Warning: %s Skipping word.\n"), pe2.get_err()->mesg);
+      else pe2.ignore_err();
+    } 
+    str = 0;
+    goto loop;
+  }
+}
diff --git a/modules/speller/default/language.hpp b/modules/speller/default/language.hpp
new file mode 100644 (file)
index 0000000..3cd3d63
--- /dev/null
@@ -0,0 +1,476 @@
+// Copyright 2004 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef ASPELLER_LANGUAGE__HPP
+#define ASPELLER_LANGUAGE__HPP
+
+#include "affix.hpp"
+#include "cache.hpp"
+#include "config.hpp"
+#include "convert.hpp"
+#include "phonetic.hpp"
+#include "posib_err.hpp"
+#include "stack_ptr.hpp"
+#include "string.hpp"
+#include "objstack.hpp"
+#include "string_enumeration.hpp"
+
+#include "iostream.hpp"
+
+using namespace acommon;
+
+namespace acommon {
+  struct CheckInfo;
+}
+
+namespace aspeller {
+
+  struct SuggestRepl {
+    const char * substr;
+    const char * repl;
+  };
+  
+  class SuggestReplEnumeration
+  {
+    const SuggestRepl * i_;
+    const SuggestRepl * end_;
+  public:
+    SuggestReplEnumeration(const SuggestRepl * b, const SuggestRepl * e)
+      : i_(b), end_(e) {}
+    bool at_end() const {return i_ == end_;}
+    const SuggestRepl * next() {
+      if (i_ == end_) return 0;
+      return i_++;
+    }
+  };
+
+  // CharInfo
+
+  typedef unsigned int CharInfo; // 6 bits
+
+  static const CharInfo LOWER  = (1 << 0);
+  static const CharInfo UPPER  = (1 << 1);
+  static const CharInfo TITLE  = (1 << 2);
+  static const CharInfo PLAIN  = (1 << 3);
+  static const CharInfo LETTER = (1 << 4);
+  static const CharInfo CLEAN  = (1 << 5);
+
+  static const CharInfo CHAR_INFO_ALL = 0x3F;
+
+  //
+
+  enum StoreAs {Stripped, Lower};
+
+  class Language : public Cacheable {
+  public:
+    typedef const Config CacheConfig;
+    typedef String       CacheKey;
+
+    enum CharType {Unknown, WhiteSpace, Hyphen, Digit, 
+                   NonLetter, Modifier, Letter};
+    
+    struct SpecialChar {
+      bool begin;
+      bool middle;
+      bool end;
+      bool any;
+      SpecialChar() : begin(false), middle(false), end(false), any(false) {}
+      SpecialChar(bool b, bool m, bool e) : begin(b), middle(m), end(e),
+                                            any(b || m || e) {}
+    };
+
+  private:
+    String   dir_;
+    String   name_;
+    String   charset_;
+    String   charmap_;
+    String   data_encoding_;
+
+    ConvObj  mesg_conv_;
+    ConvObj  to_utf8_;
+    ConvObj  from_utf8_;
+
+    unsigned char to_uchar(char c) const {return static_cast<unsigned char>(c);}
+
+    SpecialChar special_[256];
+    CharInfo      char_info_[256];
+    char          to_lower_[256];
+    char          to_upper_[256];
+    char          to_title_[256];
+    char          to_stripped_[256];
+    char          to_plain_[256];
+    int           to_uni_[256];
+    CharType      char_type_[256];
+    char          to_clean_[256];
+    char          de_accent_[256];
+
+    StoreAs       store_as_;
+
+    String      soundslike_chars_;
+    String      clean_chars_;
+
+    bool have_soundslike_;
+    bool have_repl_;
+
+    StackPtr<Soundslike> soundslike_;
+    StackPtr<AffixMgr>   affix_;
+    StackPtr<Config>     lang_config_;
+
+    StringBuffer buf_;
+    Vector<SuggestRepl> repls_;
+
+    Language(const Language &);
+    void operator=(const Language &);
+
+  public: // but don't use
+
+    char          sl_first_[256];
+    char          sl_rest_[256];
+
+  public:
+
+    Language() {}
+    PosibErr<void> setup(const String & lang, const Config * config);
+    void set_lang_defaults(Config & config) const;
+
+    const char * data_dir() const {return dir_.c_str();}
+    const char * name() const {return name_.c_str();}
+    const char * charmap() const {return charmap_.c_str();}
+    const char * data_encoding() const {return data_encoding_.c_str();}
+
+    const Convert * mesg_conv() const {return mesg_conv_.ptr;}
+    const Convert * to_utf8() const {return to_utf8_.ptr;}
+    const Convert * from_utf8() const {return from_utf8_.ptr;}
+
+    int to_uni(char c) const {return to_uni_[to_uchar(c)];}
+
+    //
+    // case conversion
+    //
+
+    char to_upper(char c) const {return to_upper_[to_uchar(c)];}
+    bool is_upper(char c) const {return to_upper(c) == c;}
+
+    char to_lower(char c) const {return to_lower_[to_uchar(c)];}
+    bool is_lower(char c) const {return to_lower(c) == c;}
+
+    char to_title(char c) const {return to_title_[to_uchar(c)];}
+    bool is_title(char c) const {return to_title(c) == c;}
+
+    char * to_lower(char * res, const char * str) const {
+      while (*str) *res++ = to_lower(*str++); *res = '\0'; return res;}
+    char * to_upper(char * res, const char * str) const {
+      while (*str) *res++ = to_upper(*str++); *res = '\0'; return res;}
+
+    void to_lower(String & res, const char * str) const {
+      res.clear(); while (*str) res += to_lower(*str++);}
+    void to_upper(String & res, const char * str) const {
+      res.clear(); while (*str) res += to_upper(*str++);}
+
+    bool is_lower(const char * str) const {
+      while (*str) {if (!is_lower(*str++)) return false;} return true;}
+    bool is_upper(const char * str) const {
+      while (*str) {if (!is_upper(*str++)) return false;} return true;}
+
+    //
+    //
+    //
+
+    char to_plain(char c) const {return to_plain_[to_uchar(c)];}
+
+    char de_accent(char c) const {return de_accent_[to_uchar(c)];}
+    
+    SpecialChar special(char c) const {return special_[to_uchar(c)];}
+  
+    CharType char_type(char c) const {return char_type_[to_uchar(c)];}
+    bool is_alpha(char c) const {return char_type(c) >  NonLetter;}
+
+    CharInfo char_info(char c) const {return char_info_[to_uchar(c)];}
+
+    //
+    // stripped
+    //
+
+    char to_stripped(char c) const {return to_stripped_[to_uchar(c)];}
+
+    // return a pointer to the END of the string
+    char * to_stripped(char * res, const char * str) const {
+      for (; *str; ++str) {
+        char c = to_stripped(*str);
+        if (c) *res++ = c;
+      }
+      *res = '\0';
+      return res;
+    }
+    void to_stripped(String & res, const char * str) const {
+      res.clear();
+      for (; *str; ++str) {
+        char c = to_stripped(*str);
+        if (c) res += c;
+      }
+    }
+
+    bool is_stripped(char c) const {return to_stripped(c) == c;}
+
+    bool is_stripped(const char * str) const {
+      while (*str) {if (!is_stripped(*str++)) return false;} return true;}
+
+    //
+    // Clean
+    //
+    // The "clean" form is how words are indixed in the dictionary.
+    // It will at very least convert the word to lower case.  It may
+    // also strip accents and non-letters.
+    //
+
+    char to_clean(char c) const {return to_clean_[to_uchar(c)];}
+
+    char * to_clean(char * res, const char * str) const {
+      for (; *str; ++str) {
+        char c = to_clean(*str);
+        if (c) *res++ = c;
+      }
+      *res = '\0';
+      return res;
+    }
+    void to_clean(String & res, const char * str) const {
+      res.clear();
+      for (; *str; ++str) {
+        char c = to_clean(*str);
+        if (c) res += c;
+      }
+    }
+
+    bool is_clean(char c) const {return to_clean(c) == c;}
+
+    bool is_clean(const char * str) const {
+      while (*str) {if (!is_clean(*str++)) return false;} return true;}
+
+    bool is_clean_wi(WordInfo wi) const {
+      return false;
+      //return wi & CASE_PATTEN == AllLower && 
+    }
+
+
+    const char * clean_chars() const {return clean_chars_.c_str();}
+
+    //
+    // Soundslike
+    // 
+  
+    bool have_soundslike() const {return have_soundslike_;}
+    
+    const char * soundslike_name() const {return soundslike_->name();}
+    const char * soundslike_version() const {return soundslike_->version();}
+
+    void to_soundslike(String & res, ParmStr word) const {
+      res.resize(word.size());
+      char * e = soundslike_->to_soundslike(res.data(), word.str(), word.size());
+      res.resize(e - res.data());
+    }
+    
+    // returns a pointer to the END of the string
+    char * to_soundslike(char * res, const char * str, int len = -1) const { 
+      return soundslike_->to_soundslike(res,str,len);
+    }
+
+    char * to_soundslike(char * res, const char * str, int len, WordInfo wi) const {
+      if (!have_soundslike_ && (wi & ALL_CLEAN)) return 0;
+      else return soundslike_->to_soundslike(res,str,len);
+    }
+
+    const char * soundslike_chars() const {return soundslike_chars_.c_str();}
+
+    //
+    // Affix compression methods
+    //
+
+    const AffixMgr * affix() const {return affix_;}
+
+    bool have_affix() const {return affix_;}
+
+    void munch(ParmStr word, GuessInfo * cl, bool cross = true) const {
+      if (affix_)
+        affix_->munch(word, cl, cross);
+    }
+      
+    WordAff * expand(ParmStr word, ParmStr aff, 
+                     ObjStack & buf, int limit = INT_MAX) const {
+      if (affix_)
+        return affix_->expand(word, aff, buf, limit);
+      else
+        return fake_expand(word, aff, buf);
+    }
+    WordAff * fake_expand(ParmStr word, ParmStr aff, ObjStack & buf) const;
+
+    //
+    // Repl
+    //
+
+    bool have_repl() const {return have_repl_;}
+
+    SuggestReplEnumeration * repl() const {
+      return new SuggestReplEnumeration(repls_.pbegin(), repls_.pend());}
+    
+    //
+    //
+    //
+
+    WordInfo get_word_info(ParmStr str) const;
+    
+    //
+    // fix_case
+    //
+
+    CasePattern case_pattern(ParmStr str) const;
+
+    CasePattern case_pattern(const char * str, unsigned size) const;
+
+    void fix_case(CasePattern case_pattern, char * str)
+    {
+      if (!str[0]) return;
+      if (case_pattern == AllUpper) to_upper(str,str);
+      else if (case_pattern == FirstUpper) *str = to_title(*str);
+    }
+    void fix_case(CasePattern case_pattern, 
+                  char * res, const char * str) const;
+    const char * fix_case(CasePattern case_pattern, 
+                          const char * str, String & buf) const;
+
+    //
+    // for cache
+    //
+
+    static inline PosibErr<Language *> get_new(const String & lang, const Config * config) {
+      StackPtr<Language> l(new Language());
+      RET_ON_ERR(l->setup(lang, config));
+      return l.release();
+    }
+
+    bool cache_key_eq(const String & l) const  {return name_ == l;}
+  };
+
+  typedef Language LangImpl;
+
+  struct MsgConv : public ConvP
+  {
+    MsgConv(const Language * l) : ConvP(l->mesg_conv()) {}
+    MsgConv(const Language & l) : ConvP(l.mesg_conv()) {}
+  };
+
+  struct InsensitiveCompare {
+    // compares to strings without regards to casing or special characters
+    const Language * lang;
+    InsensitiveCompare(const Language * l = 0) : lang(l) {}
+    operator bool () const {return lang;}
+    int operator() (const char * a, const char * b) const
+    { 
+      char x, y;
+      for (;;)
+      {
+        while (x = lang->to_clean(*a++), !x);
+        while (y = lang->to_clean(*b++), !y);
+        if (x == 0x10 || y == 0x10 || x != y) break;
+      }
+      return static_cast<unsigned char>(x) - static_cast<unsigned char>(y);
+    }
+  };
+
+  struct InsensitiveEqual {
+    InsensitiveCompare cmp;
+    InsensitiveEqual(const Language * l = 0) : cmp(l) {}
+    bool operator() (const char * a, const char * b) const
+    {
+      return cmp(a,b) == 0;
+    }
+  };
+  
+  struct InsensitiveHash {
+    // hashes a string without regards to casing or special begin
+    // or end characters
+    const Language * lang;
+    InsensitiveHash() {}
+    InsensitiveHash(const Language * l)
+       : lang(l) {}
+    size_t operator() (const char * s) const
+    {
+      size_t h = 0;
+      for (;;) {
+       if (*s == 0) break;
+        unsigned char c = lang->to_clean(*s++);
+       if (c) h=5*h + c;
+      }
+      return h;
+    }
+  };
+
+  struct SensitiveCompare {
+    const Language * lang;
+    bool case_insensitive;
+    bool ignore_accents;    
+    bool begin;
+    bool end;
+    SensitiveCompare(const Language * l = 0) 
+      : lang(l), case_insensitive(false), ignore_accents(false),
+        begin(true), end(true) {}
+    bool operator() (const char * word, const char * inlist) const;
+  };
+
+  struct CleanAffix {
+    const Language * lang;
+    OStream * log;
+    MsgConv msgconv1;
+    MsgConv msgconv2;
+    CleanAffix(const Language * lang0, OStream * log0);
+    char * operator() (ParmStr word, char * aff);
+  };
+
+  class WordListIterator
+  {
+  public:
+    struct Value {
+      SimpleString word;
+      SimpleString aff;
+    };
+    WordListIterator(StringEnumeration * in,
+                     const Language * lang,
+                     OStream * log);
+    // init may set "norm-strict" to true which is why it is not const
+    PosibErr<void> init (Config & config);
+    const Value * operator-> () const {return &val;}
+    PosibErr<bool> adv();
+  private:
+    bool have_affix;
+    bool validate_words;
+    bool validate_affixes;
+    bool clean_words;
+    bool skip_invalid_words;
+    bool clean_affixes;
+    StringEnumeration * in;
+    const Language * lang;
+    ConvEC iconv;
+    OStream * log;
+    Value val;
+    String data;
+    const char * orig;
+    char * str;
+    char * str_end;
+    char brk[3];
+    CleanAffix clean_affix;
+  };
+
+  String get_stripped_chars(const Language & l);
+
+  String get_clean_chars(const Language & l);
+  
+  PosibErr<void> check_if_valid(const Language & l, ParmStr word);
+  PosibErr<void> validate_affix(const Language & l, ParmStr word, ParmStr aff);
+
+  bool find_language(Config & c);
+
+  PosibErr<Language *> new_language(const Config &, ParmStr lang = 0);
+
+  PosibErr<void> open_affix_file(const Config &, FStream & o);
+}
+
+
+#endif
diff --git a/modules/speller/default/leditdist.cpp b/modules/speller/default/leditdist.cpp
new file mode 100644 (file)
index 0000000..9d89cfa
--- /dev/null
@@ -0,0 +1,308 @@
+
+#include "leditdist.hpp"
+
+// The basic algorithm is as follows:
+//
+// Let A[n] represent the nth character of string n
+//     A[n..] represent the substring of A starting at n
+//            if n > length of A then it is considered an empty string
+//
+// edit_distance(A,B,limit) = ed(A,B,0)
+//   where ed(A,B,d) = d                              if A & B is empty.
+//                   = infinity                       if d > limit
+//                   = ed(A[2..],B[2..], d)           if A[1] == B[1] 
+//                   = min ( ed(A[2..],B[2..], d+1),  
+//                           ed(A,     B[2..], d+1),
+//                           ed(A[2..],B,      d+1) ) otherwise
+//
+// However, the code below:
+// 1) Also allows for swaps
+// 2) Allow weights to be attached to each edit
+// 3) Is not recursive, it uses a loop when it is tail recursion
+//    and a small stack otherwise.  The stack will NEVER be larger
+//    then 2 * limit.
+// 4) Is extremely optimized
+
+
+#define check_rest(a,b,s)   \
+  a0 = a; b0 = b;           \
+  while (*a0 == *b0) {      \
+    if (*a0 == '\0') {      \
+      if (s < min) min = s; \
+      break;                \
+    }                       \
+    ++a0; ++b0;             \
+  }
+
+namespace aspeller {
+
+  int limit_edit_distance(const char * a, const char * b, 
+                         int limit, const EditDistanceWeights & w)
+  {
+    limit = limit*w.max;
+    static const int size = 10;
+    struct Edit {
+      const char * a;
+      const char * b;
+      int score;
+    };
+    Edit begin[size];
+    Edit * i = begin;
+    const char * a0;
+    const char * b0;
+    int score = 0;
+    int min = LARGE_NUM;
+    
+    while (true) {
+      
+      while (*a == *b) {
+       if (*a == '\0') { 
+         if (score < min) min = score;
+         goto FINISH;
+       } 
+       ++a; ++b;
+      }
+
+      if (*a == '\0') {
+
+       do {
+         score += w.del2;
+         if (score >= min) goto FINISH;
+         ++b;
+       } while (*b != '\0');
+       min = score;
+       
+      } else if (*b == '\0') {
+       
+       do {
+         score += w.del1;
+         if (score >= min) goto FINISH;
+         ++a;
+       } while (*a != '\0');
+       min = score;
+       
+      } else {
+
+       if (score + w.max <= limit) {
+         if (limit*w.min <= w.max*(w.min+score)) {
+           // if floor(score/max)=limit/max-1 then this edit is only good
+           // if it makes the rest of the string match.  So check if
+           // the rest of the string matches to avoid the overhead of
+           // pushing it on then off the stack
+           
+           // delete a character from a
+           check_rest(a+1,b,score + w.del1);
+           
+           // delete a character from b
+           check_rest(a,b+1,score + w.del2);
+           
+           if (*a == *(b+1) && *b == *(a+1)) {
+
+             // swap two characters
+             check_rest(a+2,b+2, score + w.swap);
+
+           } else {
+
+             // substitute one character for another which is the same
+             // thing as deleting a character from both a & b
+             check_rest(a+1,b+1, score + w.sub);
+           
+           }
+         
+         } else {
+         
+           // delete a character from a
+           i->a = a + 1;
+           i->b = b;
+           i->score = score + w.del1;
+           ++i;
+         
+           // delete a character from b
+           i->a = a;
+           i->b = b + 1;
+           i->score = score + w.del2;
+           ++i;
+           
+           // If two characters can be swapped and make a match 
+           // then the substitution is pointless.
+           // Also, there is no need to push this on the stack as
+           // it is going to be imminently removed.
+           if (*a == *(b+1) && *b == *(a+1)) {
+             
+             // swap two characters
+             a = a + 2;
+             b = b + 2;
+             score += w.swap;
+             continue;
+             
+           } else {
+             
+             // substitute one character for another which is the same
+             // thing as deleting a character from both a & b
+             a = a + 1;
+             b = b + 1;
+             score += w.sub;
+             continue;
+           
+           }
+         }
+       }
+      }
+    FINISH:
+      if (i == begin) return min;
+      --i;
+      a = i->a;
+      b = i->b;
+      score = i->score;
+    }
+  }
+
+#undef check_rest
+#define check_rest(a,b,w)               \
+          a0 = a; b0 = b;               \
+          while(*a0 == *b0) {           \
+           if (*a0 == '\0') {          \
+             if (w < min) min = w;     \
+             break;                    \
+           }                           \
+           ++a0;                       \
+           ++b0;                       \
+          }                             \
+          if (amax < a0) amax = a0;
+
+#define check2(a,b,w)                                             \
+  aa = a; bb = b;                                                 \
+  while(*aa == *bb) {                                             \
+    if (*aa == '\0')  {                                           \
+      if (amax < aa) amax = aa;                                   \
+      if (w < min) min = w;                                       \
+      break;                                                      \
+    }                                                             \
+    ++aa; ++bb;                                                   \
+  }                                                               \
+  if (*aa == '\0') {                                              \
+    if (amax < aa) amax = aa;                                     \
+    if (*bb == '\0') {}                                           \
+    else if (*(bb+1) == '\0' && w+ws.del2 < min) min = w+ws.del2; \
+  } else if (*bb == '\0') {                                       \
+    ++aa;                                                         \
+    if (amax < aa) amax = aa;                                     \
+    if (*aa == '\0' && w+ws.del1 < min) min = w+ws.del1;          \
+  } else {                                                        \
+    check_rest(aa+1,bb,w+ws.del1);                                \
+    check_rest(aa,bb+1,w+ws.del2);                                \
+    if (*aa == *(bb+1) && *bb == *(aa+1)) {                       \
+      check_rest(aa+2,bb+2,w+ws.swap);                            \
+    } else {                                                      \
+      check_rest(aa+1,bb+1,w+ws.sub);                             \
+    }                                                             \
+  }
+
+  EditDist limit1_edit_distance(const char * a, const char * b,
+                               const EditDistanceWeights & ws)
+  {
+    int min = LARGE_NUM;
+    const char * a0;
+    const char * b0;
+    const char * amax = a;
+    
+    while(*a == *b) { 
+      if (*a == '\0') 
+       return EditDist(0, a);
+      ++a; ++b;
+    }
+
+    if (*a == '\0') {
+      
+      ++b;
+      if (*b == '\0') return EditDist(ws.del2, a);
+      return EditDist(LARGE_NUM, a);
+      
+    } else if (*b == '\0') {
+
+      ++a;
+      if (*a == '\0') return EditDist(ws.del1, a);
+      return EditDist(LARGE_NUM, a);
+      
+    } else {
+      
+      // delete a character from a
+      check_rest(a+1,b,ws.del1);
+      
+      // delete a character from b
+      check_rest(a,b+1,ws.del2);
+
+      if (*a == *(b+1) && *b == *(a+1)) {
+       
+       // swap two characters
+       check_rest(a+2,b+2,ws.swap);
+
+      } else {
+       
+       // substitute one character for another which is the same
+       // thing as deleting a character from both a & b
+       check_rest(a+1,b+1,ws.sub);
+       
+      }
+    }
+    return EditDist(min, amax);
+  }
+
+  EditDist limit2_edit_distance(const char * a, const char * b,
+                               const EditDistanceWeights & ws)
+  {
+    int min = LARGE_NUM;
+    const char * a0;
+    const char * b0;
+    const char * aa;
+    const char * bb;
+    const char * amax = a;
+    
+    while(*a == *b) { 
+      if (*a == '\0') 
+       return EditDist(0, a);
+      ++a; ++b;
+    }
+
+    if (*a == '\0') {
+      
+      ++b;
+      if (*b == '\0') return EditDist(ws.del2, a);
+      ++b;
+      if (*b == '\0') return EditDist(2*ws.del2, a);
+      return EditDist(LARGE_NUM, a);
+      
+    } else if (*b == '\0') {
+
+      ++a;
+      if (*a == '\0') return EditDist(ws.del1, a);
+      ++a;
+      if (*a == '\0') return EditDist(2*ws.del1, a);
+      return EditDist(LARGE_NUM, a);
+      
+    } else {
+      
+      // delete a character from a
+      check2(a+1,b,ws.del1);
+      
+      // delete a character from b
+      check2(a,b+1,ws.del2);
+
+      if (*a == *(b+1) && *b == *(a+1)) {
+       
+       // swap two characters
+       check2(a+2,b+2,ws.swap);
+
+      } else {
+       
+       // substitute one character for another which is the same
+       // thing as deleting a character from both a & b
+       check2(a+1,b+1,ws.sub);
+       
+      }
+    }
+    return EditDist(min, amax);
+  }
+}
+
+
diff --git a/modules/speller/default/leditdist.hpp b/modules/speller/default/leditdist.hpp
new file mode 100644 (file)
index 0000000..ba5230b
--- /dev/null
@@ -0,0 +1,68 @@
+
+#ifndef __aspeller_leditdist_hh__
+#define __aspeller_leditdist_hh__
+
+#include "weights.hpp"
+
+namespace aspeller {
+
+  // limit_edit_distance finds the shortest edit distance but will
+  // stop and return a number at least as large as LARGE_NUM if it has
+  // to do more edits than a set limit.
+  // Note that this does NOT mean that the score returned is <= limit*w.max
+  // as "sub" vs "submarine" will return 6*(cost of insertion) no matter what
+  // the limit is.
+  // The edit distance is 
+  // (cost of swap)(# of swaps) + (cost of deletion)(# of deletions) 
+  //   + (cost of insertion)(# of insertions) 
+  //   + (cost of substitutions)(# of substitutions)
+
+  // Preconditions:
+  //   max(strlen(a), strlen(b))*max(of the edit weights) <= 2^15
+  //     if violated than an incorrect result may be returned (which may be negative)
+  //     due to overflow of a short integer
+  //   (limit+1)*w.min < limit*w.max
+  //   limit <= 5 (use edit_distance if limit > 5)
+  // where w.min and w.max is the minimum and maximum cost of an edit
+  // respectfully.
+
+  // The running time is asymptotically bounded above by 
+  // (3^l)*n where l is the limit and n is the maxium of strlen(a),strlen(b)
+  // Based on my informal tests, however, the n does not really matter
+  // and the running time is more like (3^l).
+
+  // limit_edit_distance, based on my informal tests, turns out to be
+  // faster than edit_dist for l < 5.  For l == 5 it is about the 
+  // smaller for short strings (<= 5) and less than for longer strings
+
+  // limit2_edit_distance(a,b,w) = limit_edit_distance(a,b,2,w)
+  // but is roughly 2/3's faster
+
+  struct EditDist {
+    int          score;
+    const char * stopped_at;
+    EditDist() {}
+    EditDist(int s, const char * p) 
+      : score(s), stopped_at(p) {}
+    operator int () const {return score;}
+  };
+
+  static const int LARGE_NUM = 0xFFFFF; 
+  // this needs to be SMALLER than INT_MAX since it may be incremented 
+  // a few times
+
+  int limit_edit_distance(const char * a, const char * b, int limit, 
+                         const EditDistanceWeights & w 
+                         = EditDistanceWeights());
+  
+  EditDist limit1_edit_distance(const char * a, const char * b,
+                               const EditDistanceWeights & w 
+                               = EditDistanceWeights());
+
+  EditDist limit2_edit_distance(const char * a, const char * b,
+                               const EditDistanceWeights & w 
+                               = EditDistanceWeights());
+  
+}
+
+#endif
diff --git a/modules/speller/default/matrix.hpp b/modules/speller/default/matrix.hpp
new file mode 100644 (file)
index 0000000..9f46f29
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __aspeller_matrix_hh__
+#define __aspeller_matrix_hh__
+
+#include <vector>
+
+namespace aspeller {
+
+  class ShortMatrix {
+    int x_size;
+    int y_size;
+    short * data;
+  public:
+    void init(int sx, int sy, short * d) {x_size = sx; y_size = sy; data = d;}
+    ShortMatrix() {}
+    ShortMatrix(int sx, int sy, short * d) {init(sx,sy,d);}
+    short operator() (int x, int y) const {return data[x + y*x_size];}
+    short & operator() (int x, int y) {return data[x + y*x_size];}
+  };
+
+}
+
+#endif
diff --git a/modules/speller/default/multi_ws.cpp b/modules/speller/default/multi_ws.cpp
new file mode 100644 (file)
index 0000000..5c4935d
--- /dev/null
@@ -0,0 +1,88 @@
+
+#include "config.hpp"
+#include "data.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "string.hpp"
+#include "parm_string.hpp"
+#include "errors.hpp"
+#include "vector.hpp"
+
+#include "gettext.h"
+
+namespace {
+
+  using namespace acommon;
+  using namespace aspeller;
+
+  typedef Vector<Dict *> Wss;
+
+  class MultiDictImpl : public Dictionary
+  {
+  public:
+    MultiDictImpl() : Dictionary(multi_dict, "MultiDictImpl") {}
+    PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *);
+    DictsEnumeration * dictionaries() const;
+  private:
+    Wss wss;
+  };
+
+  PosibErr<void> MultiDictImpl::load(ParmString fn, 
+                                     Config & config, 
+                                     DictList * new_dicts,
+                                     SpellerImpl * speller)
+  {
+    String dir = figure_out_dir("",fn);
+    FStream in;
+    RET_ON_ERR(in.open(fn, "r"));
+    set_file_name(fn);
+    String buf; DataPair d;
+    while(getdata_pair(in, d, buf)) 
+    {
+      if (d.key == "add") {
+
+        RET_ON_ERR_SET(add_data_set(d.value, config, new_dicts, speller, dir), Dict *, res);
+        RET_ON_ERR(set_check_lang(res->lang()->name(), config));
+       wss.push_back(res);
+
+      } else {
+       
+       return make_err(unknown_key, d.key).with_file(fn, d.line_num);
+
+      }
+    }
+
+    if (wss.empty()) {
+      return make_err(bad_file_format, fn, 
+                      _("There must be at least one \"add\" line."));
+    }
+
+    return no_err;
+  }
+
+  struct Parms
+  {
+    typedef Dict * Value;
+    typedef Wss::const_iterator Iterator;
+    Iterator end;
+    Parms(Iterator e) : end(e) {}
+    bool endf(Iterator i)   const {return i == end;}
+    Value end_state()       const {return 0;}
+    Value deref(Iterator i) const {return *i;}
+  };
+
+  DictsEnumeration * MultiDictImpl::dictionaries() const
+  {
+    return new MakeEnumeration<Parms>(wss.begin(), wss.end());
+  }
+}
+
+namespace aspeller {
+
+  MultiDict * new_default_multi_dict() 
+  {
+    return new MultiDictImpl();
+  }
+
+}
diff --git a/modules/speller/default/phonet.cpp b/modules/speller/default/phonet.cpp
new file mode 100644 (file)
index 0000000..281aed4
--- /dev/null
@@ -0,0 +1,472 @@
+/*  phonetic.c - generic replacement aglogithms for phonetic transformation
+    Copyright (C) 2000 Björn Jacke
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License version 2.1 as published by the Free Software Foundation;
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Björn Jacke may be reached by email at bjoern.jacke@gmx.de
+
+    Changelog:
+
+    2000-01-05  Björn Jacke <bjoern.jacke@gmx.de>
+                Initial Release insprired by the article about phonetic
+                transformations out of c't 25/1999
+
+*/
+
+#include <string.h>
+#include <assert.h>
+
+#include <vector>
+
+#include "asc_ctype.hpp"
+#include "string.hpp"
+#include "phonet.hpp"
+#include "errors.hpp"
+#include "fstream.hpp"
+#include "getdata.hpp"
+#include "language.hpp"
+#include "objstack.hpp"
+#include "vararray.hpp"
+
+using namespace acommon;
+
+namespace aspeller {
+
+  const char * const PhonetParms::rules_end = "";
+  
+  static bool to_bool(const String & str) {
+    if (str == "1" || str == "true") return true;
+    else return false;
+  }
+#if 0
+  void dump_phonet_rules(ostream & out, const PhonetParms & parms) {
+    out << "version         " << parms.version << "\n";
+    out << "followup        " << parms.followup << "\n";
+    out << "collapse_result " << parms.collapse_result << "\n";
+    out << "\n";
+    ios::fmtflags flags = out.setf(ios::left);
+    for (int i = 0; parms.rules[i] != PhonetParms::rules_end; i += 2) {
+      out << setw(20) << parms.rules[i] << " " 
+         << (parms.rules[i+1][0] == '\0' ? "_" : parms.rules[i+1])
+         << "\n";
+    }
+    out.flags(flags);
+  }
+#endif
+
+  struct PhonetParmsImpl : public PhonetParms {
+    void * data;
+    ObjStack strings;
+    PhonetParmsImpl() : data(0) {}
+    ~PhonetParmsImpl() {if (data) free(data);}
+  };
+
+  static void init_phonet_hash(PhonetParms & parms);
+
+  // like strcpy but safe if the strings overlap
+  //   but only if dest < src
+  static inline void strmove(char * dest, char * src) {
+    while (*src) 
+      *dest++ = *src++;
+    *dest = '\0';
+  }
+  
+  PosibErr<PhonetParms *> new_phonet(const String & file, 
+                                     Conv & iconv,
+                                     const Language * lang) 
+  {
+    String buf; DataPair dp;
+
+    FStream in;
+    RET_ON_ERR(in.open(file, "r"));
+
+    PhonetParmsImpl * parms = new PhonetParmsImpl();
+
+    parms->lang = lang;
+
+    parms->followup        = true;
+    parms->collapse_result = false;
+    parms->remove_accents  = true;
+
+    int num = 0;
+    while (getdata_pair(in, dp, buf)) {
+      if (dp.key != "followup" && dp.key != "collapse_result" &&
+         dp.key != "version")
+       ++num;
+    }
+
+    in.restart();
+
+    size_t vsize = sizeof(char *) * (2 * num + 2);
+    parms->data = malloc(vsize);
+
+    const char * * r = (const char * *)parms->data;
+
+    char * empty_str = parms->strings.dup("");
+
+    while (true) {
+      if (!getdata_pair(in, dp, buf)) break;
+      if (dp.key == "followup") {
+       parms->followup = to_bool(dp.value);
+      } else if (dp.key == "collapse_result") {
+       parms->collapse_result = to_bool(dp.value);
+      } else if (dp.key == "version") {
+       parms->version = dp.value;
+      } else if (dp.key == "remove_accents") {
+        parms->remove_accents = to_bool(dp.value);
+      } else {
+       *r = parms->strings.dup(iconv(dp.key));
+       ++r;
+       if (dp.value == "_") {
+         *r = empty_str;
+       } else {
+         *r = parms->strings.dup(iconv(dp.value));
+       }
+       ++r;
+      }
+    }
+    if (parms->version.empty()) {
+      delete parms;
+      return make_err(bad_file_format, file, "You must specify a version string");
+    }
+    *(r  ) = PhonetParms::rules_end;
+    *(r+1) = PhonetParms::rules_end;
+    parms->rules = (const char * *)parms->data;
+
+
+    for (unsigned i = 0; i != 256; ++i) {
+      parms->to_clean[i] = (lang->char_type(i) > Language::NonLetter 
+                            ? (parms->remove_accents 
+                               ? lang->to_upper(lang->de_accent(i)) 
+                               : lang->to_upper(i))
+                            : 0);
+    }
+
+    init_phonet_hash(*parms);
+
+    return parms;
+  }
+
+  static void init_phonet_hash(PhonetParms & parms) 
+  {
+    int i, k;
+
+    for (i = 0; i < parms.hash_size; i++) {
+      parms.hash[i] = -1;
+    }
+
+    for (i = 0; parms.rules[i] != PhonetParms::rules_end; i += 2) {
+      /**  set hash value  **/
+      k = (unsigned char) parms.rules[i][0];
+
+      if (parms.hash[k] < 0) {
+       parms.hash[k] = i;
+      }
+    }
+  }
+
+
+#ifdef PHONET_TRACE
+  void trace_info(char * text, int n, char * error,
+                 const PhonetParms & parms) 
+  {
+    /**  dump tracing info  **/
+    
+    printf ("%s %d:  \"%s\"  >  \"%s\" %s", text, ((n/2)+1), parms.rules[n],
+           parms.rules[n+1], error);
+  }
+#endif
+
+  int phonet (const char * inword, char * target,
+              int len,
+             const PhonetParms & parms)
+  {
+    /**       Do phonetic transformation.       **/
+    /**  "len" = length of "inword" incl. '\0'. **/
+
+    /**  result:  >= 0:  length of "target"    **/
+    /**            otherwise:  error            **/
+
+    int  i,j,k=0,n,p,z;
+    int  k0,n0,p0=-333,z0;
+    if (len == -1) len = strlen(inword);
+    VARARRAY(char, word, len + 1);
+    char c, c0;
+    const char * s;
+
+    typedef unsigned char uchar;
+    
+    /**  to convert string to uppercase and possible remove accents **/
+    char * res = word;
+    for (const char * str = inword; *str; ++str) {
+      char c = parms.to_clean[(uchar)*str];
+      if (c) *res++ = c;
+    }
+    *res = '\0';
+    
+    /**  check word  **/
+    i = j = z = 0;
+    while ((c = word[i]) != '\0') {
+      #ifdef PHONET_TRACE
+         cout << "\nChecking position " << j << ":  word = \""
+              << word+i << "\",";
+         printf ("  target = \"%.*s\"", j, target);
+      #endif
+      n = parms.hash[(uchar) c];
+      z0 = 0;
+
+      if (n >= 0) {
+        /**  check all rules for the same letter  **/
+        while (parms.rules[n][0] == c) {
+          #ifdef PHONET_TRACE
+             trace_info ("\n> Checking rule No.",n,"",parms);
+          #endif
+
+          /**  check whole string  **/
+          k = 1;   /** number of found letters  **/
+          p = 5;   /** default priority  **/
+          s = parms.rules[n];
+          s++;     /**  important for (see below)  "*(s-1)"  **/
+          
+          while (*s != '\0'  &&  word[i+k] == *s
+                 &&  !asc_isdigit (*s)  &&  strchr ("(-<^$", *s) == NULL) {
+            k++;
+            s++;
+          }
+          if (*s == '(') {
+            /**  check letters in "(..)"  **/
+            if (parms.lang->is_alpha(word[i+k])  // ...could be implied?
+                && strchr(s+1, word[i+k]) != NULL) {
+              k++;
+              while (*s != ')')
+                s++;
+              s++;
+            }
+          }
+          p0 = (int) *s;
+          k0 = k;
+          while (*s == '-'  &&  k > 1) {
+            k--;
+            s++;
+          }
+          if (*s == '<')
+            s++;
+          if (asc_isdigit (*s)) {
+            /**  determine priority  **/
+            p = *s - '0';
+            s++;
+          }
+          if (*s == '^'  &&  *(s+1) == '^')
+            s++;
+
+          if (*s == '\0'
+              || (*s == '^'  
+                  && (i == 0  ||  ! parms.lang->is_alpha(word[i-1]))
+                  && (*(s+1) != '$'
+                      || (! parms.lang->is_alpha(word[i+k0]) )))
+              || (*s == '$'  &&  i > 0  
+                  &&  parms.lang->is_alpha(word[i-1])
+                  && (! parms.lang->is_alpha(word[i+k0]) ))) 
+          {
+            /**  search for followup rules, if:     **/
+            /**  parms.followup and k > 1  and  NO '-' in searchstring **/
+            c0 = word[i+k-1];
+            n0 = parms.hash[(uchar) c0];
+//
+            if (parms.followup  &&  k > 1  &&  n0 >= 0
+                &&  p0 != (int) '-'  &&  word[i+k] != '\0') {
+              /**  test follow-up rule for "word[i+k]"  **/
+              while (parms.rules[n0][0] == c0) {
+                #ifdef PHONET_TRACE
+                    trace_info ("\n> > follow-up rule No.",n0,"... ",parms);
+                #endif
+
+                /**  check whole string  **/
+                k0 = k;
+                p0 = 5;
+                s = parms.rules[n0];
+                s++;
+                while (*s != '\0'  &&  word[i+k0] == *s
+                       && ! asc_isdigit(*s)  &&  strchr("(-<^$",*s) == NULL) {
+                  k0++;
+                  s++;
+                }
+                if (*s == '(') {
+                  /**  check letters  **/
+                  if (parms.lang->is_alpha(word[i+k0])
+                      &&  strchr (s+1, word[i+k0]) != NULL) {
+                    k0++;
+                    while (*s != ')'  &&  *s != '\0')
+                      s++;
+                    if (*s == ')')
+                      s++;
+                  }
+                }
+                while (*s == '-') {
+                  /**  "k0" gets NOT reduced   **/
+                  /**  because "if (k0 == k)"  **/
+                  s++;
+                }
+                if (*s == '<')
+                  s++;
+                if (asc_isdigit (*s)) {
+                  p0 = *s - '0';
+                  s++;
+                }
+
+                if (*s == '\0'
+                    /**  *s == '^' cuts  **/
+                    || (*s == '$'  &&  ! parms.lang->is_alpha(word[i+k0]))) 
+                {
+                  if (k0 == k) {
+                    /**  this is just a piece of the string  **/
+                    #ifdef PHONET_TRACE
+                        cout << "discarded (too short)";
+                    #endif
+                    n0 += 2;
+                    continue;
+                  }
+
+                  if (p0 < p) {
+                    /**  priority too low  **/
+                    #ifdef PHONET_TRACE
+                        cout << "discarded (priority)";
+                    #endif
+                    n0 += 2;
+                    continue;
+                  }
+                  /**  rule fits; stop search  **/
+                  break;
+                }
+                #ifdef PHONET_TRACE
+                    cout << "discarded";
+                #endif
+                n0 += 2;
+              } /**  End of "while (parms.rules[n0][0] == c0)"  **/
+
+              if (p0 >= p  && parms.rules[n0][0] == c0) {
+                #ifdef PHONET_TRACE
+                    trace_info ("\n> Rule No.", n,"",parms);
+                    trace_info ("\n> not used because of follow-up",
+                                      n0,"",parms);
+                #endif
+                n += 2;
+                continue;
+              }
+            } /** end of follow-up stuff **/
+
+            /**  replace string  **/
+            #ifdef PHONET_TRACE
+                trace_info ("\nUsing rule No.", n,"\n",parms);
+            #endif
+            s = parms.rules[n+1];
+            p0 = (parms.rules[n][0] != '\0'
+                 &&  strchr (parms.rules[n]+1,'<') != NULL) ? 1:0;
+            if (p0 == 1 &&  z == 0) {
+              /**  rule with '<' is used  **/
+              if (j > 0  &&  *s != '\0'
+                 && (target[j-1] == c  ||  target[j-1] == *s)) {
+                j--;
+              }
+              z0 = 1;
+              z = 1;
+              k0 = 0;
+              while (*s != '\0'  &&  word[i+k0] != '\0') {
+                word[i+k0] = *s;
+                k0++;
+                s++;
+              }
+              if (k > k0)
+                strmove (&word[0]+i+k0, &word[0]+i+k);
+
+              /**  new "actual letter"  **/
+              c = word[i];
+            }
+            else { /** no '<' rule used **/
+              i += k - 1;
+              z = 0;
+              while (*s != '\0'
+                     &&  *(s+1) != '\0'  &&  j < len) {
+                if (j == 0  ||  target[j-1] != *s) {
+                  target[j] = *s;
+                  j++;
+                }
+                s++;
+              }
+              /**  new "actual letter"  **/
+              c = *s;
+              if (parms.rules[n][0] != '\0'
+                 &&  strstr (parms.rules[n]+1, "^^") != NULL) {
+                if (c != '\0') {
+                  target[j] = c;
+                  j++;
+                }
+                strmove (&word[0], &word[0]+i+1);
+                i = 0;
+                z0 = 1;
+              }
+            }
+            break;
+          }  /** end of follow-up stuff **/
+          n += 2;
+        } /**  end of while (parms.rules[n][0] == c)  **/
+      } /**  end of if (n >= 0)  **/
+      if (z0 == 0) {
+        if (k && (assert(p0!=-333),!p0) &&  j < len &&  c != '\0'
+           && (!parms.collapse_result  ||  j == 0  ||  target[j-1] != c)){
+           /**  condense only double letters  **/
+          target[j] = c;
+         ///printf("\n setting \n");
+          j++;
+        }
+        #ifdef PHONET_TRACE
+        else if (p0 || !k)
+          cout << "\nNo rule found; character \"" << word[i] << "\" skipped\n";
+        #endif
+
+        i++;
+        z = 0;
+       k=0;
+      }
+    }  /**  end of   while ((c = word[i]) != '\0')  **/
+
+    target[j] = '\0';
+    return (j);
+
+  }  /**  end of function "phonet"  **/
+}
+
+#if 0
+
+int main (int argc, char *argv[]) {
+  using namespace autil;
+
+  if (argc < 3) {
+    printf ("Usage:  phonet <data file> <word>\n");
+    return(1);
+  }
+
+  char phone_word[strlen(argv[2])+1]; /**  max possible length of words  **/
+
+  PhonetParms * parms;
+  ifstream f(argv[1]);
+  parms = load_phonet_rules(f);
+
+  init_phonet_charinfo(*parms);
+  init_phonet_hash(*parms);
+  phonet (argv[2],phone_word,*parms);
+  printf ("%s\n", phone_word);
+  return(0);
+}
+#endif
diff --git a/modules/speller/default/phonet.hpp b/modules/speller/default/phonet.hpp
new file mode 100644 (file)
index 0000000..8c24b75
--- /dev/null
@@ -0,0 +1,70 @@
+/*  phonetic.c - generic replacement aglogithms for phonetic transformation
+    Copyright (C) 2000 Björn Jacke
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License version 2.1 as published by the Free Software Foundation;
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Björn Jacke may be reached by email at bjoern.jacke@gmx.de
+*/
+
+#ifndef ASPELLER_PHONET__HPP
+#define ASPELLER_PHONET__HPP
+
+#include "string.hpp"
+#include "posib_err.hpp"
+
+using namespace acommon;
+
+namespace acommon {struct Conv;}
+
+namespace aspeller {
+
+  class Language;
+
+  struct PhonetParms {
+    String version;
+    
+    bool followup;
+    bool collapse_result;
+
+    bool remove_accents;
+
+    static const char * const rules_end;
+    const char * * rules;
+
+    const Language * lang;
+
+    char to_clean[256];
+
+    static const int hash_size = 256;
+    int hash[hash_size];
+
+    virtual ~PhonetParms() {}
+  };
+
+  int phonet (const char * inword, char * target, 
+              int len,
+             const PhonetParms & parms);
+
+#if 0
+  void dump_phonet_rules(std::ostream & out, const PhonetParms & parms);
+  // the istream must be seekable
+#endif
+
+  PosibErr<PhonetParms *> new_phonet(const String & file, 
+                                     Conv & iconv,
+                                     const Language * lang);
+
+}
+
+#endif
diff --git a/modules/speller/default/phonetic.cpp b/modules/speller/default/phonetic.cpp
new file mode 100644 (file)
index 0000000..410b58c
--- /dev/null
@@ -0,0 +1,208 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#include "language.hpp"
+#include "phonetic.hpp"
+#include "phonet.hpp"
+
+#include "file_util.hpp"
+#include "file_data_util.hpp"
+#include "clone_ptr-t.hpp"
+
+namespace aspeller {
+  
+  class SimpileSoundslike : public Soundslike {
+  private:
+    const Language * lang;
+    char first[256];
+    char rest[256];
+  public:
+    SimpileSoundslike(const Language * l) : lang(l) {}
+
+    PosibErr<void> setup(Conv &) {
+      memcpy(first, lang->sl_first_, 256);
+      memcpy(rest,  lang->sl_rest_, 256);
+      return no_err;
+    }
+    
+    String soundslike_chars() const {
+      bool chars_set[256] = {0};
+      for (int i = 0; i != 256; ++i) 
+      {
+        char c = first[i];
+        if (c) chars_set[static_cast<unsigned char>(c)] = true;
+        c = rest[i];
+        if (c) chars_set[static_cast<unsigned char>(c)] = true;
+      }
+      String     chars_list;
+      for (int i = 0; i != 256; ++i) 
+      {
+        if (chars_set[i]) 
+          chars_list += static_cast<char>(i);
+      }
+      return chars_list;
+    }
+    
+    char * to_soundslike(char * res, const char * str, int size) const 
+    {
+      char prev, cur = '\0';
+
+      const char * i = str;
+      while (*i) {
+        cur = first[static_cast<unsigned char>(*i++)];
+        if (cur) {*res++ = cur; break;}
+      }
+      prev = cur;
+      
+      while (*i) {
+       cur = rest[static_cast<unsigned char>(*i++)];
+       if (cur && cur != prev) *res++ = cur;
+       prev = cur;
+      }
+      *res = '\0';
+      return res;
+    }
+
+    const char * name () const {
+      return "simple";
+    }
+    const char * version() const {
+      return "2.0";
+    }
+  };
+
+  class NoSoundslike : public Soundslike {
+  private:
+    const Language * lang;
+  public:
+    NoSoundslike(const Language * l) : lang(l) {}
+
+    PosibErr<void> setup(Conv &) {return no_err;}
+    
+    String soundslike_chars() const {
+      return get_clean_chars(*lang);
+    }
+
+    char * to_soundslike(char * res, const char * str, int size) const 
+    {
+      return lang->LangImpl::to_clean(res, str);
+    }
+
+    const char * name() const {
+      return "none";
+    }
+    const char * version() const {
+      return "1.0";
+    }
+  };
+
+  class StrippedSoundslike : public Soundslike {
+  private:
+    const Language * lang;
+  public:
+    StrippedSoundslike(const Language * l) : lang(l) {}
+
+    PosibErr<void> setup(Conv &) {return no_err;}
+    
+    String soundslike_chars() const {
+      return get_stripped_chars(*lang);
+    }
+
+    char * to_soundslike(char * res, const char * str, int size) const 
+    {
+      return lang->LangImpl::to_stripped(res, str);
+    }
+
+    const char * name() const {
+      return "stripped";
+    }
+    const char * version() const {
+      return "1.0";
+    }
+  };
+
+  class PhonetSoundslike : public Soundslike {
+
+    const Language * lang;
+    StackPtr<PhonetParms> phonet_parms;
+    
+  public:
+
+    PhonetSoundslike(const Language * l) : lang(l) {}
+
+    PosibErr<void> setup(Conv & iconv) {
+      String file;
+      file += lang->data_dir();
+      file += '/';
+      file += lang->name();
+      file += "_phonet.dat";
+      PosibErr<PhonetParms *> pe = new_phonet(file, iconv, lang);
+      if (pe.has_err()) return pe;
+      phonet_parms.reset(pe);
+      return no_err;
+    }
+
+
+    String soundslike_chars() const 
+    {
+      bool chars_set[256] = {0};
+      String     chars_list;
+      for (const char * * i = phonet_parms->rules + 1; 
+          *(i-1) != PhonetParms::rules_end;
+          i += 2) 
+      {
+        for (const char * j = *i; *j; ++j) 
+        {
+          chars_set[static_cast<unsigned char>(*j)] = true;
+        }
+      }
+      for (int i = 0; i != 256; ++i) 
+      {
+        if (chars_set[i]) 
+          chars_list += static_cast<char>(i);
+      }
+      return chars_list;
+    }
+    
+    char * to_soundslike(char * res, const char * str, int size) const 
+    {
+      int new_size = phonet(str, res, size, *phonet_parms);
+      return res + new_size;
+    }
+    
+    const char * name() const
+    {
+      return "phonet";
+    }
+    const char * version() const 
+    {
+      return phonet_parms->version.c_str();
+    }
+  };
+  
+  
+  PosibErr<Soundslike *> new_soundslike(ParmString name, 
+                                        Conv & iconv,
+                                        const Language * lang)
+  {
+    Soundslike * sl;
+    if (name == "simple" || name == "generic") {
+      sl = new SimpileSoundslike(lang);
+    } else if (name == "stripped") {
+      sl = new StrippedSoundslike(lang);
+    } else if (name == "none") {
+      sl = new NoSoundslike(lang);
+    } else if (name == lang->name()) {
+      sl = new PhonetSoundslike(lang);
+    } else {
+      abort(); // FIXME
+    }
+    PosibErrBase pe = sl->setup(iconv);
+    if (pe.has_err()) {
+      delete sl;
+      return pe;
+    } else {
+      return sl;
+    }
+  }
+}
+
diff --git a/modules/speller/default/phonetic.hpp b/modules/speller/default/phonetic.hpp
new file mode 100644 (file)
index 0000000..9c5fe0a
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef __aspeller_phonetic__
+#define __aspeller_phonetic__
+
+#include "string.hpp"
+
+using namespace acommon;
+
+namespace acommon {struct Conv;}
+
+namespace aspeller {
+
+  class Language;
+
+  class Soundslike {
+  public:
+    virtual String soundslike_chars() const = 0;
+    // string must be null terminated even if len is given
+    virtual char * to_soundslike(char *, const char *, int len = -1) const = 0;
+    virtual const char * name() const = 0;
+    virtual const char * version() const = 0;
+    virtual PosibErr<void> setup(Conv &) = 0;
+    virtual ~Soundslike() {}
+  };
+
+  PosibErr<Soundslike *> new_soundslike(ParmString name,
+                                        Conv & conv,
+                                        const Language * lang);
+};
+
+#endif
diff --git a/modules/speller/default/primes.cpp b/modules/speller/default/primes.cpp
new file mode 100644 (file)
index 0000000..1422097
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright (c) 2000
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#include "primes.hpp"
+#include <cmath>
+#include <cassert>
+
+namespace aspeller {
+
+  using namespace std;
+
+  void Primes::resize(size_type s) {
+    size_type i, j = 2;
+    data.resize(s);
+    for(i = 0; i < s; ++i) 
+      data[i] = true;
+    if (s > 0)
+      data[0] = false;
+    if (s > 1)
+      data[1] = false;
+    size_type sqrt_s = static_cast<size_type>(sqrt(static_cast<double>(s)));
+    while (j < sqrt_s) {
+      for (i = 2*j; i < s; i += j) {
+       data[i] = false;
+      }
+      ++j;
+      for (;j < sqrt_s && !data[j]; ++j);
+    }
+  }
+
+  bool Primes::is_prime(size_type n) const {
+    if (n < size()) {
+      return data[n];
+    } else {
+      size_type e = static_cast<size_type>(sqrt(static_cast<double>(n)));
+      assert(e < size());
+      for (const_iterator i = begin(); *i <= e; ++i) 
+       if (!(n % *i)) return false;
+      return true;
+    }
+  }
+}
diff --git a/modules/speller/default/primes.hpp b/modules/speller/default/primes.hpp
new file mode 100644 (file)
index 0000000..5acd6b4
--- /dev/null
@@ -0,0 +1,129 @@
+// Copyright (c) 2000
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#include <vector>
+
+namespace aspeller {
+
+  class Primes {
+  private:
+    typedef std::vector<bool> Data;
+    Data data;
+  public:
+    typedef Data::size_type size_type;
+    typedef Data::size_type value_type;
+  
+    Primes() {}
+    Primes(size_type s) {resize(s);}
+    size_type size() const {return data.size();}
+    void resize(size_type s);
+    bool operator[] (size_type pos) const {return data[pos];}
+    bool is_prime(size_type n) const;
+    size_type max_num() const {return (size()-1)*(size()-1);}
+    
+    //
+    // Iterators
+    //
+
+    class const_reverse_iterator;
+    class const_iterator {
+      friend class Primes;
+      friend class const_reverse_iterator;
+    protected:
+      size_type     pos;
+      const Primes* data;
+      const_iterator(const Primes *d, size_type p) {data = d; pos = p;}
+    public:
+      const_iterator() {}
+      size_type operator* () {return pos;}
+      const_iterator& operator++ () {
+       size_type size = data->size();
+       if (pos != size)
+         do {++pos;} while (pos != size && !(*data)[pos]);
+       return *this;
+      }
+      const_iterator operator++ (int) {
+       const_iterator temp = *this;
+       operator++();
+       return temp;
+      }
+      const_iterator& operator-- () {
+       if (pos != 0)
+         do {--pos;} while (pos != 0 && !(*data)[pos]);
+       return *this;
+      }
+      const_iterator operator-- (int) {
+       const_iterator temp = *this;
+       operator--();
+       return temp;
+      }
+      const_iterator& jump(size_type p) {
+       pos = p;
+       if (!(*data)[pos])
+         operator++();
+       return *this;
+      }
+
+      inline friend bool operator == (const const_iterator &rhs,
+                                     const const_iterator &lhs) {
+       return rhs.data == lhs.data && rhs.pos == lhs.pos;
+      }
+    };
+    typedef const_iterator iterator;
+
+    class const_reverse_iterator : private const_iterator {
+      friend class Primes;
+    protected:
+      const_reverse_iterator(const Primes *d, size_type p) {data = d; pos = p;}
+    public:
+      const_reverse_iterator() {}
+      const_reverse_iterator(const const_iterator &other) :
+       const_iterator(other) {}
+      size_type operator* () const {return pos;}
+      const_reverse_iterator& operator++ () {const_iterator::operator--(); return *this;}
+      const_reverse_iterator operator++ (int){return const_iterator::operator--(1);}
+      const_reverse_iterator& operator-- () {const_iterator::operator++(); return *this;}
+      const_reverse_iterator operator-- (int) {return const_iterator::operator++(1); return *this;}
+    
+      const_reverse_iterator& jump(size_type p) {
+       pos = p;
+       if (!(*data)[pos])
+         operator++();
+       return *this;
+      }
+
+      inline friend bool operator == (const const_reverse_iterator &rhs,
+                                     const const_reverse_iterator &lhs) {
+       return rhs.data == lhs.data && rhs.pos == lhs.pos;
+      }
+    };    
+    typedef const_reverse_iterator reverse_iterator;
+
+    typedef Data::const_iterator const_ra_iterator;
+    typedef const_ra_iterator                ra_iterator;
+    typedef Data::const_reverse_iterator const_reverse_ra_iterator;
+    typedef const_reverse_ra_iterator                reverse_ra_iterator;
+
+    const_iterator begin() const {return const_iterator(this, 2);}
+    const_iterator end() const {return const_iterator(this, size());}
+    const_iterator jump(size_type p) {return const_iterator(this,0).jump(p);}
+    const_reverse_iterator rbegin() const {return ++const_reverse_iterator(this, size());}
+    const_reverse_iterator rend() const {return const_reverse_iterator(this, 0);}
+    const_reverse_iterator rjump(size_type p) {return const_reverse_iterator(this,0).jump(p);}
+
+    const_ra_iterator ra_begin() const {return data.begin();}
+    const_ra_iterator ra_end() const {return data.end();}
+    const_reverse_ra_iterator r_ra_begin() const {return data.rbegin();}
+    const_reverse_ra_iterator r_ra_end() const {return data.rend();}
+  };
+
+}
diff --git a/modules/speller/default/readonly_ws.cpp b/modules/speller/default/readonly_ws.cpp
new file mode 100644 (file)
index 0000000..7724076
--- /dev/null
@@ -0,0 +1,1191 @@
+// This file is part of The New Aspell
+// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+// Aspell's main word list is laid out as follows:
+//
+// * header
+// * jump table for editdist 1
+// * jump table for editdist 2
+// * data block
+// * hash table
+
+// data block laid out as follows:
+//
+// Words:
+//   (<8 bit frequency><8 bit: flags><8 bit: offset>
+//      <8 bit: word size><word><null>
+//      [<affix info><null>][<category info><null>])+
+// Words with soundslike:
+//   (<8 bit: offset to next item><8 bit: soundslike size><soundslike>
+//      <words>)+
+// Flags are mapped as follows:
+//   bits 0-3: word info
+//   bit    4: duplicate flag
+//   bit    5: <unused>
+//   bit    6: have affix info
+//   bit    7: have compound info
+
+#include <utility>
+using std::pair;
+
+#include <string.h>
+#include <stdio.h>
+//#include <errno.h>
+
+#include "settings.h"
+
+#include "block_vector.hpp"
+#include "config.hpp"
+#include "data.hpp"
+#include "data_util.hpp"
+#include "errors.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "language.hpp"
+#include "stack_ptr.hpp"
+#include "objstack.hpp"
+#include "vector.hpp"
+#include "vector_hash-t.hpp"
+#include "check_list.hpp"
+#include "lsort.hpp"
+
+#include "iostream.hpp"
+
+#include "gettext.h"
+
+typedef unsigned int   u32int;
+static const u32int u32int_max = (u32int)-1;
+typedef unsigned short u16int;
+typedef unsigned char byte;
+
+#ifdef HAVE_MMAP 
+
+// POSIX headers
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+#endif
+
+#ifndef MAP_FAILED 
+#define MAP_FAILED (-1)
+#endif
+
+#ifdef HAVE_MMAP
+
+static inline char * mmap_open(unsigned int block_size, 
+                              FStream & f, 
+                              unsigned int offset) 
+{
+  f.flush();
+  int fd = f.file_no();
+  return static_cast<char *>
+    (mmap(NULL, block_size, PROT_READ, MAP_SHARED, fd, offset));
+}
+
+static inline void mmap_free(char * block, unsigned int size) 
+{
+  munmap(block, size);
+}
+
+#else
+
+static inline char * mmap_open(unsigned int, 
+                              FStream & f, 
+                              unsigned int) 
+{
+  return reinterpret_cast<char *>(MAP_FAILED);
+}
+
+static inline void mmap_free(char *, unsigned int) 
+{
+  abort();
+}
+
+#endif
+
+static byte HAVE_AFFIX_FLAG = 1 << 7;
+static byte HAVE_CATEGORY_FLAG = 1 << 6;
+
+static byte DUPLICATE_FLAG = 1 << 4;
+// this flag is set when there is is more than one word for a
+// particulear "clean" word such as "jello" "Jello".  It is set on all
+// but the last word of the group.  Ie, if it is set than the next
+// word when converted to its "clean" form equals the same value.
+
+static byte WORD_INFO_MASK = 0x0F;
+
+static const int FREQUENCY_INFO_O = 4;
+static const int FLAGS_O = 3;
+static const int NEXT_O = 2;
+static const int WORD_SIZE_O = 1;
+
+static inline int get_word_size(const char * d) {
+  return *reinterpret_cast<const byte *>(d - WORD_SIZE_O);
+}
+
+static inline byte get_flags(const char * d) {
+  return *reinterpret_cast<const byte *>(d - FLAGS_O);
+}
+
+static inline byte get_offset(const char * d) {
+  return *reinterpret_cast<const byte *>(d - NEXT_O);
+}
+
+static inline const char * get_next(const char * d) {
+  return d + *reinterpret_cast<const byte *>(d - NEXT_O);
+}
+
+static inline const char * get_sl_words_begin(const char * d) {
+  return d + *reinterpret_cast<const byte *>(d - WORD_SIZE_O) + 4;
+  // FIXME: This isn't right when frequency info is stored in the table
+}
+
+// get_next might go past the end so don't JUST compare
+// for equality.  Ie use while (cur < end) not (cur != end)
+static inline const char * get_sl_words_end(const char * d) {
+  return get_next(d) - 3;
+}
+
+static inline const char * get_affix(const char * d) {
+  int word_size = get_word_size(d);
+  if (get_flags(d) & HAVE_AFFIX_FLAG) 
+    return d + word_size +  1;
+  else
+    return d + word_size;
+}
+
+static inline const char * get_category(const char * d) {
+  int word_size = get_word_size(d);
+  if (get_flags(d) & (HAVE_AFFIX_FLAG | HAVE_CATEGORY_FLAG)) 
+    return d + strlen(d + word_size +  1) + 1;
+  else if (get_flags(d) & HAVE_CATEGORY_FLAG)
+    return d + word_size +  1;
+  else
+    return d + word_size;
+}
+
+static inline bool duplicate_flag(const char * d) {
+  return get_flags(d) & DUPLICATE_FLAG;
+}
+
+namespace {
+
+  using namespace aspeller;
+
+  /////////////////////////////////////////////////////////////////////
+  // 
+  //  ReadOnlyDict
+  //
+    
+  struct Jump
+  {
+    char   sl[4];
+    u32int loc;
+    Jump() {memset(this, 0, sizeof(Jump));}
+  };
+  
+  class ReadOnlyDict : public Dictionary
+  {
+
+  public: //but don't use
+
+    struct WordLookupParms {
+      const char * block_begin;
+      WordLookupParms() {}
+      typedef BlockVector<const u32int> Vector;
+      typedef u32int                    Value;
+      typedef const char *              Key;
+      static const bool is_multi = false;
+      Key key(Value v) const {return block_begin + v;}
+      InsensitiveHash  hash;
+      InsensitiveEqual equal;
+      bool is_nonexistent(Value v) const {return v == u32int_max;}
+      void make_nonexistent(const Value & v) const {abort();}
+    };
+    typedef VectorHashTable<WordLookupParms> WordLookup;
+
+  public: // but don't use
+      
+    char *           block;
+    u32int           block_size;
+    char *           mmaped_block;
+    u32int           mmaped_size;
+    const Jump * jump1;
+    const Jump * jump2;
+    WordLookup       word_lookup;
+    const char *     word_block;
+    const char *     first_word;
+    
+    ReadOnlyDict(const ReadOnlyDict&);
+    ReadOnlyDict& operator= (const ReadOnlyDict&);
+
+    struct Elements;
+    struct SoundslikeElements;
+
+  public:
+    WordEntryEnumeration * detailed_elements() const;
+    Size      size()     const;
+    bool      empty()    const;
+
+    ReadOnlyDict() 
+      : Dictionary(basic_dict, "ReadOnlyDict")
+    {
+      block = 0;
+    }
+
+    ~ReadOnlyDict() {
+      if (block != 0) {
+       if (mmaped_block)
+         mmap_free(mmaped_block, mmaped_size);
+       else
+         free(block);
+      }
+    }
+    
+    PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *);
+
+    bool lookup(ParmString word, const SensitiveCompare *, WordEntry &) const;
+
+    bool clean_lookup(ParmString, WordEntry &) const;
+
+    bool soundslike_lookup(const WordEntry &, WordEntry &) const;
+    bool soundslike_lookup(ParmString, WordEntry &) const;
+    
+    SoundslikeEnumeration * soundslike_elements() const;
+  };
+
+  static inline void convert(const char * w, WordEntry & o) {
+    o.what = WordEntry::Word;
+    o.word = w;
+    o.aff  = get_affix(w);
+    o.word_size = get_word_size(w);
+    o.word_info = get_flags(w) & WORD_INFO_MASK;
+  }
+    
+  //
+  //  
+  //
+
+  struct ReadOnlyDict::Elements : public WordEntryEnumeration 
+  {
+    const char * w;
+    WordEntry wi;
+    Elements(const char * w0) : w(w0) {wi.what = WordEntry::Word;}
+    WordEntry * next() {
+      if (get_offset(w) == 0) w += 2; // FIXME: This needs to be 3
+                                      //        when freq info is used
+      if (get_offset(w) == 0) return 0;
+      convert(w, wi);
+      w = get_next(w);
+      return &wi;
+    }
+    bool at_end() const {return get_offset(w) == 0;}
+    WordEntryEnumeration * clone() const {return new Elements(*this);}
+    void assign (const WordEntryEnumeration * other) {
+      *this = *static_cast<const Elements *>(other);}
+  };
+
+  WordEntryEnumeration * ReadOnlyDict::detailed_elements() const {
+    return new Elements(first_word);
+  }
+
+  ReadOnlyDict::Size ReadOnlyDict::size() const {
+    return word_lookup.size();
+  }
+  
+  bool ReadOnlyDict::empty() const {
+    return word_lookup.empty();
+  }
+
+  static const char * const cur_check_word = "aspell default speller rowl 1.10";
+
+  struct DataHead {
+    // all sizes except the last four must to divisible by:
+    static const unsigned int align = 16;
+    char check_word[64];
+    u32int endian_check; // = 12345678
+    char lang_hash[16];
+
+    u32int head_size;
+    u32int block_size;
+    u32int jump1_offset;
+    u32int jump2_offset;
+    u32int word_offset;
+    u32int hash_offset;
+
+    u32int word_count;
+    u32int word_buckets;
+    u32int soundslike_count;
+
+    u32int dict_name_size;
+    u32int lang_name_size;
+    u32int soundslike_name_size;
+    u32int soundslike_version_size;
+
+    u32int first_word_offset; // from word block
+
+    byte affix_info; // 0 = none, 1 = partially expanded, 2 = full
+    byte invisible_soundslike;
+    byte soundslike_root_only;
+    byte compound_info; //
+    byte freq_info;
+  };
+
+  PosibErr<void> ReadOnlyDict::load(ParmString f0, Config & config, 
+                                    DictList *, SpellerImpl *)
+  {
+    set_file_name(f0);
+    const char * fn = file_name();
+
+    FStream f;
+    RET_ON_ERR(f.open(fn, "rb"));
+
+    DataHead data_head;
+
+    f.read(&data_head, sizeof(DataHead));
+
+#if 0
+    COUT << "Head Size: " << data_head.head_size << "\n";
+    COUT << "Data Block Size: " << data_head.data_block_size << "\n";
+    COUT << "Hash Block Size: " << data_head.hash_block_size << "\n";
+    COUT << "Total Block Size: " << data_head.total_block_size << "\n";
+#endif
+
+    if (strcmp(data_head.check_word, cur_check_word) != 0)
+      return make_err(bad_file_format, fn);
+
+    if (data_head.endian_check != 12345678)
+      return make_err(bad_file_format, fn, _("Wrong endian order."));
+
+    CharVector word;
+
+    word.resize(data_head.dict_name_size);
+    f.read(word.data(), data_head.dict_name_size);
+
+    word.resize(data_head.lang_name_size);
+    f.read(word.data(), data_head.lang_name_size);
+
+    PosibErr<void> pe = set_check_lang(word.data(),config);
+    if (pe.has_err()) {
+      if (pe.prvw_err()->is_a(language_related_error))
+        return pe.with_file(fn);
+      else
+        return pe;
+    }
+
+    if (data_head.soundslike_name_size != 0) {
+      word.resize(data_head.soundslike_name_size);
+      f.read(word.data(), data_head.soundslike_name_size);
+
+      if (strcmp(word.data(), lang()->soundslike_name()) != 0)
+        return make_err(bad_file_format, fn, _("Wrong soundslike."));
+
+      word.resize(data_head.soundslike_version_size);
+      f.read(word.data(), data_head.soundslike_version_size);
+
+      if (strcmp(word.data(), lang()->soundslike_version()) != 0)
+        return make_err(bad_file_format, fn, _("Wrong soundslike version."));
+    }
+
+    invisible_soundslike = data_head.invisible_soundslike;
+    soundslike_root_only = data_head.soundslike_root_only;
+
+    affix_compressed = data_head.affix_info;
+
+    block_size = data_head.block_size;
+    int offset = data_head.head_size;
+    mmaped_block = mmap_open(block_size + offset, f, 0);
+    if( mmaped_block != (char *)MAP_FAILED) {
+      block = mmaped_block + offset;
+      mmaped_size = block_size + offset;
+    } else {
+      mmaped_block = 0;
+      block = (char *)malloc(block_size);
+      f.seek(data_head.head_size);
+      f.read(block, block_size);
+    }
+
+    if (data_head.jump2_offset) {
+      fast_scan = true;
+      jump1 = reinterpret_cast<const Jump *>(block + data_head.jump1_offset);
+      jump2 = reinterpret_cast<const Jump *>(block + data_head.jump2_offset);
+    } else {
+      jump1 = jump2 = 0;
+    }
+
+    word_block = block + data_head.word_offset;
+    first_word = word_block + data_head.first_word_offset;
+
+    word_lookup.parms().block_begin = word_block;
+    word_lookup.parms().hash .lang     = lang();
+    word_lookup.parms().equal.cmp.lang = lang();
+    const u32int * begin = reinterpret_cast<const u32int *>
+      (block + data_head.hash_offset);
+    word_lookup.vector().set(begin, begin + data_head.word_buckets);
+    word_lookup.set_size(data_head.word_count);
+    
+    return no_err;
+  }
+
+  void lookup_adv(WordEntry * wi);
+
+  static inline void prep_next(WordEntry * wi, 
+                               const char * w,
+                               const SensitiveCompare * c, 
+                               const char * orig) 
+  {
+  loop:
+    if (!duplicate_flag(w)) return;
+    w = get_next(w);
+    if (!(*c)(orig, w)) goto loop;
+    wi->intr[0] = (void *)w;
+    wi->intr[1] = (void *)c;
+    wi->intr[2] = (void *)orig;
+    wi->adv_ = lookup_adv;
+  }
+
+  void lookup_adv(WordEntry * wi) 
+  {
+    const char * w = (const char *)wi->intr[0];
+    const SensitiveCompare * c = (const SensitiveCompare *)wi->intr[1];
+    const char * orig = (const char *)wi->intr[2];
+    convert(w,*wi);
+    wi->adv_ = 0;
+    prep_next(wi, w, c, orig);
+  }
+
+  bool ReadOnlyDict::lookup(ParmString word, const SensitiveCompare * c,
+                            WordEntry & o) const 
+  {
+    o.clear();
+    WordLookup::const_iterator i = word_lookup.find(word);
+    if (i == word_lookup.end()) return false;
+    const char * w = word_block + *i;
+    for (;;) {
+      if ((*c)(word, w)) {
+        convert(w,o);
+        prep_next(&o, w, c, word);
+        return true;
+      }
+      if (!duplicate_flag(w)) break;
+      w = get_next(w);
+    }
+    return false;
+  }
+
+  struct ReadOnlyDict::SoundslikeElements : public SoundslikeEnumeration
+  {
+    WordEntry data;
+    const ReadOnlyDict * obj;
+    const Jump * jump1;
+    const Jump * jump2;
+    const char * cur;
+    const char * prev;
+    int level;
+    bool invisible_soundslike;
+
+    WordEntry * next(int stopped_at);
+
+    SoundslikeElements(const ReadOnlyDict * o)
+      : obj(o), jump1(obj->jump1), jump2(obj->jump2), cur(0), 
+        level(1), invisible_soundslike(o->invisible_soundslike) {
+      data.what = o->invisible_soundslike ? WordEntry::Word : WordEntry::Soundslike;}
+  };
+
+  WordEntry * ReadOnlyDict::SoundslikeElements::next(int stopped_at) {
+
+    //CERR << level << ":" << stopped_at << "  :";
+    //CERR << jump1->sl << ":" << jump2->sl << "\n";
+
+  loop:
+
+    const char * tmp = cur;
+    const char * p;
+
+    if (level == 1 && stopped_at < 2) {
+
+      ++jump1;
+      tmp = jump1->sl;
+      goto jquit;
+         
+    } else if (level == 2 && stopped_at < 3) {
+
+      ++jump2;
+      if (jump2[-1].sl[1] != jump2[0].sl[1]) {
+        ++jump1;
+        level = 1;
+        tmp = jump1->sl;
+      } else {
+        tmp = jump2->sl;
+      }
+      goto jquit;
+      
+    } else if (level == 1) {
+
+      level = 2;
+      jump2 = obj->jump2 + jump1->loc;
+      tmp = jump2->sl;
+      goto jquit;
+
+    } else if (level == 2) {
+
+      tmp = cur = obj->word_block + jump2->loc;
+      level = 3;
+
+    } else if (get_offset(cur) == 0) {
+
+      level = 2;
+      ++jump2;
+      if (jump2[-1].sl[1] != jump2[0].sl[1]) {
+        level = 1;
+        ++jump1;
+        tmp = jump1->sl;
+      } else {
+        tmp = jump2->sl;
+      }
+      goto jquit;
+
+    } 
+
+    cur = get_next(cur); // this will be the NEXT item looked at
+
+    p = prev;
+    prev = tmp;
+    if (p) {
+      // PRECOND:
+      // unless stopped_at >= LARGE_NUM
+      //     strlen(p) >= stopped_at
+      //     (stopped_at >= 3) implies 
+      //         strncmp(p, tmp, 3) == 0 if !invisible_soundslike
+      //         strncmp(to_sl(p), to_sl(tmp), 3) == 0 if invisible_soundslike
+      if (stopped_at == 3) {
+        if (p[3] == tmp[3]) goto loop;
+      } else if (stopped_at == 4) {
+        if (p[3] == tmp[3] && tmp[3] &&
+            p[4] == tmp[4]) goto loop;
+      } else if (stopped_at == 5) {
+        if (p[3] == tmp[3] && tmp[3] &&
+            p[4] == tmp[4] && tmp[4] &&
+            p[5] == tmp[5]) goto loop;
+      }
+    }
+    
+    data.word = tmp;
+    data.word_size = get_word_size(tmp);
+    if (invisible_soundslike) {
+      convert(tmp, data);
+    } 
+    data.intr[0] = (void *)tmp;
+    
+    return &data;
+
+  jquit:
+    prev = 0;
+    if (!*tmp) return 0;
+    data.word = tmp;
+    data.word_size = !tmp[1] ? 1 : !tmp[2] ? 2 : 3;
+    data.intr[0] = 0;
+    if (invisible_soundslike) {
+      data.what = WordEntry::Clean;
+      data.aff  = 0;
+    }
+    return &data;
+  }
+
+  SoundslikeEnumeration * ReadOnlyDict::soundslike_elements() const {
+
+    return new SoundslikeElements(this);
+
+  }
+    
+  static void soundslike_next(WordEntry * w)
+  {
+    const char * cur = (const char *)(w->intr[0]);
+    const char * end = (const char *)(w->intr[1]);
+    convert(cur, *w);
+    cur = get_next(cur);
+    w->intr[0] = (void *)cur;
+    if (cur >= end) w->adv_ = 0;
+  }
+
+  static void clean_lookup_adv(WordEntry * wi) 
+  {
+    const char * w = wi->word;
+    w = get_next(w);
+    convert(w,*wi);
+    if (!duplicate_flag(w)) wi->adv_ = 0;
+  }
+
+  bool ReadOnlyDict::clean_lookup(ParmString sl, WordEntry & o) const
+  {
+    o.clear();
+    WordLookup::const_iterator i = word_lookup.find(sl);
+    if (i == word_lookup.end()) return false;
+    const char * w = word_block + *i;
+    convert(w, o);
+    if (duplicate_flag(w)) o.adv_ = clean_lookup_adv;
+    return true;
+  }
+    
+  bool ReadOnlyDict::soundslike_lookup(const WordEntry & s, WordEntry & w) const 
+  {
+    if (s.intr[0] == 0) {
+
+      return false;
+
+    } else if (!invisible_soundslike) {
+      
+      w.clear();
+      w.what = WordEntry::Word;
+      w.intr[0] = (void *)get_sl_words_begin(s.word);
+      w.intr[1] = (void *)get_sl_words_end(s.word);
+      w.adv_ = soundslike_next;
+      soundslike_next(&w);
+      return true;
+      
+    } else {
+
+      w.clear();
+      w.what = WordEntry::Word;
+      convert(s.word, w);
+      return true;
+
+    }
+  }
+
+  bool ReadOnlyDict::soundslike_lookup(ParmString s, WordEntry & w) const 
+  {
+    if (invisible_soundslike) {
+      return ReadOnlyDict::clean_lookup(s,w);
+    } else {
+      return false;
+    }
+  }
+
+}  
+
+namespace aspeller {
+
+  Dictionary * new_default_readonly_dict() {
+    return new ReadOnlyDict();
+  }
+  
+}
+
+namespace {
+
+  // Possible:
+  //   No Affix Compression:
+  //     no soundslike
+  //     invisible soundslike
+  //     with soundslike
+  //   Affix Compression:
+  //     group by root:
+  //       no soundslike
+  //       invisible soundslike
+  //       with soundslike
+  //     expand prefix:  
+  //       no soundslike
+  //       invisible soundslike
+
+  using namespace aspeller;
+
+  struct WordData {
+    static const unsigned struct_size;
+    WordData * next;
+    char * sl;
+    char * aff;
+    byte word_size;
+    byte sl_size;
+    byte data_size;
+    byte flags;
+    char word[1];
+  };
+
+  const unsigned WordData::struct_size = sizeof(WordData) - 1;
+  
+
+  struct SoundslikeLess {
+    InsensitiveCompare icomp;
+    SoundslikeLess(const Language * l) : icomp(l) {}
+    bool operator() (WordData * x, WordData * y) const {
+      int res = strcmp(x->sl, y->sl);
+      if (res != 0) return res < 0;
+      res = icomp(x->word, y->word);
+      if (res != 0) return res < 0;
+      return strcmp(x->word, y->word) < 0;
+    }
+  };
+
+  struct WordLookupParms {
+    const char * block_begin;
+    WordLookupParms() {}
+    typedef acommon::Vector<u32int> Vector;
+    typedef u32int              Value;
+    typedef const char *        Key;
+    static const bool is_multi = false;
+    Key key(Value v) const {return block_begin + v;}
+    InsensitiveHash  hash;
+    InsensitiveEqual equal;
+    bool is_nonexistent(Value v) const {return v == u32int_max;}
+    void make_nonexistent(Value & v) const {v = u32int_max;}
+  };
+  typedef VectorHashTable<WordLookupParms> WordLookup;
+
+  static inline unsigned int round_up(unsigned int i, unsigned int size) {
+    return ((i + size - 1)/size)*size;
+  }
+
+  static void advance_file(FStream & out, int pos) {
+    int diff = pos - out.tell();
+    assert(diff >= 0);
+    for(; diff != 0; --diff)
+      out << '\0';
+  }
+
+  PosibErr<void> create (StringEnumeration * els,
+                        const Language & lang,
+                         Config & config) 
+  {
+    assert(sizeof(u16int) == 2);
+    assert(sizeof(u32int) == 4);
+
+    bool full_soundslike = !(strcmp(lang.soundslike_name(), "none") == 0 ||
+                             strcmp(lang.soundslike_name(), "stripped") == 0 ||
+                             strcmp(lang.soundslike_name(), "simple") == 0);
+
+    bool affix_compress = (lang.affix() && 
+                           config.retrieve_bool("affix-compress"));
+
+    bool partially_expand = (affix_compress &&
+                             !full_soundslike &&
+                             config.retrieve_bool("partially-expand"));
+
+    bool invisible_soundslike = false;
+    if (partially_expand)
+      invisible_soundslike = true;
+    else if (config.have("invisible-soundslike"))
+      invisible_soundslike = config.retrieve_bool("invisible-soundslike");
+    else if (!full_soundslike)
+      invisible_soundslike = true;
+
+    ConvEC iconv;
+    if (!config.have("norm-strict"))
+      config.replace("norm-strict", "true");
+    if (config.have("encoding"))
+      RET_ON_ERR(iconv.setup(config, config.retrieve("encoding"), lang.charmap(),NormFrom));
+    else
+      RET_ON_ERR(iconv.setup(config, lang.data_encoding(), lang.charmap(), NormFrom));
+
+    String base = config.retrieve("master-path");
+
+    DataHead data_head;
+    memset(&data_head, 0, sizeof(data_head));
+    strcpy(data_head.check_word, cur_check_word);
+
+    data_head.endian_check = 12345678;
+
+    data_head.dict_name_size = 1;
+    data_head.lang_name_size = strlen(lang.name()) + 1;
+    data_head.soundslike_name_size    = strlen(lang.soundslike_name()) + 1;
+    data_head.soundslike_version_size = strlen(lang.soundslike_version()) + 1;
+    data_head.head_size  = sizeof(DataHead);
+    data_head.head_size += data_head.dict_name_size;
+    data_head.head_size += data_head.lang_name_size;
+    data_head.head_size += data_head.soundslike_name_size;
+    data_head.head_size += data_head.soundslike_version_size;
+    data_head.head_size  = round_up(data_head.head_size, DataHead::align);
+
+    data_head.affix_info = affix_compress ? partially_expand ? 1 : 2 : 0;
+    data_head.invisible_soundslike = invisible_soundslike;
+    data_head.soundslike_root_only = affix_compress  && !partially_expand ? 1 : 0;
+
+#if 0
+    CERR.printl("FLAGS:  ");
+    if (full_soundslike) CERR.printl("  full soundslike");
+    if (invisible_soundslike) CERR.printl("  invisible soundslike");
+    if (data_head.soundslike_root_only) CERR.printl("  soundslike root only");
+    if (affix_compress) CERR.printl("  affix compress");
+    if (partially_expand) CERR.printl("  partially expand");
+    CERR.printl("---");
+#endif
+    
+    String temp;
+
+    int num_entries = 0;
+    int uniq_entries = 0;
+    
+    ObjStack buf(16*1024);
+    String sl_buf;
+
+    WordData * first = 0;
+
+    //
+    // Read in Wordlist
+    //
+    {
+      WordListIterator wl_itr(els, &lang, config.retrieve_bool("warn") ? &CERR : 0);
+      wl_itr.init(config);
+      ObjStack exp_buf;
+      WordAff * exp_list;
+      WordAff single;
+      single.next = 0;
+      Vector<WordAff> af_list;
+      WordData * * prev = &first;
+
+      for (;;) {
+
+        PosibErr<bool> pe = wl_itr.adv();
+        if (pe.has_err()) return pe;
+        if (!pe.data) break;
+
+        const char * w = wl_itr->word.str;
+        unsigned int s = wl_itr->word.size;
+
+        const char * affixes = wl_itr->aff.str;
+
+        if (*affixes && !lang.affix())
+          return make_err(other_error, 
+                          _("Affix flags found in word but no affix file given."));
+
+        if (*affixes && !affix_compress) {
+          exp_buf.reset();
+          exp_list = lang.affix()->expand(w, affixes, exp_buf);
+        } else if (*affixes && partially_expand) {
+          // expand any affixes which will effect the first
+          // 3 letters of a word.  This is needed so that the
+          // jump tables will function correctly
+          exp_buf.reset();
+          exp_list = lang.affix()->expand(w, affixes, exp_buf, 3);
+        } else {
+          single.word.str = w;
+          single.word.size = strlen(w);
+          single.aff = (const byte *)affixes;
+          exp_list = &single;
+        }
+
+        // iterate through each expanded word
+        
+        for (WordAff * p = exp_list; p; p = p->next)
+        {
+          const char * w = p->word.str;
+          s = p->word.size;
+          
+          unsigned total_size = WordData::struct_size;
+          unsigned data_size = s + 1;
+          unsigned aff_size = strlen((const char *)p->aff);
+          if (aff_size > 0) data_size += aff_size + 1;
+          total_size += data_size;
+          lang.to_soundslike(sl_buf, w);
+          const char * sl = sl_buf.str();
+          unsigned sl_size = sl_buf.size();
+          if (strcmp(sl,w) == 0) sl = w;
+          if (sl != w) total_size += sl_size + 1;
+
+          if (total_size - WordData::struct_size > 240)
+            return make_err(invalid_word, MsgConv(lang)(w),
+                            _("The total word length, with soundslike data, is larger than 240 characters."));
+
+          WordData * b = (WordData *)buf.alloc(total_size, sizeof(void *));
+          *prev = b;
+          b->next = 0;
+          prev = &b->next;
+          
+          b->word_size = s;
+          b->sl_size = strlen(sl);
+          b->data_size = data_size;
+          b->flags = lang.get_word_info(w);
+
+          char * z = b->word;
+
+          memcpy(z, w, s + 1);
+          z += s + 1;
+
+          if (aff_size > 0) {
+            b->flags |= HAVE_AFFIX_FLAG;
+            b->aff = z;
+            memcpy(z, p->aff, aff_size + 1);
+            z += aff_size + 1;
+          } else {
+            b->aff = 0;
+          }
+
+          if (sl != w) {
+            memcpy(z, sl, sl_size + 1);
+            b->sl = z;
+          } else {
+            b->sl = b->word;
+          }
+
+        }
+      }
+      delete els;
+    }
+
+    //
+    // sort WordData linked list based on (sl, word)
+    //
+
+    first = sort(first, SoundslikeLess(&lang));
+
+    //
+    // duplicate check
+    // 
+    WordData * prev = first;
+    WordData * cur = first ? first->next : 0;
+    InsensitiveEqual ieq(&lang);
+    while (cur) {
+      if (strcmp(prev->word, cur->word) == 0) {
+        // merge affix info if necessary
+        if (!prev->aff && cur->aff) {
+          prev->flags |= HAVE_AFFIX_FLAG;
+          prev->aff = cur->aff;
+          prev->data_size += strlen(prev->aff) + 1;
+        } else if (prev->aff && cur->aff) {
+          unsigned l1 = strlen(prev->aff);
+          unsigned l2 = strlen(cur->aff);
+          char * aff = (char *)buf.alloc(l1 + l2 + 1);
+          memcpy(aff, prev->aff, l1);
+          prev->aff = aff;
+          aff += l1;
+          for (const char * p = cur->aff; *p; ++p) {
+            if (memchr(prev->aff, *p, l1)) continue;
+            *aff = *p;
+            ++aff;
+          }
+          *aff = '\0';
+          prev->data_size = prev->word_size + (aff - prev->aff) + 2;
+        }
+        prev->next = cur->next;
+      } else {
+        if (ieq(prev->word, cur->word)) prev->flags |= DUPLICATE_FLAG;
+        else ++uniq_entries;
+        ++num_entries;
+        prev = cur;
+      }
+      cur = cur->next;
+    }
+
+    //
+    //
+    //
+
+    unsigned data_size = 16;
+    WordData * p = first;
+    if (invisible_soundslike) {
+      
+      for (; p; p = p->next)
+        data_size += 3 + p->data_size;
+
+    } else {
+
+      while (p)
+      {
+        unsigned ds = 2 + p->sl_size + 1;
+
+        char * prev = p->sl;
+
+        do {
+          
+          ds += 3 + p->data_size;
+          p->sl = prev;
+          p = p->next;
+
+        } while (p && strcmp(prev, p->sl) == 0 && ds + 3 + p->data_size < 255);
+
+        data_size += ds;
+
+      }
+
+    }
+
+    //
+    // Create the final data structures
+    //
+
+    CharVector     data;
+    data.reserve(data_size);
+    data.write32(0); // to avoid nasty special cases
+    unsigned int prev_pos = data.size();
+    data.write32(0);
+    unsigned prev_w_pos = data.size();
+
+    WordLookup lookup(affix_compress 
+                      ? uniq_entries * 3 / 2 
+                      : uniq_entries * 5 / 4);
+    lookup.parms().block_begin = data.begin();
+    lookup.parms().hash .lang     = &lang;
+    lookup.parms().equal.cmp.lang = &lang;
+
+    Vector<Jump> jump1;
+    Vector<Jump> jump2;
+
+    const int head_size = invisible_soundslike ? 3 : 2;
+
+    const char * prev_sl = "";
+    p = first;
+    while (p)
+    {
+      if (invisible_soundslike) {
+
+        data.write(p->flags); // flags  
+        data.write('\0'); // place holder for offset to next item
+        data.write(p->word_size);
+
+      } else {
+
+        data.write('\0'); // place holder for offset to next item
+        data.write(p->sl_size);
+
+      }
+        
+      if (strncmp(prev_sl, p->sl, 3) != 0) {
+        
+        Jump jump;
+        strncpy(jump.sl, p->sl, 3);
+        jump.loc = data.size();
+        jump2.push_back(jump);
+        
+        if (strncmp(prev_sl, p->sl, 2) != 0) {
+          Jump jump;
+          strncpy(jump.sl, p->sl, 2);
+          jump.loc = jump2.size() - 1;
+          jump1.push_back(jump);
+        }
+
+        data[prev_pos - NEXT_O] = (byte)(data.size() - prev_pos - head_size + 1);
+        // when advanced to this position the offset byte will
+        // be null (since it will point to the null terminator
+        // of the last word) and will thus signal the end of the
+        // group
+        
+      } else {
+        
+        data[prev_pos - NEXT_O] = (byte)(data.size() - prev_pos);
+        
+      }
+        
+      prev_pos = data.size();
+      prev_sl = p->sl;
+
+      if (invisible_soundslike) {
+        
+        unsigned pos = data.size();
+        prev_w_pos = data.size();
+        data.write(p->word, p->word_size + 1);
+        if (p->aff) data.write(p->aff, p->data_size - p->word_size - 1);
+        lookup.insert(pos);
+
+        p = p->next;
+
+      } else {
+
+        data.write(p->sl, p->sl_size + 1);
+
+        // write all word entries with the same soundslike
+
+        do {
+          data.write(p->flags);
+          data.write(p->data_size + 3);
+          data.write(p->word_size);
+
+          unsigned pos = data.size();
+          data[prev_w_pos - NEXT_O] = (byte)(pos - prev_w_pos);
+          data.write(p->word, p->word_size + 1);
+          if (p->aff) data.write(p->aff, p->data_size - p->word_size - 1);
+          lookup.insert(pos);
+
+          prev_w_pos = pos;
+          prev_sl = p->sl;
+
+          p = p->next;
+
+        } while (p && prev_sl == p->sl); // yes I really mean to use pointer compare here
+      }
+    }
+
+    // add special end case
+    if (data.size() % 2 != 0) data.write('\0');
+    data.write16(0);
+    data.write16(0);
+    data[prev_pos - NEXT_O] |= (byte)(data.size() - prev_pos);
+    
+    jump2.push_back(Jump());
+    jump1.push_back(Jump());
+    
+    data.write(0);
+    data.write(0);
+    data.write(0);
+
+    if (invisible_soundslike)
+      data_head.first_word_offset = data[4 - NEXT_O] + 4;
+    else
+      data_head.first_word_offset = data[8 - NEXT_O] + 8;
+
+    memset(data.data(), 0, 8);
+    
+    //CERR.printf("%d == %d\n", lookup.size(), uniq_entries);
+    //assert(lookup.size() == uniq_entries);
+
+    data_head.word_count   = num_entries;
+    data_head.word_buckets = lookup.bucket_count();
+
+    FStream out;
+    out.open(base, "wb");
+
+    advance_file(out, data_head.head_size);
+
+    // Write jump1 table
+    data_head.jump1_offset = out.tell() - data_head.head_size;
+    out.write(jump1.data(), jump1.size() * sizeof(Jump));
+    
+    // Write jump2 table
+    advance_file(out, round_up(out.tell(), DataHead::align));
+    data_head.jump2_offset = out.tell() - data_head.head_size;
+    out.write(jump2.data(), jump2.size() * sizeof(Jump));
+
+    // Write data block
+    advance_file(out, round_up(out.tell(), DataHead::align));
+    data_head.word_offset = out.tell() - data_head.head_size;
+    out.write(data.data(), data.size());
+
+    // Write hash
+    advance_file(out, round_up(out.tell(), DataHead::align));
+    data_head.hash_offset = out.tell() - data_head.head_size;
+    out.write(&lookup.vector().front(), lookup.vector().size() * 4);
+    
+    // calculate block size
+    advance_file(out, round_up(out.tell(), DataHead::align));
+    data_head.block_size = out.tell() - data_head.head_size;
+
+    // write data head to file
+    out.seek(0);
+    out.write(&data_head, sizeof(DataHead));
+    out.write(" ", 1);
+    out.write(lang.name(), data_head.lang_name_size);
+    out.write(lang.soundslike_name(), data_head.soundslike_name_size);
+    out.write(lang.soundslike_version(), data_head.soundslike_version_size);
+
+    return no_err;
+  }
+
+}
+
+namespace aspeller {
+  PosibErr<void> create_default_readonly_dict(StringEnumeration * els,
+                                              Config & config)
+  {
+    CachePtr<Language> lang;
+    PosibErr<Language *> res = new_language(config);
+    if (res.has_err()) return res;
+    lang.reset(res.data);
+    lang->set_lang_defaults(config);
+    RET_ON_ERR(create(els,*lang,config));
+    return no_err;
+  }
+}
+
diff --git a/modules/speller/default/speller_impl.cpp b/modules/speller/default/speller_impl.cpp
new file mode 100644 (file)
index 0000000..f0704e8
--- /dev/null
@@ -0,0 +1,742 @@
+// This file is part of The New Aspell
+// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include <stdlib.h>
+#include <typeinfo>
+
+#include "clone_ptr-t.hpp"
+#include "config.hpp"
+#include "data.hpp"
+#include "data_id.hpp"
+#include "errors.hpp"
+#include "language.hpp"
+#include "speller_impl.hpp"
+#include "string_list.hpp"
+#include "suggest.hpp"
+#include "tokenizer.hpp"
+#include "convert.hpp"
+#include "stack_ptr.hpp"
+
+//#include "iostream.hpp"
+
+#include "gettext.h"
+
+namespace aspeller {
+  //
+  // data_access functions
+  //
+
+  const char * SpellerImpl::lang_name() const {
+    return lang_->name();
+  }
+
+  //
+  // to lower
+  //
+
+  char * SpellerImpl::to_lower(char * str) 
+  {
+    for (char * i = str; *i; ++i)
+      *i = lang_->to_lower(*i);
+    return str;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Spell check methods
+  //
+
+  PosibErr<void> SpellerImpl::add_to_personal(MutableString word) {
+    if (!personal_) return no_err;
+    return personal_->add(word);
+  }
+  
+  PosibErr<void> SpellerImpl::add_to_session(MutableString word) {
+    if (!session_) return no_err;
+    return session_->add(word);
+  }
+
+  PosibErr<void> SpellerImpl::clear_session() {
+    if (!session_) return no_err;
+    return session_->clear();
+  }
+
+  PosibErr<void> SpellerImpl::store_replacement(MutableString mis, 
+                                                MutableString cor)
+  {
+    return SpellerImpl::store_replacement(mis,cor,true);
+  }
+
+  PosibErr<void> SpellerImpl::store_replacement(const String & mis, 
+                                                const String & cor, 
+                                                bool memory) 
+  {
+    if (ignore_repl) return no_err;
+    if (!repl_) return no_err;
+    String::size_type pos;
+    StackPtr<StringEnumeration> sugels(intr_suggest_->suggest(mis.c_str()).elements());
+    const char * first_word = sugels->next();
+    CheckInfo w1, w2;
+    String cor1, cor2;
+    String buf;
+    bool correct = false;
+    pos = cor.find(' '); 
+    if (pos == String::npos) {
+      cor1 = cor;
+      correct = check_affix(cor, w1, 0);
+    } else {
+      cor1 = (String)cor.substr(0,pos);
+      ++pos;
+      while (pos < cor.size() && cor[pos] == ' ') ++pos;
+      cor2 = (String)cor.substr(pos);
+      correct = check_affix(cor1, w1, 0) && check_affix(cor2, w2, 0);
+    }
+    if (correct) {
+      String cor_orignal_casing(cor1);
+      if (!cor2.empty()) {
+        cor_orignal_casing += cor[pos-1];
+        cor_orignal_casing += cor2;
+      }
+      // Don't try to add the empty string, causes all kinds of
+      // problems.  Can happen if the original replacement nothing but
+      // whitespace.
+      if (cor_orignal_casing.empty()) 
+        return no_err;
+      if (first_word == 0 || cor != first_word) {
+        lang().to_lower(buf, mis.str());
+        repl_->add_repl(buf, cor_orignal_casing);
+      }
+      
+      if (memory && prev_cor_repl_ == mis) 
+        store_replacement(prev_mis_repl_, cor, false);
+      
+    } else { //!correct
+      
+      if (memory) {
+         if (prev_cor_repl_ != mis)
+          prev_mis_repl_ = mis;
+        prev_cor_repl_ = cor;
+       }
+    }
+    return no_err;
+  }
+
+  //
+  // simple functions
+  //
+
+  PosibErr<const WordList *> SpellerImpl::suggest(MutableString word) 
+  {
+    return &suggest_->suggest(word);
+  }
+
+  bool SpellerImpl::check_simple (ParmString w, WordEntry & w0) 
+  {
+    w0.clear(); // FIXME: is this necessary?
+    const char * x = w;
+    while (*x != '\0' && (x-w) < static_cast<int>(ignore_count)) ++x;
+    if (*x == '\0') {w0.word = w; return true;}
+    WS::const_iterator i   = check_ws.begin();
+    WS::const_iterator end = check_ws.end();
+    do {
+      if ((*i)->lookup(w, &s_cmp, w0)) return true;
+      ++i;
+    } while (i != end);
+    return false;
+  };
+
+  bool SpellerImpl::check_affix(ParmString word, CheckInfo & ci, GuessInfo * gi)
+  {
+    WordEntry w;
+    bool res = check_simple(word, w);
+    if (res) {ci.word = w.word; return true;}
+    if (affix_compress) {
+      res = lang_->affix()->affix_check(LookupInfo(this, LookupInfo::Word), word, ci, 0);
+      if (res) return true;
+    }
+    if (affix_info && gi) {
+      lang_->affix()->affix_check(LookupInfo(this, LookupInfo::Guess), word, ci, gi);
+    }
+    return false;
+  }
+
+  inline bool SpellerImpl::check2(char * word, /* it WILL modify word */
+                                  bool try_uppercase,
+                                  CheckInfo & ci, GuessInfo * gi)
+  {
+    bool res = check_affix(word, ci, gi);
+    if (res) return true;
+    if (!try_uppercase) return false;
+    char t = *word;
+    *word = lang_->to_title(t);
+    res = check_affix(word, ci, gi);
+    *word = t;
+    if (res) return true;
+    return false;
+  }
+
+  PosibErr<bool> SpellerImpl::check(char * word, char * word_end, 
+                                    /* it WILL modify word */
+                                    bool try_uppercase,
+                                    unsigned run_together_limit,
+                                    CheckInfo * ci, GuessInfo * gi)
+  {
+    assert(run_together_limit <= 8); // otherwise it will go above the 
+                                     // bounds of the word array
+    clear_check_info(*ci);
+    bool res = check2(word, try_uppercase, *ci, gi);
+    if (res) return true;
+    if (run_together_limit <= 1) return false;
+    enum {Yes, No, Unknown} is_title = try_uppercase ? Yes : Unknown;
+    for (char * i = word + run_together_min_; 
+         i <= word_end - run_together_min_;
+         ++i) 
+    {
+      char t = *i;
+      *i = '\0';
+      //FIXME: clear ci, gi?
+      res = check2(word, try_uppercase, *ci, gi);
+      if (!res) {*i = t; continue;}
+      if (is_title == Unknown)
+        is_title = lang_->case_pattern(word) == FirstUpper ? Yes : No;
+      *i = t;
+      if (check(i, word_end, is_title == Yes, run_together_limit - 1, ci + 1, 0)) {
+        ci->compound = true;
+        ci->next = ci + 1;
+        return true;
+      }
+    }
+    return false;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Word list managment methods
+  //
+  
+  PosibErr<void> SpellerImpl::save_all_word_lists() {
+    SpellerDict * i = dicts_;
+    for (; i; i = i->next) {
+      if  (i->save_on_saveall)
+        RET_ON_ERR(i->dict->synchronize());
+    }
+    return no_err;
+  }
+  
+  int SpellerImpl::num_wordlists() const {
+    return 0; //FIXME
+  }
+
+  SpellerImpl::WordLists SpellerImpl::wordlists() const {
+    return 0; //FIXME
+    //return MakeEnumeration<DataSetCollection::Parms>(wls_->begin(), DataSetCollection::Parms(wls_->end()));
+  }
+
+  PosibErr<const WordList *> SpellerImpl::personal_word_list() const {
+    const WordList * wl = static_cast<const WordList *>(personal_);
+    if (!wl) return make_err(operation_not_supported_error, 
+                             _("The personal word list is unavailable."));
+    return wl;
+  }
+
+  PosibErr<const WordList *> SpellerImpl::session_word_list() const {
+    const WordList * wl = static_cast<const WordList *>(session_);
+    if (!wl) return make_err(operation_not_supported_error, 
+                             _("The session word list is unavailable."));
+    return wl;
+  }
+
+  PosibErr<const WordList *> SpellerImpl::main_word_list() const {
+    const WordList * wl = dynamic_cast<const WordList *>(main_);
+    if (!wl) return make_err(operation_not_supported_error, 
+                             _("The main word list is unavailable."));
+    return wl;
+  }
+
+  const SpellerDict * SpellerImpl::locate (const Dict::Id & id) const
+  {
+    for (const SpellerDict * i = dicts_; i; i = i->next)
+      if (i->dict->id() == id) return i;
+    return 0;
+  }
+
+  PosibErr<void> SpellerImpl::add_dict(SpellerDict * wc)
+  {
+    Dict * w = wc->dict;
+    assert(locate(w->id()) == 0);
+
+    if (!lang_) {
+      lang_.copy(w->lang());
+      config_->replace("lang", lang_name());
+      config_->replace("language-tag", lang_name());
+    } else {
+      if (strcmp(lang_->name(), w->lang()->name()) != 0)
+        return make_err(mismatched_language, lang_->name(), w->lang()->name());
+    }
+
+    // add to master list
+    wc->next = dicts_;
+    dicts_ = wc;
+
+    // check if it has a special_id and act accordingly
+    switch (wc->special_id) {
+    case main_id:
+      assert(main_ == 0);
+      main_ = w;
+      break;
+    case personal_id:
+      assert(personal_ == 0);
+      personal_ = w;
+      break;
+    case session_id:
+      assert(session_ == 0);
+      session_ = w;
+      break;
+    case personal_repl_id:
+      assert(repl_ == 0);
+      repl_ = w;
+      break;
+    case none_id:
+      break;
+    }
+
+    return no_err;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // Config Notifier
+  //
+
+  struct UpdateMember {
+    const char * name;
+    enum Type {String, Int, Bool, Add, Rem, RemAll};
+    Type type;
+    union Fun {
+      typedef PosibErr<void> (*WithStr )(SpellerImpl *, const char *);
+      typedef PosibErr<void> (*WithInt )(SpellerImpl *, int);
+      typedef PosibErr<void> (*WithBool)(SpellerImpl *, bool);
+      WithStr  with_str;
+      WithInt  with_int;
+      WithBool with_bool;
+      Fun() {}
+      Fun(WithStr  m) : with_str (m) {}
+      Fun(WithInt  m) : with_int (m) {}
+      Fun(WithBool m) : with_bool(m) {}
+      PosibErr<void> call(SpellerImpl * m, const char * val) const 
+        {return (*with_str) (m,val);}
+      PosibErr<void> call(SpellerImpl * m, int val)          const 
+        {return (*with_int) (m,val);}
+      PosibErr<void> call(SpellerImpl * m, bool val)         const 
+        {return (*with_bool)(m,val);}
+    } fun;
+    typedef SpellerImpl::ConfigNotifier CN;
+  };
+
+  template <typename T>
+  PosibErr<void> callback(SpellerImpl * m, const KeyInfo * ki, T value, 
+                          UpdateMember::Type t);
+  
+  class SpellerImpl::ConfigNotifier : public Notifier {
+  private:
+    SpellerImpl * speller_;
+  public:
+    ConfigNotifier(SpellerImpl * m) 
+      : speller_(m) 
+    {}
+
+    PosibErr<void> item_updated(const KeyInfo * ki, int value) {
+      return callback(speller_, ki, value, UpdateMember::Int);
+    }
+    PosibErr<void> item_updated(const KeyInfo * ki, bool value) {
+      return callback(speller_, ki, value, UpdateMember::Bool);
+    }
+    PosibErr<void> item_updated(const KeyInfo * ki, ParmStr value) {
+      return callback(speller_, ki, value, UpdateMember::String);
+    }
+
+    static PosibErr<void> ignore(SpellerImpl * m, int value) {
+      m->ignore_count = value;
+      return no_err;
+    }
+    static PosibErr<void> ignore_accents(SpellerImpl * m, bool value) {
+      return no_err;
+    }
+    static PosibErr<void> ignore_case(SpellerImpl * m, bool value) {
+      m->s_cmp.case_insensitive = value;
+      m->s_cmp_begin.case_insensitive = value;
+      m->s_cmp_middle.case_insensitive = value;
+      m->s_cmp_end.case_insensitive = value;
+      return no_err;
+    }
+    static PosibErr<void> ignore_repl(SpellerImpl * m, bool value) {
+      
+      m->ignore_repl = value;
+      return no_err;
+    }
+    static PosibErr<void> save_repl(SpellerImpl * m, bool value) {
+      // FIXME
+      // m->save_on_saveall(DataSet::Id(&m->personal_repl()), value);
+      abort(); return no_err;
+    }
+    static PosibErr<void> sug_mode(SpellerImpl * m, const char * mode) {
+      RET_ON_ERR(m->suggest_->set_mode(mode));
+      RET_ON_ERR(m->intr_suggest_->set_mode(mode));
+      return no_err;
+    }
+    static PosibErr<void> run_together(SpellerImpl * m, bool value) {
+      m->unconditional_run_together_ = value;
+      m->run_together = m->unconditional_run_together_;
+      return no_err;
+    }
+    static PosibErr<void> run_together_limit(SpellerImpl * m, int value) {
+      if (value > 8) {
+        m->config()->replace("run-together-limit", "8");
+        // will loop back
+      } else {
+        m->run_together_limit_ = value;
+      }
+      return no_err;
+    }
+    static PosibErr<void> run_together_min(SpellerImpl * m, int value) {
+      m->run_together_min_ = value;
+      return no_err;
+    }
+    
+  };
+
+  static UpdateMember update_members[] = 
+  {
+    {"ignore",         UpdateMember::Int,     UpdateMember::CN::ignore}
+    ,{"ignore-accents",UpdateMember::Bool,    UpdateMember::CN::ignore_accents}
+    ,{"ignore-case",   UpdateMember::Bool,    UpdateMember::CN::ignore_case}
+    ,{"ignore-repl",   UpdateMember::Bool,    UpdateMember::CN::ignore_repl}
+    //,{"save-repl",     UpdateMember::Bool,    UpdateMember::CN::save_repl}
+    ,{"sug-mode",      UpdateMember::String,  UpdateMember::CN::sug_mode}
+    ,{"run-together",  
+        UpdateMember::Bool,    
+        UpdateMember::CN::run_together}
+    ,{"run-together-limit",  
+        UpdateMember::Int,    
+        UpdateMember::CN::run_together_limit}
+    ,{"run-together-min",  
+        UpdateMember::Int,    
+        UpdateMember::CN::run_together_min}
+  };
+
+  template <typename T>
+  PosibErr<void> callback(SpellerImpl * m, const KeyInfo * ki, T value, 
+                          UpdateMember::Type t) 
+  {
+    const UpdateMember * i
+      = update_members;
+    const UpdateMember * end   
+      = i + sizeof(update_members)/sizeof(UpdateMember);
+    while (i != end) {
+      if (strcmp(ki->name, i->name) == 0) {
+        if (i->type == t) {
+          RET_ON_ERR(i->fun.call(m, value));
+          break;
+        }
+      }
+      ++i;
+    }
+    return no_err;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // SpellerImpl inititization members
+  //
+
+  SpellerImpl::SpellerImpl() 
+    : Speller(0) /* FIXME */, ignore_repl(true), 
+      dicts_(0), personal_(0), session_(0), repl_(0), main_(0)
+  {}
+
+  inline PosibErr<void> add_dicts(SpellerImpl * sp, DictList & d)
+  {
+    for (;!d.empty(); d.pop())
+    {
+      if (!sp->locate(d.last()->id())) {
+        RET_ON_ERR(sp->add_dict(new SpellerDict(d.last())));
+      }
+    }
+    return no_err;
+  }
+
+  PosibErr<void> SpellerImpl::setup(Config * c) {
+    assert (config_ == 0);
+    config_.reset(c);
+
+    ignore_repl = config_->retrieve_bool("ignore-repl");
+    ignore_count = config_->retrieve_int("ignore");
+
+    DictList to_add;
+    RET_ON_ERR(add_data_set(config_->retrieve("master-path"), *config_, &to_add, this));
+    RET_ON_ERR(add_dicts(this, to_add));
+
+    s_cmp.lang = lang_;
+    s_cmp.case_insensitive = config_->retrieve_bool("ignore-case");
+
+    s_cmp_begin.lang = lang_; 
+    s_cmp_begin.case_insensitive = s_cmp.case_insensitive;
+    s_cmp_begin.end = false;
+
+    s_cmp_middle.lang = lang_;
+    s_cmp_middle.case_insensitive = s_cmp.case_insensitive;
+    s_cmp_middle.begin = false;
+    s_cmp_middle.end   = false;
+
+    s_cmp_end.lang = lang_;
+    s_cmp_end.case_insensitive = s_cmp.case_insensitive;
+    s_cmp_end.begin = false;
+
+    StringList extra_dicts;
+    config_->retrieve_list("extra-dicts", &extra_dicts);
+    StringListEnumeration els = extra_dicts.elements_obj();
+    const char * dict_name;
+    while ( (dict_name = els.next()) != 0) {
+      RET_ON_ERR(add_data_set(dict_name,*config_, &to_add, this));
+      RET_ON_ERR(add_dicts(this, to_add));
+    }
+
+    bool use_other_dicts = config_->retrieve_bool("use-other-dicts");
+
+    if (use_other_dicts && !personal_)
+    {
+      Dictionary * temp;
+      temp = new_default_writable_dict();
+      PosibErrBase pe = temp->load(config_->retrieve("personal-path"),*config_);
+      if (pe.has_err(cant_read_file))
+        temp->set_check_lang(lang_name(), *config_);
+      else if (pe.has_err())
+        return pe;
+      RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, personal_id)));
+    }
+    
+    if (use_other_dicts && !session_)
+    {
+      Dictionary * temp;
+      temp = new_default_writable_dict();
+      temp->set_check_lang(lang_name(), *config_);
+      RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, session_id)));
+    }
+     
+    if (use_other_dicts && !repl_)
+    {
+      ReplacementDict * temp = new_default_replacement_dict();
+      PosibErrBase pe = temp->load(config_->retrieve("repl-path"),*config_);
+      if (pe.has_err(cant_read_file))
+        temp->set_check_lang(lang_name(), *config_);
+      else if (pe.has_err())
+        return pe;
+      RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, personal_repl_id)));
+    }
+
+    const char * sys_enc = lang_->charmap();
+    String user_enc = config_->retrieve("encoding");
+    if (user_enc == "none") {
+      config_->replace("encoding", sys_enc);
+      user_enc = sys_enc;
+    }
+
+    PosibErr<Convert *> conv;
+    conv = new_convert(*c, user_enc, sys_enc, NormFrom);
+    if (conv.has_err()) return conv;
+    to_internal_.reset(conv);
+    conv = new_convert(*c, sys_enc, user_enc, NormTo);
+    if (conv.has_err()) return conv;
+    from_internal_.reset(conv);
+
+    unconditional_run_together_ = config_->retrieve_bool("run-together");
+    run_together = unconditional_run_together_;
+    
+    run_together_limit_  = config_->retrieve_int("run-together-limit");
+    if (run_together_limit_ > 8) {
+      config_->replace("run-together-limit", "8");
+      run_together_limit_ = 8;
+    }
+    run_together_min_    = config_->retrieve_int("run-together-min");
+
+    config_->add_notifier(new ConfigNotifier(this));
+
+    config_->set_attached(true);
+
+    affix_info = lang_->affix();
+
+    //
+    // setup word set lists
+    //
+
+    typedef Vector<SpellerDict *> AllWS; AllWS all_ws;
+    for (SpellerDict * i = dicts_; i; i = i->next) {
+      if (i->dict->basic_type == Dict::basic_dict ||
+          i->dict->basic_type == Dict::replacement_dict) {
+        all_ws.push_back(i);
+      }
+    }
+    
+    const std::type_info * ti = 0;
+    while (!all_ws.empty())
+    {
+      AllWS::iterator i0 = all_ws.end();
+      int max = -2;
+      AllWS::iterator i = all_ws.begin();
+      for (; i != all_ws.end(); ++i)
+      {
+        const Dictionary * ws = (*i)->dict;
+        if (ti && *ti != typeid(*ws)) continue;
+        if ((int)ws->size() > max) {max = ws->size(); i0 = i;}
+      }
+
+      if (i0 == all_ws.end()) {ti = 0; continue;}
+
+      SpellerDict * cur = *i0;
+
+      all_ws.erase(i0);
+
+      ti = &typeid(*cur->dict);
+
+      if (cur->use_to_check) {
+        check_ws.push_back(cur->dict);
+        if (cur->dict->affix_compressed) affix_ws.push_back(cur->dict);
+      }
+      if (cur->use_to_suggest) {
+        suggest_ws.push_back(cur->dict);
+        if (cur->dict->affix_compressed) suggest_affix_ws.push_back(cur->dict);
+      }
+    }
+    fast_scan   = suggest_ws.front()->fast_scan;
+    fast_lookup = suggest_ws.front()->fast_lookup;
+    have_soundslike = lang_->have_soundslike();
+    have_repl = lang_->have_repl();
+    invisible_soundslike = suggest_ws.front()->invisible_soundslike;
+    soundslike_root_only = suggest_ws.front()->soundslike_root_only;
+    affix_compress = !affix_ws.empty();
+
+    //
+    // Setup suggest
+    //
+
+    PosibErr<Suggest *> pe;
+    pe = new_default_suggest(this);
+    if (pe.has_err()) return pe;
+    suggest_.reset(pe.data);
+    pe = new_default_suggest(this);
+    if (pe.has_err()) return pe;
+    intr_suggest_.reset(pe.data);
+
+    return no_err;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // SpellerImpl destrution members
+  //
+
+  SpellerImpl::~SpellerImpl() {
+    while (dicts_) {
+      SpellerDict * next = dicts_->next;
+      delete dicts_;
+      dicts_ = next;
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  // SpellerImple setup tokenizer method
+  //
+
+  void SpellerImpl::setup_tokenizer(Tokenizer * tok)
+  {
+    for (int i = 0; i != 256; ++i) 
+    {
+      tok->char_type_[i].word   = lang_->is_alpha(i);
+      tok->char_type_[i].begin  = lang_->special(i).begin;
+      tok->char_type_[i].middle = lang_->special(i).middle;
+      tok->char_type_[i].end    = lang_->special(i).end;
+    }
+    tok->conv_ = to_internal_;
+  }
+
+
+  //////////////////////////////////////////////////////////////////////
+  //
+  //
+  //
+
+  SpellerDict::SpellerDict(Dict * d) 
+    : dict(d), special_id(none_id), next(0) 
+  {
+    switch (dict->basic_type) {
+    case Dict::basic_dict:
+      use_to_check = true;
+      use_to_suggest = true;
+      break;
+    case Dict::replacement_dict:
+      use_to_check = false;
+      use_to_suggest = true;
+    case Dict::multi_dict:
+      break;
+    default:
+      abort();
+    }
+    save_on_saveall = false;
+  }
+
+  SpellerDict::SpellerDict(Dict * w, const Config & c, SpecialId id)
+    : next(0) 
+  {
+    dict = w;
+    special_id = id;
+    switch (id) {
+    case main_id:
+      if (dict->basic_type == Dict::basic_dict) {
+
+        use_to_check    = true;
+        use_to_suggest  = true;
+        save_on_saveall = false;
+
+      } else if (dict->basic_type == Dict::replacement_dict) {
+        
+        use_to_check    = false;
+        use_to_suggest  = false;
+        save_on_saveall = false;
+        
+      } else {
+        
+        abort();
+        
+      }
+      break;
+    case personal_id:
+      use_to_check = true;
+      use_to_suggest = true;
+      save_on_saveall = true;
+      break;
+    case session_id:
+      use_to_check = true;
+      use_to_suggest = true;
+      save_on_saveall = false;
+      break;
+    case personal_repl_id:
+      use_to_check = false;
+      use_to_suggest = true;
+      save_on_saveall = c.retrieve_bool("save-repl");
+      break;
+    case none_id:
+      break;
+    }
+  }
+
+  extern "C"
+  Speller * libaspell_speller_default_LTX_new_speller_class(SpellerLtHandle)
+  {
+    return new SpellerImpl();
+  }
+}
+
diff --git a/modules/speller/default/speller_impl.hpp b/modules/speller/default/speller_impl.hpp
new file mode 100644 (file)
index 0000000..342b936
--- /dev/null
@@ -0,0 +1,262 @@
+// Aspell main C++ include file
+// Copyright 1998-2000 by Kevin Atkinson under the terms of the LGPL.
+
+#ifndef __aspeller_speller__
+#define __aspeller_speller__
+
+#include <vector>
+
+#include "clone_ptr.hpp"
+#include "copy_ptr.hpp"
+#include "data.hpp"
+#include "enumeration.hpp"
+#include "speller.hpp"
+#include "check_list.hpp"
+
+using namespace acommon;
+
+namespace acommon {
+  class StringMap;
+  class Config;
+  class WordList;
+}
+// The speller class is responsible for keeping track of the
+// dictionaries coming up with suggestions and the like. Its methods
+// are NOT meant to be used my multiple threads and/or documents.
+
+namespace aspeller {
+
+  class Language;
+  class SensitiveCompare;
+  class Suggest;
+
+  enum SpecialId {main_id, personal_id, session_id, 
+                  personal_repl_id, none_id};
+
+  struct SpellerDict
+  {
+    Dict *            dict;
+    bool              use_to_check;
+    bool              use_to_suggest;
+    bool              save_on_saveall;
+    SpecialId         special_id;
+    SpellerDict     * next;
+    SpellerDict(Dict *);
+    SpellerDict(Dict *, const Config &, SpecialId id = none_id);
+    ~SpellerDict() {if (dict) dict->release();}
+  };
+
+  class SpellerImpl : public Speller
+  {
+  public:
+    SpellerImpl(); // does not set anything up. 
+    ~SpellerImpl();
+
+    PosibErr<void> setup(Config *);
+
+    void setup_tokenizer(Tokenizer *);
+
+    //
+    // Low level Word List Management methods
+    //
+
+  public:
+
+    typedef Enumeration<Dict *> * WordLists;
+
+    WordLists wordlists() const;
+    int num_wordlists() const;
+
+    const SpellerDict * locate (const Dict::Id &) const;
+
+    //
+    // Add a single dictionary that has not been previously added
+    //
+    PosibErr<void> add_dict(SpellerDict *);
+
+    PosibErr<const WordList *> personal_word_list  () const;
+    PosibErr<const WordList *> session_word_list   () const;
+    PosibErr<const WordList *> main_word_list      () const;
+
+    //
+    // Language methods
+    //
+    
+    char * to_lower(char *);
+
+    const char * lang_name() const;
+
+    const Language & lang() const {return *lang_;}
+
+    //
+    // Spelling methods
+    //
+  
+    PosibErr<bool> check(char * word, char * word_end, /* it WILL modify word */
+                         bool try_uppercase,
+                        unsigned run_together_limit,
+                        CheckInfo *, GuessInfo *);
+
+    PosibErr<bool> check(MutableString word) {
+      guess_info.reset();
+      return check(word.begin(), word.end(), false,
+                  unconditional_run_together_ ? run_together_limit_ : 0,
+                  check_inf, &guess_info);
+    }
+    PosibErr<bool> check(ParmString word)
+    {
+      std::vector<char> w(word.size()+1);
+      strncpy(&*w.begin(), word, w.size());
+      return check(MutableString(&w.front(), w.size() - 1));
+    }
+
+    PosibErr<bool> check(const char * word) {return check(ParmString(word));}
+
+    bool check2(char * word, /* it WILL modify word */
+                bool try_uppercase,
+                CheckInfo & ci, GuessInfo * gi);
+
+    bool check_affix(ParmString word, CheckInfo & ci, GuessInfo * gi);
+
+    bool check_simple(ParmString, WordEntry &);
+
+    const CheckInfo * check_info() {
+      if (check_inf[0].word)
+        return check_inf;
+      else if (guess_info.head)
+        return guess_info.head;
+      else
+        return 0;
+    }
+    
+    //
+    // High level Word List management methods
+    //
+
+    PosibErr<void> add_to_personal(MutableString word);
+    PosibErr<void> add_to_session(MutableString word);
+
+    PosibErr<void> save_all_word_lists();
+
+    PosibErr<void> clear_session();
+
+    PosibErr<const WordList *> suggest(MutableString word);
+    // the suggestion list and the elements in it are only 
+    // valid until the next call to suggest.
+
+    PosibErr<void> store_replacement(MutableString mis, 
+                                    MutableString cor);
+
+    PosibErr<void> store_replacement(const String & mis, const String & cor,
+                                    bool memory);
+
+    //
+    // Private Stuff (from here to the end of the class)
+    //
+
+    class DictCollection;
+    class ConfigNotifier;
+
+  private:
+    friend class ConfigNotifier;
+
+    CachePtr<const Language>   lang_;
+    CopyPtr<SensitiveCompare>  sensitive_compare_;
+    //CopyPtr<DictCollection> wls_;
+    ClonePtr<Suggest>       suggest_;
+    ClonePtr<Suggest>       intr_suggest_;
+    unsigned int            ignore_count;
+    bool                    ignore_repl;
+    String                  prev_mis_repl_;
+    String                  prev_cor_repl_;
+
+    void operator= (const SpellerImpl &other);
+    SpellerImpl(const SpellerImpl &other);
+
+    SpellerDict * dicts_;
+    
+    Dictionary       * personal_;
+    Dictionary       * session_;
+    ReplacementDict  * repl_;
+    Dictionary       * main_;
+
+  public:
+    // these are public so that other classes and functions can use them, 
+    // DO NOT USE
+
+    const SensitiveCompare & sensitive_compare() const {return *sensitive_compare_;}
+
+    //const DictCollection & data_set_collection() const {return *wls_;}
+
+    PosibErr<void> set_check_lang(ParmString lang, ParmString lang_dir);
+  
+    double distance (const char *, const char *, 
+                    const char *, const char *) const;
+
+    CheckInfo check_inf[8];
+    GuessInfo guess_info;
+
+    SensitiveCompare s_cmp;
+    SensitiveCompare s_cmp_begin;
+    SensitiveCompare s_cmp_middle;
+    SensitiveCompare s_cmp_end;
+
+    typedef Vector<const Dict *> WS;
+    WS check_ws, affix_ws, suggest_ws, suggest_affix_ws;
+
+    bool                    unconditional_run_together_;
+    unsigned int            run_together_limit_;
+    unsigned int            run_together_min_;
+
+    bool affix_info, affix_compress;
+
+    bool have_repl;
+
+    bool have_soundslike;
+
+    bool invisible_soundslike, soundslike_root_only;
+
+    bool fast_scan, fast_lookup;
+
+    bool run_together;
+
+  };
+
+  struct LookupInfo {
+    SpellerImpl * sp;
+    enum Mode {Word, Guess, Clean, Soundslike, AlwaysTrue} mode;
+    SpellerImpl::WS::const_iterator begin;
+    SpellerImpl::WS::const_iterator end;
+    inline LookupInfo(SpellerImpl * s, Mode m);
+    // returns 0 if nothing found
+    // 1 if a match is found
+    // -1 if a word is found but affix doesn't match and "gi"
+    int lookup (ParmString word, const SensitiveCompare * c, char aff, 
+                WordEntry & o, GuessInfo * gi) const;
+  };
+
+  inline LookupInfo::LookupInfo(SpellerImpl * s, Mode m) 
+    : sp(s), mode(m) 
+  {
+    switch (m) { 
+    case Word: 
+      begin = sp->affix_ws.begin(); 
+      end = sp->affix_ws.end();
+      return;
+    case Guess:
+      begin = sp->check_ws.begin(); 
+      end = sp->check_ws.end(); 
+      mode = Word; 
+      return;
+    case Clean:
+    case Soundslike: 
+      begin = sp->suggest_affix_ws.begin(); 
+      end = sp->suggest_affix_ws.end(); 
+      return;
+    case AlwaysTrue: 
+      return; 
+    }
+  }
+}
+
+#endif
diff --git a/modules/speller/default/suggest.cpp b/modules/speller/default/suggest.cpp
new file mode 100644 (file)
index 0000000..92da127
--- /dev/null
@@ -0,0 +1,1430 @@
+// Copyright 2000-2005 by Kevin Atkinson under the terms of the LGPL
+
+// suggest.cpp Suggestion code for Aspell
+
+// The magic behind my spell checker comes from merging Lawrence
+// Philips excellent metaphone algorithm and Ispell's near miss
+// strategy which is inserting a space or hyphen, interchanging two
+// adjacent letters, changing one letter, deleting a letter, or adding
+// a letter.
+// 
+// The process goes something like this.
+// 
+// 1.     Convert the misspelled word to its soundslike equivalent (its
+//        metaphone for English words).
+// 
+// 2.     Find words that have the same soundslike pattern.
+//
+// 3.     Find words that have similar soundslike patterns. A similar
+//        soundlike pattern is a pattern that is obtained by
+//        interchanging two adjacent letters, changing one letter,
+//        deleting a letter, or adding a letter.
+//
+// 4.     Score the result list and return the words with the lowest
+//        score. The score is roughly the weighed average of the edit
+//        distance of the word to the misspelled word, the soundslike
+//        equivalent of the two words, and the phoneme of the two words.
+//        The edit distance is the weighed total of the number of
+//        deletions, insertions, exchanges, or adjacent swaps needed to
+//        make one string equivalent to the other.
+//
+// Please note that the soundlike equivalent is a rough approximation
+// of how the words sounds. It is not the phoneme of the word by any
+// means.  For more information on the metaphone algorithm please see
+// the file metaphone.cc which included a detailed description of it.
+//
+// NOTE: It is assumed that that strlen(soundslike) <= strlen(word)
+//       for any possible word
+
+// POSSIBLE OPTIMIZATION:
+//   store the number of letters that are the same as the previous 
+//     soundslike so that it can possible be skipped
+
+#include "getdata.hpp"
+
+#include "fstream.hpp"
+
+#include "speller_impl.hpp"
+#include "asuggest.hpp"
+#include "basic_list.hpp"
+#include "clone_ptr-t.hpp"
+#include "config.hpp"
+#include "data.hpp"
+#include "editdist.hpp"
+#include "editdist2.hpp"
+#include "errors.hpp"
+#include "file_data_util.hpp"
+#include "hash-t.hpp"
+#include "language.hpp"
+#include "leditdist.hpp"
+#include "speller_impl.hpp"
+#include "stack_ptr.hpp"
+#include "suggest.hpp"
+#include "vararray.hpp"
+#include "string_list.hpp"
+
+#include "gettext.h"
+
+//#include "iostream.hpp"
+//#define DEBUG_SUGGEST
+
+using namespace aspeller;
+using namespace acommon;
+using namespace std;
+
+namespace {
+
+  typedef vector<String> NearMissesFinal;
+
+  template <class Iterator>
+  inline Iterator preview_next (Iterator i) {
+    return ++i;
+  }
+  
+  //
+  // OriginalWord stores infomation about the original misspelled word
+  //   for convince and speed.
+  //
+  struct OriginalWord {
+    String   word;
+    String   lower;
+    String   clean;
+    String   soundslike;
+    CasePattern  case_pattern;
+    OriginalWord() {}
+  };
+
+  //
+  // struct ScoreWordSound - used for storing the possible words while
+  //   they are being processed.
+  //
+
+  struct ScoreWordSound {
+    char * word;
+    char * word_clean;
+    //unsigned word_size;
+    const char * soundslike;
+    int           score;
+    int           word_score;
+    int           soundslike_score;
+    bool          count;
+    WordEntry * repl_list;
+    ScoreWordSound() {repl_list = 0;}
+    ~ScoreWordSound() {delete repl_list;}
+  };
+
+  inline int compare (const ScoreWordSound &lhs, 
+                     const ScoreWordSound &rhs) 
+  {
+    int temp = lhs.score - rhs.score;
+    if (temp) return temp;
+    return strcmp(lhs.word,rhs.word);
+  }
+
+  inline bool operator < (const ScoreWordSound & lhs, 
+                         const ScoreWordSound & rhs) {
+    return compare(lhs, rhs) < 0;
+  }
+
+  inline bool operator <= (const ScoreWordSound & lhs, 
+                          const ScoreWordSound & rhs) {
+    return compare(lhs, rhs) <= 0;
+  }
+
+  inline bool operator == (const ScoreWordSound & lhs, 
+                          const ScoreWordSound & rhs) {
+    return compare(lhs, rhs) == 0;
+  }
+
+  typedef BasicList<ScoreWordSound> NearMisses;
+  class Score {
+  protected:
+    const Language * lang;
+    OriginalWord     original;
+    const SuggestParms * parms;
+
+  public:
+    Score(const Language *l, const String &w, const SuggestParms * p)
+      : lang(l), original(), parms(p)
+    {
+      original.word = w;
+      l->to_lower(original.lower, w.str());
+      l->to_clean(original.clean, w.str());
+      l->to_soundslike(original.soundslike, w.str());
+      original.case_pattern = l->case_pattern(w);
+      
+    }
+    void fix_case(char * str) {
+      lang->LangImpl::fix_case(original.case_pattern, str, str);
+    }
+    const char * fix_case(const char * str, String & buf) {
+      return lang->LangImpl::fix_case(original.case_pattern, str, buf);
+    }
+  };
+
+  class Working : public Score {
+   
+    int threshold;
+    int try_harder;
+
+    EditDist (* edit_dist_fun)(const char *, const char *,
+                               const EditDistanceWeights &);
+
+    unsigned int max_word_length;
+
+    SpellerImpl  *     sp;
+    NearMisses         scored_near_misses;
+    NearMisses         near_misses;
+    NearMissesFinal  * near_misses_final;
+
+    char * temp_end;
+
+    ObjStack           buffer;
+    ObjStack           temp_buffer;
+
+    static const bool do_count = true;
+    static const bool dont_count = false;
+
+    CheckInfo check_info[8];
+
+    void commit_temp(const char * b) {
+      if (temp_end) {
+        buffer.resize_temp(temp_end - b + 1);
+        buffer.commit_temp();
+        temp_end = 0; }}
+    void abort_temp() {
+      buffer.abort_temp();
+      temp_end = 0;}
+    const char * to_soundslike_temp(const char * w, unsigned s, unsigned * len = 0) {
+      char * sl = (char *)buffer.alloc_temp(s + 1);
+      temp_end = lang->LangImpl::to_soundslike(sl, w, s);
+      if (len) *len = temp_end - sl;
+      return sl;}
+    const char * to_soundslike_temp(const WordEntry & sw) {
+      char * sl = (char *)buffer.alloc_temp(sw.word_size + 1);
+      temp_end = lang->LangImpl::to_soundslike(sl, sw.word, sw.word_size, sw.word_info);
+      if (temp_end == 0) return sw.word;
+      else return sl;}
+    const char * to_soundslike(const char * w, unsigned s) {
+      char * sl = (char *)buffer.alloc_temp(s + 1);
+      temp_end = lang->LangImpl::to_soundslike(sl, w, s);
+      commit_temp(sl);
+      return sl;}
+
+    MutableString form_word(CheckInfo & ci);
+    void try_word_n(ParmString str, int score);
+    bool check_word_s(ParmString word, CheckInfo * ci);
+    unsigned check_word(char * word, char * word_end, CheckInfo * ci,
+                        /* it WILL modify word */
+                        unsigned pos = 1);
+    void try_word_c(char * word, char * word_end, int score);
+
+    void try_word(char * word, char * word_end, int score) {
+      if (sp->unconditional_run_together_)
+        try_word_c(word,word_end,score);
+      else
+        try_word_n(word,score);
+    }
+
+    void add_sound(SpellerImpl::WS::const_iterator i,
+                   WordEntry * sw, const char * sl, int score = -1);
+    void add_nearmiss(char * word, unsigned word_size, WordInfo word_info,
+                      const char * sl,
+                      int w_score, int sl_score,
+                      bool count = do_count, WordEntry * rl = 0);
+    void add_nearmiss(SpellerImpl::WS::const_iterator, const WordEntry & w, 
+                      const char * sl,
+                      int w_score, int sl_score, bool count = do_count);
+    void add_nearmiss(SpellerImpl::WS::const_iterator, const WordAff * w,
+                      const char * sl, 
+                      int w_score, int sl_score, bool count = do_count);
+    bool have_score(int score) {return score < LARGE_NUM;}
+    int needed_level(int want, int soundslike_score) {
+      int n = (100*want - parms->soundslike_weight*soundslike_score)
+       /(parms->word_weight*parms->edit_distance_weights.min);
+      return n > 0 ? n : 0;
+    }
+    int weighted_average(int soundslike_score, int word_score) {
+      return (parms->word_weight*word_score 
+             + parms->soundslike_weight*soundslike_score)/100;
+    }
+    int skip_first_couple(NearMisses::iterator & i) {
+      int k = 0;
+      InsensitiveCompare cmp(lang);
+      const char * prev_word = "";
+      while (preview_next(i) != scored_near_misses.end()) 
+       // skip over the first couple of items as they should
+       // not be counted in the threshold score.
+      {
+       if (!i->count || cmp(prev_word, i->word) == 0) {
+         ++i;
+       } else if (k == parms->skip) {
+         break;
+       } else {
+          prev_word = i->word;
+         ++k;
+         ++i;
+       }
+      }
+      return k;
+    }
+
+    void try_split();
+    void try_one_edit_word();
+    void try_scan();
+    void try_scan_root();
+    void try_repl();
+    void try_ngram();
+
+    void score_list();
+    void fine_tune_score();
+    void transfer();
+  public:
+    Working(SpellerImpl * m, const Language *l,
+           const String & w, const SuggestParms *  p)
+      : Score(l,w,p), threshold(1), max_word_length(0), sp(m) {
+      memset(check_info, 0, sizeof(check_info));
+    }
+    void get_suggestions(NearMissesFinal &sug);
+  };
+
+  void Working::get_suggestions(NearMissesFinal & sug) {
+
+    if (original.word.size() * parms->edit_distance_weights.max >= 0x8000)
+      return; // to prevent overflow in the editdist functions
+
+    near_misses_final = & sug;
+
+    try_split();
+
+    if (parms->use_repl_table) {
+
+#ifdef DEBUG_SUGGEST
+      COUT.printl("TRYING REPLACEMENT TABLE");
+#endif
+
+      try_repl();
+    }
+
+    if (parms->try_one_edit_word) {
+
+#ifdef DEBUG_SUGGEST
+      COUT.printl("TRYING ONE EDIT WORD");
+#endif
+
+      try_one_edit_word();
+
+      if (parms->check_after_one_edit_word) {
+        score_list();
+        if (try_harder <= 0) goto done;
+      }
+
+    }
+
+    if (parms->try_scan_1) {
+      
+#ifdef DEBUG_SUGGEST
+      COUT.printl("TRYING SCAN 1");
+#endif
+      edit_dist_fun = limit1_edit_distance;
+
+      if (sp->soundslike_root_only)
+        try_scan_root();
+      else
+        try_scan();
+
+      score_list();
+      
+      if (try_harder <= 0) goto done;
+
+    }
+
+    if (parms->try_scan_2) {
+
+#ifdef DEBUG_SUGGEST
+      COUT.printl("TRYING SCAN 2");
+#endif
+
+      edit_dist_fun = limit2_edit_distance;
+
+      if (sp->soundslike_root_only)
+        try_scan_root();
+      else
+        try_scan();
+
+      score_list();
+      
+      if (try_harder < parms->ngram_threshold) goto done;
+
+    }
+
+    if (parms->try_ngram) {
+
+#ifdef DEBUG_SUGGEST
+      COUT.printl("TRYING NGRAM");
+#endif
+
+      try_ngram();
+
+      score_list();
+
+    }
+
+  done:
+
+    fine_tune_score();
+
+    transfer();
+  }
+
+  // Forms a word by combining CheckInfo fields.
+  // Will grow the grow the temp in the buffer.  The final
+  // word must be null terminated and commited.
+  // It returns a MutableString of what was appended to the buffer.
+  MutableString Working::form_word(CheckInfo & ci) 
+  {
+    size_t slen = ci.word.size() - ci.pre_strip_len - ci.suf_strip_len;
+    size_t wlen = slen + ci.pre_add_len + ci.suf_add_len;
+    char * tmp = (char *)buffer.grow_temp(wlen);
+    if (ci.pre_add_len) 
+      memcpy(tmp, ci.pre_add, ci.pre_add_len);
+    memcpy(tmp + ci.pre_add_len, ci.word.str() + ci.pre_strip_len, slen);
+    if (ci.suf_add_len) 
+      memcpy(tmp + ci.pre_add_len + slen, ci.suf_add, ci.suf_add_len);
+    return MutableString(tmp,wlen);
+  }
+
+  void Working::try_word_n(ParmString str, int score)  
+  {
+    String word;
+    String buf;
+    WordEntry sw;
+    for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin();
+         i != sp->suggest_ws.end();
+         ++i)
+    {
+      (*i)->clean_lookup(str, sw);
+      for (;!sw.at_end(); sw.adv())
+        add_nearmiss(i, sw, 0, score, -1, do_count);
+    }
+    if (sp->affix_compress) {
+      CheckInfo ci; memset(&ci, 0, sizeof(ci));
+      bool res = lang->affix()->affix_check(LookupInfo(sp, LookupInfo::Clean), str, ci, 0);
+      if (!res) return;
+      form_word(ci);
+      char * end = (char *)buffer.grow_temp(1);
+      char * tmp = (char *)buffer.temp_ptr();
+      buffer.commit_temp();
+      *end = '\0';
+      add_nearmiss(tmp, end - tmp, 0, 0, score, -1, do_count);
+    }
+  }
+
+  bool Working::check_word_s(ParmString word, CheckInfo * ci)
+  {
+    WordEntry sw;
+    for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin();
+         i != sp->suggest_ws.end();
+         ++i)
+    {
+      (*i)->clean_lookup(word, sw);
+      if (!sw.at_end()) {
+        ci->word = sw.word;
+        return true;
+      }
+    }
+    if (sp->affix_compress) {
+      return lang->affix()->affix_check(LookupInfo(sp, LookupInfo::Clean), word, *ci, 0);
+    }
+    return false;
+  }
+
+  unsigned Working::check_word(char * word, char * word_end,  CheckInfo * ci,
+                          /* it WILL modify word */
+                          unsigned pos)
+  {
+    unsigned res = check_word_s(word, ci);
+    if (res) return pos + 1;
+    if (pos + 1 >= sp->run_together_limit_) return 0;
+    for (char * i = word + sp->run_together_min_; 
+         i <= word_end - sp->run_together_min_;
+         ++i)
+    {
+      char t = *i;
+      *i = '\0';
+      res = check_word_s(word, ci);
+      *i = t;
+      if (!res) continue;
+      res = check_word(i, word_end, ci + 1, pos + 1);
+      if (res) return res;
+    }
+    memset(ci, 0, sizeof(CheckInfo));
+    return 0;
+  }
+
+  void Working::try_word_c(char * word, char * word_end, int score)
+  {
+    unsigned res = check_word(word, word_end, check_info);
+    assert(res <= sp->run_together_limit_);
+    //CERR.printf(">%s\n", word);
+    if (!res) return;
+    buffer.abort_temp();
+    MutableString tmp = form_word(check_info[0]);
+    CasePattern cp = lang->case_pattern(tmp, tmp.size);
+    for (unsigned i = 1; i <= res; ++i) {
+      char * t = form_word(check_info[i]);
+      if (cp == FirstUpper && lang->is_lower(t[1])) 
+        t[0] = lang->to_lower(t[0]);
+    }
+    char * end = (char *)buffer.grow_temp(1);
+    char * beg = (char *)buffer.temp_ptr(); // since the orignal string may of moved
+    *end = 0;
+    buffer.commit_temp();
+    add_nearmiss(beg, end - beg, 0, 0, score, -1, do_count);
+    //CERR.printl(tmp);
+    memset(check_info, 0, sizeof(CheckInfo)*res);
+  }
+
+  void Working::add_nearmiss(char * word, unsigned word_size,
+                             WordInfo word_info,
+                             const char * sl,
+                             int w_score, int sl_score, 
+                             bool count, WordEntry * rl)
+  {
+    if (word_size * parms->edit_distance_weights.max >= 0x8000) 
+      return; // to prevent overflow in the editdist functions
+
+    if (w_score < 0) w_score = LARGE_NUM;
+    if (sl_score < 0) sl_score = LARGE_NUM;
+    if (!sp->have_soundslike) {
+      if (w_score >= LARGE_NUM)       w_score = sl_score;
+      else if (sl_score >= LARGE_NUM) sl_score = w_score;
+    }
+
+    near_misses.push_front(ScoreWordSound());
+    ScoreWordSound & d = near_misses.front();
+    d.word = word;
+    d.soundslike = sl;
+    //d.word_size = word_size;
+    
+    if (parms->use_typo_analysis) {
+      unsigned int l = word_size;
+      if (l > max_word_length) max_word_length = l;
+    }
+    
+    if (!(word_info & ALL_CLEAN)) {
+      d.word_clean = (char *)buffer.alloc(word_size + 1);
+      lang->LangImpl::to_clean((char *)d.word_clean, word);
+    } else {
+      d.word_clean = d.word;
+    }
+
+    if (!sp->have_soundslike && !d.soundslike)
+      d.soundslike = d.word_clean;
+    
+    d.word_score       = w_score;
+    d.soundslike_score = sl_score;
+    d.count = count;
+    d.repl_list = rl;
+  }
+
+  void Working::add_nearmiss(SpellerImpl::WS::const_iterator i,
+                             const WordEntry & w, const char * sl,
+                             int w_score, int sl_score, bool count)
+  {
+    assert(w.word_size == strlen(w.word));
+    WordEntry * repl = 0;
+    if (w.what == WordEntry::Misspelled) {
+      repl = new WordEntry;
+      const ReplacementDict * repl_dict
+        = static_cast<const ReplacementDict *>(*i);
+      repl_dict->repl_lookup(w, *repl);
+    }
+    add_nearmiss(buffer.dup(ParmString(w.word, w.word_size)), 
+                 w.word_size, w.word_info, 
+                 sl,
+                 w_score, sl_score, count, repl);
+  }
+  
+  void Working::add_nearmiss(SpellerImpl::WS::const_iterator i,
+                             const WordAff * w, const char * sl,
+                             int w_score, int sl_score, bool count)
+  {
+    add_nearmiss(buffer.dup(w->word), w->word.size, 0, 
+                 sl,
+                 w_score, sl_score, count);
+  }
+
+  void Working::try_split() {
+    const String & word       = original.word;
+    
+    if (word.size() < 4 || parms->split_chars.empty()) return;
+    size_t i = 0;
+    
+    String new_word_str;
+    String buf;
+    new_word_str.resize(word.size() + 1);
+    char * new_word = new_word_str.data();
+    memcpy(new_word, word.data(), word.size());
+    new_word[word.size() + 1] = '\0';
+    new_word[word.size() + 0] = new_word[word.size() - 1];
+    
+    for (i = word.size() - 2; i >= 2; --i) {
+      new_word[i+1] = new_word[i];
+      new_word[i] = '\0';
+      
+      if (sp->check(new_word) && sp->check(new_word + i + 1)) {
+        for (size_t j = 0; j != parms->split_chars.size(); ++j)
+        {
+          new_word[i] = parms->split_chars[j];
+          add_nearmiss(buffer.dup(new_word), word.size() + 1, 0, 0,
+                       parms->edit_distance_weights.del2*3/2, -1,
+                       dont_count);
+        }
+      }
+    }
+  }
+
+  void Working::try_one_edit_word() 
+  {
+    const String & orig = original.clean;
+    const char * replace_list = lang->clean_chars();
+    char a,b;
+    const char * c;
+    VARARRAY(char, new_word, orig.size() + 2);
+    char * new_word_end = new_word + orig.size();
+    size_t i;
+
+    memcpy(new_word, orig.str(), orig.size() + 1);
+
+    // Try word as is (in case of case difference etc)
+
+    try_word(new_word,  new_word_end, 0);
+
+    // Change one letter
+    
+    for (i = 0; i != orig.size(); ++i) {
+      for (c = replace_list; *c; ++c) {
+        if (*c == orig[i]) continue;
+        new_word[i] = *c;
+        try_word(new_word, new_word_end, parms->edit_distance_weights.sub);
+      }
+      new_word[i] = orig[i];
+    }
+    
+    // Interchange two adjacent letters.
+    
+    for (i = 0; i+1 < orig.size(); ++i) {
+      a = new_word[i];
+      b = new_word[i+1];
+      new_word[i] = b;
+      new_word[i+1] = a;
+      try_word(new_word, new_word_end, parms->edit_distance_weights.swap);
+      new_word[i] = a;
+      new_word[i+1] = b;
+    }
+
+    // Add one letter
+
+    *new_word_end = ' ';
+    new_word_end++;
+    *new_word_end = '\0';
+    i = new_word_end - new_word - 1;
+    while(true) {
+      for (c=replace_list; *c; ++c) {
+        new_word[i] = *c;
+        try_word(new_word, new_word_end, parms->edit_distance_weights.del1);
+      }
+      if (i == 0) break;
+      new_word[i] = new_word[i-1];
+      --i;
+    }
+    
+    // Delete one letter
+
+    if (orig.size() > 1) {
+      memcpy(new_word, orig.str(), orig.size() + 1);
+      new_word_end = new_word + orig.size() - 1;
+      a = *new_word_end;
+      *new_word_end = '\0';
+      i = orig.size() - 1;
+      while (true) {
+        try_word(new_word, new_word_end, parms->edit_distance_weights.del2);
+        if (i == 0) break;
+        b = a;
+        a = new_word[i-1];
+        new_word[i-1] = b;
+        --i;
+      }
+    }
+  }
+
+  void Working::add_sound(SpellerImpl::WS::const_iterator i,
+                          WordEntry * sw, const char * sl, int score)
+  {
+    WordEntry w;
+    (*i)->soundslike_lookup(*sw, w);
+
+    for (; !w.at_end(); w.adv()) {
+      
+      add_nearmiss(i, w, sl, -1, score);
+      
+      if (w.aff[0]) {
+        String sl_buf;
+        temp_buffer.reset();
+        WordAff * exp_list;
+          exp_list = lang->affix()->expand(w.word, w.aff, temp_buffer);
+          for (WordAff * p = exp_list->next; p; p = p->next)
+            add_nearmiss(i, p, 0, -1, -1);
+      }
+      
+    }
+  }
+
+  void Working::try_scan() 
+  {
+    const char * original_soundslike = original.soundslike.str();
+    
+    WordEntry * sw;
+    WordEntry w;
+    const char * sl = 0;
+    EditDist score;
+    unsigned int stopped_at = LARGE_NUM;
+    WordAff * exp_list;
+    WordAff single;
+    single.next = 0;
+
+    for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin();
+         i != sp->suggest_ws.end();
+         ++i) 
+    {
+      //CERR.printf(">>%p %s\n", *i, typeid(**i).name());
+      StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements());
+
+      while ( (sw = els->next(stopped_at)) ) {
+
+        //CERR.printf("[%s (%d) %d]\n", sw->word, sw->word_size, sw->what);
+        //assert(strlen(sw->word) == sw->word_size);
+          
+        if (sw->what != WordEntry::Word) {
+          sl = sw->word;
+          abort_temp();
+        } else if (!*sw->aff) {
+          sl = to_soundslike_temp(*sw);
+        } else {
+          goto affix_case;
+        }
+
+        //CERR.printf("SL = %s\n", sl);
+        
+        score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights);
+        stopped_at = score.stopped_at - sl;
+        if (score >= LARGE_NUM) continue;
+        stopped_at = LARGE_NUM;
+        commit_temp(sl);
+        add_sound(i, sw, sl, score);
+        continue;
+        
+      affix_case:
+        
+        temp_buffer.reset();
+        
+        // first expand any prefixes
+        if (sp->fast_scan) { // if fast_scan than no prefixes
+          single.word.str = sw->word;
+          single.word.size = strlen(sw->word);
+          single.aff = (const unsigned char *)sw->aff;
+          exp_list = &single;
+        } else {
+          exp_list = lang->affix()->expand_prefix(sw->word, sw->aff, temp_buffer);
+        }
+        
+        // iterate through each semi-expanded word, any affix flags
+        // are now guaranteed to be suffixes
+        for (WordAff * p = exp_list; p; p = p->next)
+        {
+          // try the root word
+          unsigned sl_len;
+          sl = to_soundslike_temp(p->word.str, p->word.size, &sl_len);
+          score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights);
+          stopped_at = score.stopped_at - sl;
+          stopped_at += p->word.size - sl_len;
+          
+          if (score < LARGE_NUM) {
+            commit_temp(sl);
+            add_nearmiss(i, p, sl, -1, score, do_count);
+          }
+          
+          // expand any suffixes, using stopped_at as a hint to avoid
+          // unneeded expansions.  Note stopped_at is the last character
+          // looked at by limit_edit_dist.  Thus if the character
+          // at stopped_at is changed it might effect the result
+          // hence the "limit" is stopped_at + 1
+          if (p->word.size - lang->affix()->max_strip() > stopped_at)
+            exp_list = 0;
+          else
+            exp_list = lang->affix()->expand_suffix(p->word, p->aff, 
+                                                    temp_buffer, 
+                                                    stopped_at + 1);
+          
+          // reset stopped_at if necessary
+          if (score < LARGE_NUM) stopped_at = LARGE_NUM;
+          
+          // iterate through fully expanded words, if any
+          for (WordAff * q = exp_list; q; q = q->next) {
+            sl = to_soundslike_temp(q->word.str, q->word.size);
+            score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights);
+            if (score >= LARGE_NUM) continue;
+            commit_temp(sl);
+            add_nearmiss(i, q, sl, -1, score, do_count);
+          }
+        }
+      }
+    }
+  }
+
+  void Working::try_scan_root() 
+  {
+
+    WordEntry * sw;
+    WordEntry w;
+    const char * sl = 0;
+    EditDist score;
+    int stopped_at = LARGE_NUM;
+    GuessInfo gi;
+    lang->munch(original.word, &gi);
+    Vector<const char *> sls;
+    sls.push_back(original.soundslike.str());
+#ifdef DEBUG_SUGGEST
+    COUT.printf("will try soundslike: %s\n", sls.back());
+#endif
+    for (const aspeller::CheckInfo * ci = gi.head;
+         ci; 
+         ci = ci->next) 
+    {
+      sl = to_soundslike(ci->word.str(), ci->word.size());
+      Vector<const char *>::iterator i = sls.begin();
+      while (i != sls.end() && strcmp(*i, sl) != 0) ++i;
+      if (i == sls.end()) {
+        sls.push_back(to_soundslike(ci->word.str(), ci->word.size()));
+#ifdef DEBUG_SUGGEST
+        COUT.printf("will try root soundslike: %s\n", sls.back());
+#endif
+      }
+    }
+    const char * * begin = sls.pbegin();
+    const char * * end   = sls.pend();
+    for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin();
+         i != sp->suggest_ws.end();
+         ++i) 
+    {
+      StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements());
+
+      while ( (sw = els->next(stopped_at)) ) {
+          
+        if (sw->what != WordEntry::Word) {
+          sl = sw->word;
+          abort_temp();
+        } else {
+          sl = to_soundslike_temp(*sw);
+        } 
+
+        stopped_at = LARGE_NUM;
+        for (const char * * s = begin; s != end; ++s) {
+          score = edit_dist_fun(sl, *s, 
+                                parms->edit_distance_weights);
+          if (score.stopped_at - sl < stopped_at)
+            stopped_at = score.stopped_at - sl;
+          if (score >= LARGE_NUM) continue;
+          stopped_at = LARGE_NUM;
+          commit_temp(sl);
+          add_sound(i, sw, sl, score);
+          //CERR.printf("using %s: will add %s with score %d\n", *s, sl, (int)score);
+          break;
+        }
+      }
+    }
+  }
+
+  struct ReplTry 
+  {
+    const char * begin;
+    const char * end;
+    const char * repl;
+    size_t repl_len;
+    ReplTry(const char * b, const char * e, const char * r)
+      : begin(b), end(e), repl(r), repl_len(strlen(r)) {}
+  };
+
+  void Working::try_repl() 
+  {
+    String buf;
+    Vector<ReplTry> repl_try;
+    StackPtr<SuggestReplEnumeration> els(lang->repl());
+    const SuggestRepl * r = 0;
+    const char * word = original.clean.str();
+    const char * wend = word + original.clean.size();
+    while (r = els->next(), r) 
+    {
+      const char * p = word;
+      while ((p = strstr(p, r->substr))) {
+        buf.clear();
+        buf.append(word, p);
+        buf.append(r->repl, strlen(r->repl));
+        p += strlen(r->substr);
+        buf.append(p, wend + 1);
+        buf.ensure_null_end();
+        //COUT.printf("%s (%s) => %s (%s)\n", word, r->substr, buf.str(), r->repl);
+        try_word(buf.pbegin(), buf.pend(), parms->edit_distance_weights.sub*3/2);
+      }
+    }
+  }
+
+  // generate an n-gram score comparing s1 and s2
+  static int ngram(int n, char * s1, int l1, const char * s2, int l2)
+  {
+    int nscore = 0;
+    int ns;
+    for (int j=1;j<=n;j++) {
+      ns = 0;
+      for (int i=0;i<=(l1-j);i++) {
+        char c = *(s1 + i + j);
+        *(s1 + i + j) = '\0';
+        if (strstr(s2,(s1+i))) ns++;
+        *(s1 + i + j ) = c;
+      }
+      nscore = nscore + ns;
+      if (ns < 2) break;
+    }
+    ns = 0;
+    ns = (l2-l1)-2;
+    return (nscore - ((ns > 0) ? ns : 0));
+  }
+
+  struct NGramScore {
+    SpellerImpl::WS::const_iterator i;
+    WordEntry info;
+    const char * soundslike;
+    int score;
+    NGramScore() {}
+    NGramScore(SpellerImpl::WS::const_iterator i0,
+               WordEntry info0, const char * sl, int score0) 
+      : i(i0), info(info0), soundslike(sl), score(score0) {}
+  };
+
+
+  void Working::try_ngram()
+  {
+    String original_soundslike = original.soundslike;
+    original_soundslike.ensure_null_end();
+    WordEntry * sw = 0;
+    const char * sl = 0;
+    typedef Vector<NGramScore> Candidates;
+    hash_set<const char *> already_have;
+    Candidates candidates;
+    int min_score = 0;
+    int count = 0;
+
+    for (NearMisses::iterator i = scored_near_misses.begin();
+         i != scored_near_misses.end(); ++i)
+    {
+      if (!i->soundslike)
+        i->soundslike = to_soundslike(i->word, strlen(i->word));
+      already_have.insert(i->soundslike);
+    }
+
+    for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin();
+         i != sp->suggest_ws.end();
+         ++i) 
+    {
+      StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements());
+      
+      while ( (sw = els->next(LARGE_NUM)) ) {
+
+        if (sw->what != WordEntry::Word) {
+          abort_temp();
+          sl = sw->word;
+        } else {
+          sl = to_soundslike_temp(sw->word, sw->word_size);
+        }
+        
+        if (already_have.have(sl)) continue;
+
+        int ng = ngram(3, original_soundslike.data(), original_soundslike.size(),
+                       sl, strlen(sl));
+
+        if (ng > 0 && ng >= min_score) {
+          commit_temp(sl);
+          candidates.push_back(NGramScore(i, *sw, sl, ng));
+          if (ng > min_score) count++;
+          if (count >= parms->ngram_keep) {
+            int orig_min = min_score;
+            min_score = LARGE_NUM;
+            Candidates::iterator i = candidates.begin();
+            Candidates::iterator j = candidates.begin();
+            for (; i != candidates.end(); ++i) {
+              if (i->score == orig_min) continue;
+              if (min_score > i->score) min_score = i->score;
+              *j = *i;
+              ++j;
+            }
+            count = 0;
+            candidates.resize(j-candidates.begin());
+            for (i = candidates.begin(); i != candidates.end(); ++i) {
+              if (i->score != min_score) count++;
+            }
+          }
+        }
+      }
+    }
+    
+    for (Candidates::iterator i = candidates.begin();
+         i != candidates.end();
+         ++i)
+    {
+      //COUT.printf("ngram: %s %d\n", i->soundslike, i->score);
+      add_sound(i->i, &i->info, i->soundslike);
+    }
+  }
+  
+  void Working::score_list() {
+
+#  ifdef DEBUG_SUGGEST
+    COUT.printl("SCORING LIST");
+#  endif
+
+    try_harder = 3;
+    if (near_misses.empty()) return;
+
+    NearMisses::iterator i;
+    NearMisses::iterator prev;
+
+    near_misses.push_front(ScoreWordSound());
+    // the first item will NEVER be looked at.
+    scored_near_misses.push_front(ScoreWordSound());
+    scored_near_misses.front().score = -1;
+    // this item will only be looked at when sorting so 
+    // make it a small value to keep it at the front.
+
+    int try_for = (parms->word_weight*parms->edit_distance_weights.max)/100;
+    while (true) {
+      try_for += (parms->word_weight*parms->edit_distance_weights.max)/100;
+
+      // put all pairs whose score <= initial_limit*max_weight
+      // into the scored list
+
+      prev = near_misses.begin();
+      i = prev;
+      ++i;
+      while (i != near_misses.end()) {
+
+        //CERR.printf("%s %s %s %d %d\n", i->word, i->word_clean, i->soundslike,
+        //            i->word_score, i->soundslike_score);
+
+        if (i->word_score >= LARGE_NUM) {
+          int sl_score = i->soundslike_score < LARGE_NUM ? i->soundslike_score : 0;
+          int level = needed_level(try_for, sl_score);
+          
+          if (level >= int(sl_score/parms->edit_distance_weights.min)) 
+            i->word_score = edit_distance(original.clean,
+                                          i->word_clean,
+                                          level, level,
+                                          parms->edit_distance_weights);
+        }
+        
+        if (i->word_score >= LARGE_NUM) goto cont1;
+
+        if (i->soundslike_score >= LARGE_NUM) 
+        {
+          if (weighted_average(0, i->word_score) > try_for) goto cont1;
+
+          if (i->soundslike == 0) i->soundslike = to_soundslike(i->word, strlen(i->word));
+
+          i->soundslike_score = edit_distance(original.soundslike, i->soundslike, 
+                                              parms->edit_distance_weights);
+        }
+
+        i->score = weighted_average(i->soundslike_score, i->word_score);
+
+        if (i->score > try_for + parms->span) goto cont1;
+
+        //CERR.printf("2>%s %s %s %d %d\n", i->word, i->word_clean, i->soundslike,
+        //            i->word_score, i->soundslike_score);
+
+        scored_near_misses.splice_into(near_misses,prev,i);
+        
+        i = prev; // Yes this is right due to the slice
+        ++i;
+
+        continue;
+        
+      cont1:
+        prev = i;
+        ++i;
+      }
+       
+      scored_near_misses.sort();
+       
+      i = scored_near_misses.begin();
+      ++i;
+       
+      if (i == scored_near_misses.end()) continue;
+       
+      int k = skip_first_couple(i);
+       
+      if ((k == parms->skip && i->score <= try_for) 
+         || prev == near_misses.begin() ) // or no more left in near_misses
+       break;
+    }
+      
+    threshold = i->score + parms->span;
+    if (threshold < parms->edit_distance_weights.max)
+      threshold = parms->edit_distance_weights.max;
+
+#  ifdef DEBUG_SUGGEST
+    COUT << "Threshold is: " << threshold << "\n";
+    COUT << "try_for: " << try_for << "\n";
+    COUT << "Size of scored: " << scored_near_misses.size() << "\n";
+    COUT << "Size of ! scored: " << near_misses.size() << "\n";
+#  endif
+
+    //if (threshold - try_for <=  parms->edit_distance_weights.max/2) return;
+      
+    prev = near_misses.begin();
+    i = prev;
+    ++i;
+    while (i != near_misses.end()) {
+       
+      if (i->word_score >= LARGE_NUM) {
+
+        int sl_score = i->soundslike_score < LARGE_NUM ? i->soundslike_score : 0;
+        int initial_level = needed_level(try_for, sl_score);
+        int max_level = needed_level(threshold, sl_score);
+        
+        if (initial_level < max_level)
+          i->word_score = edit_distance(original.clean.c_str(),
+                                        i->word_clean,
+                                        initial_level+1,max_level,
+                                        parms->edit_distance_weights);
+      }
+
+      if (i->word_score >= LARGE_NUM) goto cont2;
+      
+      if (i->soundslike_score >= LARGE_NUM) 
+      {
+        if (weighted_average(0, i->word_score) > threshold) goto cont2;
+        
+        if (i->soundslike == 0) 
+          i->soundslike = to_soundslike(i->word, strlen(i->word));
+        
+        i->soundslike_score = edit_distance(original.soundslike, i->soundslike,
+                                            parms->edit_distance_weights);
+      }
+
+      i->score = weighted_average(i->soundslike_score, i->word_score);
+
+      if (i->score > threshold + parms->span) goto cont2;
+      
+      scored_near_misses.splice_into(near_misses,prev,i);
+      
+      i = prev; // Yes this is right due to the slice
+      ++i;
+      
+      continue;
+       
+    cont2:
+       prev = i;
+       ++i;
+        
+    }
+
+    near_misses.pop_front();
+
+    scored_near_misses.sort();
+    scored_near_misses.pop_front();
+
+    if (near_misses.empty()) {
+      try_harder = 1;
+    } else {
+      i = scored_near_misses.begin();
+      skip_first_couple(i);
+      ++i;
+      try_harder = i == scored_near_misses.end() ? 2 : 0;
+    }
+
+#  ifdef DEBUG_SUGGEST
+    COUT << "Size of scored: " << scored_near_misses.size() << "\n";
+    COUT << "Size of ! scored: " << near_misses.size() << "\n";
+    COUT << "Try Harder: " << try_harder << "\n";
+#  endif
+  }
+
+  void Working::fine_tune_score() {
+
+    NearMisses::iterator i;
+
+    if (parms->use_typo_analysis) {
+      int max = 0;
+      unsigned int j;
+
+      CharVector orig_norm, word;
+      orig_norm.resize(original.word.size() + 1);
+      for (j = 0; j != original.word.size(); ++j)
+          orig_norm[j] = parms->ti->to_normalized(original.word[j]);
+      orig_norm[j] = 0;
+      ParmString orig(orig_norm.data(), j);
+      word.resize(max_word_length + 1);
+      
+      for (i = scored_near_misses.begin();
+          i != scored_near_misses.end() && i->score <= threshold;
+          ++i)
+      {
+       for (j = 0; (i->word)[j] != 0; ++j)
+         word[j] = parms->ti->to_normalized((i->word)[j]);
+       word[j] = 0;
+       int word_score 
+         = typo_edit_distance(ParmString(word.data(), j), orig, *parms->ti);
+       i->score = weighted_average(i->soundslike_score, word_score);
+       if (max < i->score) max = i->score;
+      }
+      threshold = max;
+      for (;i != scored_near_misses.end() && i->score <= threshold; ++i)
+       i->score = threshold + 1;
+
+      scored_near_misses.sort();
+    }
+  }
+
+  void Working::transfer() {
+
+#  ifdef DEBUG_SUGGEST
+    COUT << "\n" << "\n" 
+        << original.word << '\t' 
+        << original.soundslike << '\t'
+        << "\n";
+    String sl;
+#  endif
+    int c = 1;
+    hash_set<String,HashString<String> > duplicates_check;
+    String buf;
+    String final_word;
+    pair<hash_set<String,HashString<String> >::iterator, bool> dup_pair;
+    for (NearMisses::const_iterator i = scored_near_misses.begin();
+        i != scored_near_misses.end() && c <= parms->limit
+          && ( i->score <= threshold || c <= 3 );
+        ++i, ++c) {
+#    ifdef DEBUG_SUGGEST
+      //COUT.printf("%p %p: ",  i->word, i->soundslike);
+      COUT << i->word << '\t' << i->score 
+           << '\t' << i->soundslike << "\n";
+#    endif
+      if (i->repl_list != 0) {
+       String::size_type pos;
+       do {
+         dup_pair = duplicates_check.insert(fix_case(i->repl_list->word, buf));
+         if (dup_pair.second && 
+             ((pos = dup_pair.first->find(' '), pos == String::npos)
+              ? (bool)sp->check(*dup_pair.first)
+              : (sp->check((String)dup_pair.first->substr(0,pos)) 
+                 && sp->check((String)dup_pair.first->substr(pos+1))) ))
+           near_misses_final->push_back(*dup_pair.first);
+       } while (i->repl_list->adv());
+      } else {
+        fix_case(i->word);
+       dup_pair = duplicates_check.insert(i->word);
+       if (dup_pair.second )
+         near_misses_final->push_back(*dup_pair.first);
+      }
+    }
+  }
+  
+  class SuggestionListImpl : public SuggestionList {
+    struct Parms {
+      typedef const char *                    Value;
+      typedef NearMissesFinal::const_iterator Iterator;
+      Iterator end;
+      Parms(Iterator e) : end(e) {}
+      bool endf(Iterator e) const {return e == end;}
+      Value end_state() const {return 0;}
+      Value deref(Iterator i) const {return i->c_str();}
+    };
+  public:
+    NearMissesFinal suggestions;
+
+    SuggestionList * clone() const {return new SuggestionListImpl(*this);}
+    void assign(const SuggestionList * other) {
+      *this = *static_cast<const SuggestionListImpl *>(other);
+    }
+
+    bool empty() const { return suggestions.empty(); }
+    Size size() const { return suggestions.size(); }
+    VirEmul * elements() const {
+      return new MakeEnumeration<Parms, StringEnumeration>
+       (suggestions.begin(), Parms(suggestions.end()));
+    }
+  };
+
+  class SuggestImpl : public Suggest {
+    SpellerImpl * speller_;
+    SuggestionListImpl  suggestion_list;
+    SuggestParms parms_;
+  public:
+    PosibErr<void> setup(SpellerImpl * m);
+    //SuggestImpl(SpellerImpl * m, const SuggestParms & p)
+    //  : speller_(m), parms_(p) 
+    //{parms_.fill_distance_lookup(m->config(), m->lang());}
+    PosibErr<void> set_mode(ParmString mode) {
+      return parms_.set(mode, speller_);
+    }
+    double score(const char *base, const char *other) {
+      //parms_.set_original_size(strlen(base));
+      //Score s(&speller_->lang(),base,parms_);
+      //string sl = speller_->lang().to_soundslike(other);
+      //ScoreWordSound sws(other, sl.c_str());
+      //s.score(sws);
+      //return sws.score;
+      return -1;
+    }
+    SuggestionList & suggest(const char * word);
+  };
+  
+  PosibErr<void> SuggestImpl::setup(SpellerImpl * m)
+  {
+    speller_ = m;
+    RET_ON_ERR(parms_.set(m->config()->retrieve("sug-mode"), speller_));
+    if (m->config()->have("sug-typo-analysis"))
+      parms_.use_typo_analysis = m->config()->retrieve_bool("sug-typo-analysis");
+    if (m->config()->have("sug-repl-table"))
+      parms_.use_repl_table = m->config()->retrieve_bool("sug-repl-table");
+    
+    StringList sl;
+    m->config()->retrieve_list("sug-split-char", &sl);
+    StringListEnumeration els = sl.elements_obj();
+    const char * s;
+    parms_.split_chars.clear();
+    while ((s = els.next()) != 0) {
+      parms_.split_chars.push_back(*s);
+    }
+
+    String keyboard = m->config()->retrieve("keyboard");
+    if (keyboard == "none")
+      parms_.use_typo_analysis = false;
+    else
+      RET_ON_ERR(aspeller::setup(parms_.ti, m->config(), &m->lang(), keyboard));
+
+    return no_err;
+  }
+
+  SuggestionList & SuggestImpl::suggest(const char * word) { 
+#   ifdef DEBUG_SUGGEST
+    COUT << "=========== begin suggest " << word << " ===========\n";
+#   endif
+    parms_.set_original_word_size(strlen(word));
+    suggestion_list.suggestions.resize(0);
+    Working sug(speller_, &speller_->lang(),word,&parms_);
+    sug.get_suggestions(suggestion_list.suggestions);
+#   ifdef DEBUG_SUGGEST
+    COUT << "^^^^^^^^^^^  end suggest " << word << "  ^^^^^^^^^^^\n";
+#   endif
+    return suggestion_list;
+  }
+  
+}
+
+namespace aspeller {
+  PosibErr<Suggest *> new_default_suggest(SpellerImpl * m) {
+    StackPtr<SuggestImpl> s(new SuggestImpl);
+    RET_ON_ERR(s->setup(m));
+    return s.release();
+  }
+
+  //Suggest * new_default_suggest(SpellerImpl * m, const SuggestParms & p) {
+  //  return new aspeller_default_suggest::SuggestImpl(m,p);
+  //}
+
+  PosibErr<void> SuggestParms::set(ParmString mode, SpellerImpl * sp) {
+
+    edit_distance_weights.del1 =  95;
+    edit_distance_weights.del2 =  95;
+    edit_distance_weights.swap =  90;
+    edit_distance_weights.sub =  100;
+    edit_distance_weights.similar = 10;
+    edit_distance_weights.max = 100;
+    edit_distance_weights.min =  90;
+
+    normal_soundslike_weight = 50;
+    small_word_soundslike_weight = 15;
+    small_word_threshold = 4;
+
+    soundslike_weight = normal_soundslike_weight;
+    word_weight       = 100 - normal_soundslike_weight;
+
+    split_chars = " -";
+
+    skip = 2;
+    limit = 100;
+    span = 50;
+    ngram_keep = 10;
+    use_typo_analysis = true;
+    use_repl_table = sp->have_repl;
+    try_one_edit_word = true; // always a good idea, even when
+                              // soundslike lookup is used
+    check_after_one_edit_word = false;
+    ngram_threshold = 2;
+    if (mode == "ultra") {
+      try_scan_1 = true;
+      try_scan_2 = false;
+      try_ngram = false;
+    } else if (mode == "fast") {
+      try_scan_1 = true;
+      try_scan_2 = false;
+      try_ngram = false;
+    } else if (mode == "normal") {
+      try_scan_1 = true;
+      try_scan_2 = true;
+      try_ngram = false;
+    } else if (mode == "slow") {
+      try_scan_1 = false;
+      try_scan_2 = true;
+      try_ngram = true;
+      ngram_threshold = sp->have_soundslike ? 1 : 2;
+    } else if (mode == "bad-spellers") {
+      try_scan_1 = false;
+      try_scan_2 = true;
+      try_ngram = true;
+      use_typo_analysis = false;
+      normal_soundslike_weight = 55;
+      small_word_threshold = 0;
+      span = 125;
+      limit = 1000;
+      ngram_threshold = 1;
+    } else {
+      return make_err(bad_value, "sug-mode", mode, _("one of ultra, fast, normal, slow, or bad-spellers"));
+    }
+    if (!sp->have_soundslike) {
+      // in this case try_scan_1 will not get better results than
+      // try_one_edit_word
+      if (try_scan_1) {
+        check_after_one_edit_word = true;
+        try_scan_1 = false;
+      }
+    }
+
+    return no_err;
+  }
+
+    
+  SuggestParms * SuggestParms::clone() const {
+    return new SuggestParms(*this);
+  }
+
+  void SuggestParms::set_original_word_size(int size) {
+    if (size <= small_word_threshold) {
+      soundslike_weight = small_word_soundslike_weight;
+    } else {
+      soundslike_weight = normal_soundslike_weight;
+    }
+    word_weight = 100 - soundslike_weight;
+  }
+}
diff --git a/modules/speller/default/suggest.hpp b/modules/speller/default/suggest.hpp
new file mode 100644 (file)
index 0000000..5fc6280
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef ASPELLER_SUGGEST__HPP
+#define ASPELLER_SUGGEST__HPP
+
+#include "word_list.hpp"
+#include "enumeration.hpp"
+#include "parm_string.hpp"
+
+using namespace acommon;
+
+namespace aspeller {
+
+  class SpellerImpl;
+
+  class SuggestionList : public WordList {
+  public:
+    typedef StringEnumeration            VirEmul;
+    typedef Enumeration<VirEmul>         Emul;
+    typedef const char *               Value;
+    typedef unsigned int               Size;
+
+    virtual SuggestionList * clone() const = 0;
+    virtual void assign(const SuggestionList *) = 0;
+    
+    virtual bool empty() const = 0;
+    virtual Size size() const = 0;
+    virtual VirEmul * elements() const = 0;
+    virtual ~SuggestionList() {}
+  };
+
+  class Suggest {
+  public:
+    virtual PosibErr<void> set_mode(ParmString) = 0;
+    virtual double score(const char * base, const char * other) = 0;
+    virtual SuggestionList & suggest(const char * word) = 0;
+    virtual ~Suggest() {}
+  };
+  
+  PosibErr<Suggest *> new_default_suggest(SpellerImpl *);
+}
+
+
+#endif
diff --git a/modules/speller/default/typo_editdist.cpp b/modules/speller/default/typo_editdist.cpp
new file mode 100644 (file)
index 0000000..cd5e7bf
--- /dev/null
@@ -0,0 +1,196 @@
+
+#include <cstring>
+
+#include "vararray.hpp"
+#include "typo_editdist.hpp"
+#include "config.hpp"
+#include "language.hpp"
+#include "file_data_util.hpp"
+#include "getdata.hpp"
+#include "cache-t.hpp"
+#include "asc_ctype.hpp"
+
+// edit_distance is implemented using a straight forward dynamic
+// programming algorithm with out any special tricks.  Its space
+// usage AND running time is tightly asymptotically bounded by
+// strlen(a)*strlen(b)
+
+typedef unsigned char uchar;
+
+namespace aspeller {
+
+  using namespace std;
+
+  short typo_edit_distance(ParmString word0, 
+                          ParmString target0,
+                          const TypoEditDistanceInfo & w) 
+  {
+    int word_size   = word0.size() + 1;
+    int target_size = target0.size() + 1;
+    const uchar * word   = reinterpret_cast<const uchar *>(word0.str());
+    const uchar * target = reinterpret_cast<const uchar *>(target0.str());
+    VARARRAY(short, e_d, word_size * target_size);
+    ShortMatrix e(word_size,target_size, e_d);
+    e(0,0) = 0;
+    for (int j = 1; j != target_size; ++j)
+      e(0,j) = e(0,j-1) + w.missing;
+    --word;
+    --target;
+    short te;
+    for (int i = 1; i != word_size; ++i) {
+      e(i,0) = e(i-1,0) + w.extra_dis2;
+      for (int j = 1; j != target_size; ++j) {
+
+       if (word[i] == target[j]) {
+
+         e(i,j) = e(i-1,j-1);
+
+       } else {
+         
+         te = e(i,j) = e(i-1,j-1) + w.repl(word[i],target[j]);
+         
+         if (i != 1) {
+           te =  e(i-1,j ) + w.extra(word[i-1], target[j]);
+           if (te < e(i,j)) e(i,j) = te;
+           te = e(i-2,j-1) + w.extra(word[i-1], target[j]) 
+                            + w.repl(word[i]  , target[j]);
+           if (te < e(i,j)) e(i,j) = te;
+         } else {
+           te =  e(i-1,j) + w.extra_dis2;
+           if (te < e(i,j)) e(i,j) = te;
+         }
+
+         te = e(i,j-1) + w.missing;
+         if (te < e(i,j)) e(i,j) = te;
+
+         //swap
+         if (i != 1 && j != 1) {
+             te = e(i-2,j-2) + w.swap
+               + w.repl(word[i], target[j-1])
+               + w.repl(word[i-1], target[j]);
+             if (te < e(i,j)) e(i,j) = te;
+           }
+       }
+      } 
+    }
+    return e(word_size-1,target_size-1);
+  }
+
+  static GlobalCache<TypoEditDistanceInfo> typo_edit_dist_info_cache("keyboard");
+
+  PosibErr<void> setup(CachePtr<const TypoEditDistanceInfo> & res,
+                       const Config * c, const Language * l, ParmString kb)
+  {
+    PosibErr<TypoEditDistanceInfo *> pe = get_cache_data(&typo_edit_dist_info_cache, c, l, kb);
+    if (pe.has_err()) return pe;
+    res.reset(pe.data);
+    return no_err;
+  }
+
+  struct CharPair {
+    char d[2];
+    CharPair(char a, char b) {d[0] = a; d[1] = b;}
+  };
+
+  PosibErr<TypoEditDistanceInfo *> 
+  TypoEditDistanceInfo::get_new(const char * kb, const Config * cfg, const Language * l)
+  {
+    FStream in;
+    String file, dir1, dir2;
+    fill_data_dir(cfg, dir1, dir2);
+    find_file(file, dir1, dir2, kb, ".kbd");
+    RET_ON_ERR(in.open(file.c_str(), "r"));
+
+    ConvEC iconv;
+    RET_ON_ERR(iconv.setup(*cfg, "utf-8", l->charmap(), NormFrom));
+
+    Vector<CharPair> data;
+
+    char to_stripped[256];
+    for (int i = 0; i <= 255; ++i)
+      to_stripped[i] = l->to_stripped(i);
+
+    String buf;
+    DataPair d;
+    while (getdata_pair(in, d, buf)) {
+      if (d.key == "key") {
+        PosibErr<char *> pe(iconv(d.value.str, d.value.size));
+        if (pe.has_err()) 
+          return pe.with_file(file, d.line_num);
+        char * v = pe.data;
+        char base = *v;
+        while (*v) {
+          to_stripped[(uchar)*v] = base;
+          ++v;
+          while (asc_isspace(*v)) ++v;
+        }
+      } else {
+        PosibErr<char *> pe(iconv(d.key.str, d.key.size));
+        if (pe.has_err()) 
+          return pe.with_file(file, d.line_num);
+        char * v = pe.data;
+        if (strlen(v) != 2) 
+          return make_err(invalid_string, d.key.str).with_file(file, d.line_num);
+        to_stripped[(uchar)v[0]] = v[0];
+        to_stripped[(uchar)v[1]] = v[1];
+        data.push_back(CharPair(v[0], v[1]));
+      }
+    }
+
+    TypoEditDistanceInfo * w = new TypoEditDistanceInfo();
+    w->keyboard = kb;
+
+    memset(w->to_normalized_, 0, sizeof(w->to_normalized_));
+
+    int c = 1;
+    for (int i = 0; i <= 255; ++i) {
+      if (l->is_alpha(i)) {
+       if (w->to_normalized_[(uchar)to_stripped[i]] == 0) {
+         w->to_normalized_[i] = c;
+         w->to_normalized_[(uchar)to_stripped[i]] = c;
+         ++c;
+       } else {
+         w->to_normalized_[i] = w->to_normalized_[(uchar)to_stripped[i]];
+       }
+      }
+    }
+    for (int i = 0; i != 256; ++i) {
+      if (w->to_normalized_[i]==0) w->to_normalized_[i] = c;
+    }
+    w->max_normalized = c;
+    
+    c = w->max_normalized + 1;
+    int cc = c * c;
+    w->data = (short *)malloc(cc * 2 * sizeof(short));
+    w->repl .init(c, c, w->data);
+    w->extra.init(c, c, w->data + cc);
+    
+    for (int i = 0; i != c; ++i) {
+      for (int j = 0; j != c; ++j) {
+        w->repl (i,j) = w->repl_dis2;
+        w->extra(i,j) = w->extra_dis2;
+      }
+    }
+    
+    for (unsigned i = 0; i != data.size(); ++i) {
+      const char * d = data[i].d;
+      w->repl (w->to_normalized(d[0]),
+               w->to_normalized(d[1])) = w->repl_dis1;
+      w->repl (w->to_normalized(d[1]),
+               w->to_normalized(d[0])) = w->repl_dis1;
+      w->extra(w->to_normalized(d[0]),
+               w->to_normalized(d[1])) = w->extra_dis1;
+      w->extra(w->to_normalized(d[1]),
+               w->to_normalized(d[0])) = w->extra_dis1;
+    }
+    
+    for (int i = 0; i != c; ++i) {
+      w->repl(i,i) = 0;
+      w->extra(i,i) = w->extra_dis1;
+    }
+
+    return w;
+  }
+  
+
+}
diff --git a/modules/speller/default/typo_editdist.hpp b/modules/speller/default/typo_editdist.hpp
new file mode 100644 (file)
index 0000000..f64d2a5
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef __aspeller_typo_edit_distance_hh__
+#define __aspeller_typo_edit_distance_hh__
+
+#include "cache.hpp"
+#include "matrix.hpp"
+
+namespace acommon {
+  class Config;
+}
+
+namespace aspeller {
+
+  class Language;
+
+  using namespace acommon;
+
+  struct TypoEditDistanceInfo : public Cacheable {
+    int missing; // the cost of having to insert a character
+    int swap;    // the cost of swapping two adjecent letters
+    short * data; // memory for repl and extra
+    ShortMatrix repl; // the cost of replacing one letter with another
+    ShortMatrix extra; // the cost of removing an extra letter
+
+    int repl_dis1; // the cost of replace when the distance is 1
+    int repl_dis2; //    "          "     otherwise
+    int extra_dis1;// 
+    int extra_dis2;//
+
+    unsigned char to_normalized_[256];
+    int max_normalized;
+
+    unsigned char to_normalized(char c) const {
+      return to_normalized_[(unsigned char)c];}
+    
+    // IMPORTANT: It is still necessary to initialize and fill in
+    //            repl and extra
+  private:
+    TypoEditDistanceInfo(int m = 85,  int s = 60, 
+                           int r1 = 70, int r = 110, 
+                           int e1 = 70, int e = 100)
+      : missing(m), swap(s), data(0) 
+      , repl_dis1(r1), repl_dis2(r)
+      , extra_dis1(e1), extra_dis2(e)
+    {}
+  public:
+    ~TypoEditDistanceInfo() {if (data) free(data);}
+
+    String keyboard;
+    typedef const Config CacheConfig;
+    typedef const Language CacheConfig2;
+    typedef const char * CacheKey;
+    bool cache_key_eq(const char * kb) const {return keyboard == kb;}
+    static PosibErr<TypoEditDistanceInfo *> get_new(const char *, const Config *, const Language *);
+  private:
+    TypoEditDistanceInfo(const TypoEditDistanceInfo &);
+    void operator=(const TypoEditDistanceInfo &);
+  };
+
+  PosibErr<void> setup(CachePtr<const TypoEditDistanceInfo> & res,
+                       const Config * c, const Language * l, ParmString kb);
+
+  // edit_distance finds the shortest edit distance. 
+  // Preconditions:
+  // max(strlen(word), strlen(target))*max(of the edit weights) <= 2^15
+  // word,target are not null pointers
+  // w.repl and w.extra are square matrices
+  // the maximum character value is less than the size of w.repl and w.extra 
+  // Returns:
+  //   the edit distance between a and b
+
+  // the running time is tightly asymptotically bounded by strlen(a)*strlen(b)
+
+  short typo_edit_distance(ParmString word, 
+                          ParmString target,
+                          const TypoEditDistanceInfo & w);
+}
+
+#endif
diff --git a/modules/speller/default/vector_hash-t.hpp b/modules/speller/default/vector_hash-t.hpp
new file mode 100644 (file)
index 0000000..969a80c
--- /dev/null
@@ -0,0 +1,191 @@
+// Copyright (c) 2000
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef __autil_hash_t_hh__
+#define __autil_hash_t_hh__
+
+#include <math.h>
+
+#include "vector_hash.hpp"
+#include "primes.hpp"
+
+namespace aspeller {
+
+  template <class Parms>
+  VectorHashTable<Parms>::FindIterator
+  ::FindIterator(const HashTable * ht, const key_type & k)
+    : vector(&ht->vector())
+    , parms(&ht->parms())
+    , key(k)
+    , i(ht->hash1(k))
+    , hash2(ht->hash2(k))
+  {
+    if (!parms->is_nonexistent((*vector)[i])
+       && !parms->equal(parms->key((*vector)[i]), key))
+      adv();
+  }
+
+  template <class Parms>
+  void VectorHashTable<Parms>::FindIterator::adv() {
+    do {
+      i = (i + hash2) % vector->size();
+    } while (!parms->is_nonexistent((*vector)[i])
+            && !parms->equal(parms->key((*vector)[i]), key));
+  }
+
+  template<class Parms>
+  void VectorHashTable<Parms>::nonexistent_vector() {
+    vector_iterator vector_end = vector_.end();
+    for (vector_iterator i = vector_.begin(); i != vector_end; ++i) {
+      parms_.make_nonexistent(*i);
+    }
+  }
+  
+  template<class Parms>
+  std::pair<typename VectorHashTable<Parms>::iterator, bool> 
+  VectorHashTable<Parms>::insert(const value_type & d) 
+  {
+    MutableFindIterator j(this, parms_.key(d));
+    vector_iterator i = vector_.begin() + j.i;
+    if (!parms_.is_multi && !j.at_end())
+      return std::pair<iterator,bool>(iterator(i,this),false);
+    if (load_factor() > .92) {
+      resize(bucket_count()*2);
+      return insert(d);
+    } 
+    if (parms_.is_multi) 
+      while(!j.at_end()) j.adv();
+    *(vector_.begin() + j.i) = d;
+    ++size_;
+    return std::pair<iterator,bool>(iterator(i,this),true);
+  }
+
+  template<class Parms>
+  bool VectorHashTable<Parms>::have(const key_type & key) const 
+  {
+    return !ConstFindIterator(this,key).at_end();
+  }
+
+  template<class Parms>
+  typename VectorHashTable<Parms>::iterator 
+  VectorHashTable<Parms>::find(const key_type & key) 
+  {
+    MutableFindIterator i(this, key);
+    if (!i.at_end()) 
+      return iterator(vector_.begin() + i.i, this);
+    else
+      return end();
+  }
+
+  template<class Parms>
+  typename VectorHashTable<Parms>::const_iterator 
+  VectorHashTable<Parms>::find(const key_type & key) const {
+    ConstFindIterator i(this, key);
+    if (!i.at_end()) 
+      return const_iterator(vector_.begin() + i.i, this);
+    else
+      return end();
+  }
+
+#if 0 // it currently doesn't work needs fixing
+
+  template<class Parms>
+  VectorHashTable<Parms>::size_type 
+  VectorHashTable<Parms>::erase(const key_type & key) {
+    MutableFindIterator i(this, key);
+    if (!i.at_end()) {
+      erase(iterator(vector_.begin() + i.i, this));
+      return 1;
+    } else {
+      return 0;
+    }
+  }
+
+  template<class Parms>
+  void VectorHashTable<Parms>::erase(const iterator & p) {
+    vector_iterator pos = p.vector_iterator();
+    parms_.make_nonexistent(*pos);
+    vector_iterator vector_end = vector_.end();
+
+    vector_iterator e = pos;
+    do {
+      ++e;
+      if (e == vector_end) e = vector_.begin();
+    } while (!parms_.is_nonexistent(*e));
+
+    vector_iterator should_be;
+    while (pos != e) {
+      if (parms_.is_nonexistent(*pos)) {
+       should_be = find_item_v(*pos);
+       if (parms_.is_nonexistent(*should_be)) {
+         *should_be = *pos;
+         parms_.make_nonexistent(*pos);
+       }
+      }
+      ++pos;
+      if (pos == vector_end) pos = vector_.begin();
+    }
+    --size_;
+  }
+#endif
+
+  template<class Parms>
+  void VectorHashTable<Parms>::swap(VectorHashTable<Parms> &other) {
+    vector_.swap(other.vector_);
+    size_type temp = size_;
+    size_ = other.size_;
+    other.size_ = temp;
+  }
+
+  template<class Parms>
+  VectorHashTable<Parms>::VectorHashTable(size_type i, const Parms & p)
+    : parms_(p), size_(0) 
+  {
+    if (i <= 19) {
+      i = 19;
+    } else {
+      size_type j =  ((i - 3)/4)*4 + 3;
+      if (j == i) 
+       i = j;
+      else
+       i = j + 4;
+      Primes p(static_cast<size_type>(sqrt(static_cast<double>(i))+2));
+      for (;;) {
+       if (i > p.max_num())
+         p.resize(static_cast<size_type>(sqrt(static_cast<double>(i))+2));
+       if (p.is_prime(i) && p.is_prime(i-2))
+         break;
+       i += 4;
+      }
+    }
+    vector_.resize(i);
+    nonexistent_vector();
+  }
+
+  template<class Parms>
+  void VectorHashTable<Parms>::resize(size_type i) {
+    VectorHashTable temp(i,parms_);
+    iterator e = end();
+    for (iterator i = begin(); i != e; ++i)
+      temp.insert(*i);
+    swap(temp);
+  }
+
+  template<class Parms>
+  void VectorHashTable<Parms>::recalc_size() {
+    size_ = 0;
+    for (iterator i = begin(); i != this->e; ++i, ++this->_size);
+  }
+
+}
+
+#endif
diff --git a/modules/speller/default/vector_hash.hpp b/modules/speller/default/vector_hash.hpp
new file mode 100644 (file)
index 0000000..6d6e24d
--- /dev/null
@@ -0,0 +1,291 @@
+// Copyright (c) 2000
+// Kevin Atkinson
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without
+// fee, provided that the above copyright notice appear in all copies
+// and that both that copyright notice and this permission notice
+// appear in supporting documentation. Kevin Atkinson makes no
+// representations about the suitability of this software for any
+// purpose.  It is provided "as is" without express or implied
+// warranty.
+
+#ifndef __aspeller_vector_hash_hh__
+#define __aspeller_vector_hash_hh__
+
+//#include <iterator>
+//#include <utility>
+
+#include "settings.h"
+#undef REL_OPS_POLLUTION  // FIXME
+
+namespace aspeller {
+
+  //
+  // This hash table is implemnted as a Open Address Hash Table
+  // which uses a Vector like object to store its data.  So
+  // it might even be considered an adapter
+  //
+  
+  ////////////////////////////////////////////////////////
+  //                                                    //
+  //          Vector Hash Table Interator               //
+  //                                                    //
+  ////////////////////////////////////////////////////////
+  //
+  // This is an internal object and should not be created
+  // directly.  Instead use VectorHashTable::begin() and end()
+
+  template <class Parms>
+  // Parms is expected to have:
+  //  typename HashTable;
+  //  typename TableIter;
+  //  typename Value;
+  class VHTIterator 
+  {
+    template <class T>
+    friend bool operator== (VHTIterator<T>, VHTIterator<T>);
+#ifndef REL_OPS_POLLUTION
+    template <class T>
+    friend bool operator!= (VHTIterator<T>, VHTIterator<T>);
+#endif
+  public: //but don't use
+    typedef typename Parms::TableIter       TableIter;
+    typedef typename Parms::HashTable       HashTable;
+    TableIter   pos;
+    HashTable * hash_table; 
+  public:
+    //typedef std::bidirectional_iterator_tag             iterator_category;
+    typedef typename Parms::Value                       value_type;
+    // these cause problems for SUNPRO_CC
+    //typedef typename std::iterator_traits<TableIter>::difference_type difference_type;
+    //typedef typename std::iterator_traits<TableIter>::pointer         pointer;
+    //typedef typename std::iterator_traits<TableIter>::reference       reference;
+
+    //VHTIterator vector_iterator() const {return pos;}
+  public:
+    VHTIterator(TableIter p, HashTable *ht) : pos(p), hash_table(ht) {}
+    VHTIterator(TableIter p, HashTable *ht, bool) 
+      : pos(p), hash_table(ht) 
+    {
+      while (pos != hash_table->vector().end()
+            && hash_table->parms().is_nonexistent(*pos) )
+       ++pos;
+    }
+    
+    value_type & operator * () const  {return *pos;}
+    value_type * operator -> () const {return &*pos;}
+    
+    bool at_end() const {return pos == hash_table->vector().end();}
+    
+    VHTIterator& operator++ () {
+      ++pos;
+      for (;;) {
+       if (pos == hash_table->vector().end()) break;
+       if (!hash_table->parms().is_nonexistent(*pos)) break;
+       ++pos;
+      }
+      return *this;
+    }
+    VHTIterator operator++ (int) {
+      VHTIterator temp = *this; 
+      operator++();
+      return temp;
+    }
+
+    VHTIterator& operator-- () {
+      --pos;
+      for (;;) {
+       if (pos < hash_table->vector().begin()) break;
+       if (!hash_table->parms().is_nonexistent_func(*pos)) break;
+       --pos;
+      }
+      return *this;
+    }
+    VHTIterator operator-- (int) {
+      VHTIterator temp = *this; 
+      operator--();
+      return temp;
+    }
+  };
+
+  template <class Parms>
+  inline 
+  bool operator== (VHTIterator<Parms> rhs, VHTIterator<Parms> lhs)
+  {
+    return rhs.pos == lhs.pos;
+  }
+
+#ifndef REL_OPS_POLLUTION
+  
+  template <class Parms>
+  inline
+  bool operator!= (VHTIterator<Parms> rhs, VHTIterator<Parms> lhs)
+  {
+    return rhs.pos != lhs.pos;
+  }
+
+#endif
+  
+  ////////////////////////////////////////////////////////
+  //                                                    //
+  //                Vector Hash Table                   //
+  //                                                    //
+  ////////////////////////////////////////////////////////
+
+  // Parms is expected to have the following methods
+  //   typename Vector
+  //   typedef Vector::value_type Value
+  //   typedef Vector::size_type  Size
+  //   typename Key
+  //   bool is_multi;
+  //   Size hash(Key)
+  //   bool equal(Key, Key)
+  //   Key key(Value)
+  //   bool is_nonexistent(Value)
+  //   void make_nonexistent(Value &)
+
+  template <class Parms>
+  class VectorHashTable {
+    typedef typename Parms::Vector           Vector;
+  public:
+    typedef typename Parms::Vector           vector_type;
+    typedef typename Vector::value_type      value_type;
+    typedef typename Vector::size_type       size_type;
+    typedef typename Vector::difference_type difference_type;
+
+    typedef typename Vector::pointer         pointer;
+    typedef typename Vector::reference       reference;
+    typedef typename Vector::const_reference const_reference;
+
+    typedef typename Parms::Key              key_type;
+  public: // but don't use
+    typedef VectorHashTable<Parms>           HashTable;
+  private:
+    Parms parms_;
+
+  public:
+    typedef Parms parms_type;
+    const parms_type & parms() const {return parms_;}
+
+  public:
+    // These public functions are very dangerous and should be used with
+    // great care as the modify the internal structure of the object
+    Vector & vector()       {return vector_;}
+    const Vector & vector() const {return vector_;}
+    parms_type & parms() {return parms_;}
+    void recalc_size();
+    void set_size(size_type s) {size_  = s;} 
+
+  private:
+    Vector      vector_;
+    size_type   size_;
+
+  public: // but don't use
+    typedef typename Vector::iterator       vector_iterator;
+    typedef typename Vector::const_iterator const_vector_iterator;
+  
+  private:
+    int hash1(const key_type &d) const {
+      return parms_.hash(d) % bucket_count();
+    }
+    int hash2(const key_type &d) const {
+      return 1 + (parms_.hash(d) % (bucket_count() - 2));
+    }
+
+    struct NonConstParms {
+      typedef VectorHashTable HashTable;
+      typedef vector_iterator TableIter;
+      typedef value_type      Value;
+    };
+    struct ConstParms {
+      typedef const VectorHashTable HashTable;
+      typedef const_vector_iterator TableIter;
+      typedef const value_type      Value;
+    };
+  public:
+    typedef VHTIterator<NonConstParms> iterator;
+    typedef VHTIterator<ConstParms>    const_iterator;
+
+  private:
+    void nonexistent_vector();
+  
+  public:
+    VectorHashTable(size_type i, const Parms & p = Parms());
+
+    VectorHashTable(const Parms & p = Parms())
+      : parms_(p), vector_(19), size_(0) {nonexistent_vector();}
+    iterator begin() {return iterator(vector_.begin(), this, 1);}
+    iterator end()   {return iterator(vector_.end(), this);}
+    const_iterator begin() const {return const_iterator(vector_.begin(), this, 1);}
+    const_iterator end()   const {return const_iterator(vector_.end(), this);}
+
+    std::pair<iterator, bool> insert(const value_type &);
+    bool have(const key_type &) const;
+
+    iterator find(const key_type&);
+    const_iterator find(const key_type&) const;
+  
+    size_type erase(const key_type &key);
+    void erase(const iterator &p);
+  
+    size_type size() const {return size_;}
+    bool      empty() const {return !size_;}
+
+    void swap(VectorHashTable &);
+    void resize(size_type);
+    size_type bucket_count() const {return vector_.size();}
+    double load_factor() const {return static_cast<double>(size())/bucket_count();}
+
+  private:
+    class FindIterator
+    {
+    public: // but don't use
+      const vector_type * vector;
+      const Parms       * parms;
+      key_type key;
+      int i;
+      int hash2;
+      FindIterator() {}
+      FindIterator(const HashTable * ht, const key_type & k);
+    public:
+      bool at_end() const {return parms->is_nonexistent((*vector)[i]);}
+      void adv();
+      FindIterator & operator ++() {adv(); return *this;}
+    };
+    friend class FindIterator;
+
+  public:
+    class ConstFindIterator : public FindIterator 
+    {
+    public:
+      ConstFindIterator() {}
+      ConstFindIterator(const HashTable * ht, const key_type & k) 
+       : FindIterator(ht,k) {}
+      const value_type & deref() const {return (*this->vector)[this->i];}
+    };
+
+    class MutableFindIterator : public FindIterator 
+    {
+    public:
+      MutableFindIterator() {}
+      MutableFindIterator(HashTable * ht, const key_type & k) 
+       : FindIterator(ht,k) {}
+      value_type & deref() const {
+       return (*const_cast<vector_type *>(this->vector))[this->i];
+      }
+    };
+    
+    ConstFindIterator multi_find(const key_type & k) const {
+      return ConstFindIterator(this, k);
+    }
+    
+    MutableFindIterator multi_find(const key_type & k) {
+      return MutableFindIterator(this, k);
+    }
+    
+  };
+}
+
+#endif
diff --git a/modules/speller/default/weights.hpp b/modules/speller/default/weights.hpp
new file mode 100644 (file)
index 0000000..a610a11
--- /dev/null
@@ -0,0 +1,23 @@
+
+#ifndef __aspeller_weights_hh__
+#define __aspeller_weights_hh__
+
+namespace aspeller {
+
+  struct EditDistanceWeights {
+    int del1;    // the cost of deleting a char in the first string
+    int del2;    // the cost of inserting a character or deleting a char
+                    // in the next string
+    int swap;    // the cost of swapping two adjacent letters
+    int sub;     // the cost of replacing one letter with another
+    int similar; // the cost of a "similar" but not exact match for
+                    // two characters
+    int min;     // the min of del1, del2, swap and sub.
+    int max;     // the max of del1, del2, swap and sub.
+    EditDistanceWeights()
+      : del1(1), del2(1), swap(1), sub(1), similar(0), min(1), max(1) {}
+  };
+  
+}
+
+#endif
diff --git a/modules/speller/default/wordinfo.hpp b/modules/speller/default/wordinfo.hpp
new file mode 100644 (file)
index 0000000..42f69d9
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2000 by Kevin Atkinson under the terms of the LGPL
+
+#ifndef __aspeller_wordinfo__
+#define __aspeller_wordinfo__
+
+#include <assert.h>
+#include "string.hpp"
+
+namespace acommon {
+  class OStream;
+  class Convert;
+}
+
+namespace aspeller {
+
+  // WordInfo
+
+  typedef unsigned int WordInfo; // 4 bits
+
+  enum CasePattern {Other, FirstUpper, AllLower, AllUpper};
+  //   Other      00
+  //   FirstUpper 01
+  //   AllLower   10
+  //   AllUpper   11
+  // First bit : is upper
+  // Second bit: uniform case
+
+  static const WordInfo CASE_PATTERN = 3;
+  static const WordInfo ALL_PLAIN    = (1 << 2);
+  static const WordInfo ALL_CLEAN    = (1 << 3);
+
+  using namespace acommon;
+
+  class Language;
+  struct ConvertWord;
+
+  // WordEntry is an entry in the dictionary.  
+  struct WordEntry
+  {
+    const char * word;
+    const char * aff;
+    const char * catg;
+    void (* adv_)(WordEntry *);
+    void * intr[3];
+    unsigned word_size;
+    enum What {Other, Word, Soundslike, Clean, Misspelled} what;
+    WordInfo word_info;
+    int frequency; // 0 .. 255
+    // if type is Word than aff will be defined, otherwise it won't
+    bool at_end() {return !word;}
+    bool adv() {if (adv_) {adv_(this); return true;} word = 0; return false;}
+    operator bool () const {return word != 0;}
+    OStream & write(OStream & o, const Language & l, Convert * c = 0) const;
+    WordEntry() {memset(this, 0, sizeof(WordEntry));}
+    void clear() {memset(this, 0, sizeof(WordEntry));}
+    ~WordEntry() {}
+  };
+}
+
+#endif
diff --git a/modules/speller/default/writable.cpp b/modules/speller/default/writable.cpp
new file mode 100644 (file)
index 0000000..3d43628
--- /dev/null
@@ -0,0 +1,940 @@
+// This file is part of The New Aspell
+// Copyright (C) 2000,2011 by Kevin Atkinson under the GNU LGPL
+// license version 2.0 or 2.1.  You should have received a copy of the
+// LGPL license along with this library if you did not you can find it
+// at http://www.gnu.org/.
+
+#include <time.h>
+
+#include "hash-t.hpp"
+#include "data.hpp"
+#include "data_util.hpp"
+#include "enumeration.hpp"
+#include "errors.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "language.hpp"
+#include "getdata.hpp"
+
+namespace {
+
+//////////////////////////////////////////////////////////////////////
+//
+// WritableBase
+//
+
+using namespace std;
+using namespace aspeller;
+using namespace acommon;
+
+typedef const char * Str;
+typedef unsigned char byte;
+
+struct Hash {
+  InsensitiveHash f;
+  Hash(const Language * l) : f(l) {}
+  size_t operator() (Str s) const {
+    return f(s);
+  }
+};
+
+struct Equal {
+  InsensitiveEqual f;
+  Equal(const Language * l) : f(l) {}
+  bool operator() (Str a, Str b) const {
+    return f(a, b);
+  }
+};
+
+void write_n_escape(FStream & o, const char * str) {
+  while (*str != '\0') {
+    if (*str == '\n') o << "\\n";
+    else if (*str == '\r') o << "\\r";
+    else if (*str == '\\') o << "\\\\";
+    else o << *str;
+    ++str;
+  }
+}
+
+static inline char f_getc(FStream & in) {
+  int c = in.get();
+  return c == EOF ? '\0' : (char)c;
+}
+  
+bool getline_n_unescape(FStream & in, String & str, char delem) {
+  str.clear();
+  char c = f_getc(in);
+  if (!c) return false;
+  while (c && c != delem) {
+    if (c == '\\') {
+      c = f_getc(in);
+      if (c == 'n') str.append('\n');
+      else if (c == 'r') str.append('\r');
+      else if (c == '\\') str.append('\\');
+      else {str.append('\\'); continue;}
+    } else {
+      str.append(c);
+    }
+    c = f_getc(in);
+  }
+  return true;
+}
+
+bool getline_n_unescape(FStream & in, DataPair & d, String & buf)
+{
+  if (!getline_n_unescape(in, buf, '\n')) return false;
+  d.value.str  = buf.mstr();
+  d.value.size = buf.size();
+  return true;
+}
+
+typedef Vector<Str> StrVector;
+
+typedef hash_multiset<Str,Hash,Equal> WordLookup;
+typedef hash_map<Str,StrVector>  SoundslikeLookup;
+
+class WritableBase : public Dictionary {
+protected:
+  String suffix;
+  String compatibility_suffix;
+    
+  time_t cur_file_date;
+  
+  String compatibility_file_name;
+    
+  WritableBase(BasicType t, const char * n, const char * s, const char * cs)
+    : Dictionary(t,n),
+      suffix(s), compatibility_suffix(cs),
+      use_soundslike(true) {fast_lookup = true;}
+  virtual ~WritableBase() {}
+  
+  virtual PosibErr<void> save(FStream &, ParmString) = 0;
+  virtual PosibErr<void> merge(FStream &, ParmString, Config * = 0) = 0;
+    
+  PosibErr<void> save2(FStream &, ParmString);
+  PosibErr<void> update(FStream &, ParmString);
+  PosibErr<void> save(bool do_update);
+  PosibErr<void> update_file_date_info(FStream &);
+  PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *);
+  PosibErr<void> merge(ParmString);
+  PosibErr<void> save_as(ParmString);
+  PosibErr<void> clear();
+
+  String file_encoding;
+  ConvObj iconv;
+  ConvObj oconv;
+  PosibErr<void> set_file_encoding(ParmString, Config & c);
+
+  PosibErr<void> synchronize() {return save(true);}
+  PosibErr<void> save_noupdate() {return save(false);}
+
+  bool use_soundslike;
+  StackPtr<WordLookup> word_lookup;
+  SoundslikeLookup     soundslike_lookup_;
+  ObjStack             buffer;
+  void set_lang_hook(Config & c) {
+    set_file_encoding(lang()->data_encoding(), c);
+    word_lookup.reset(new WordLookup(10, Hash(lang()), Equal(lang())));
+    use_soundslike = lang()->have_soundslike();
+  }
+};
+
+PosibErr<void> WritableBase::update_file_date_info(FStream & f) {
+  RET_ON_ERR(update_file_info(f));
+  cur_file_date = get_modification_time(f);
+  return no_err;
+}
+  
+PosibErr<void> WritableBase::load(ParmString f0, Config & config,
+                                  DictList *, SpellerImpl *)
+{
+  set_file_name(f0);
+  const String f = file_name();
+  FStream in;
+
+  if (file_exists(f)) {
+      
+    RET_ON_ERR(open_file_readlock(in, f));
+    if (in.peek() == EOF) return make_err(cant_read_file,f); 
+    // ^^ FIXME 
+    RET_ON_ERR(merge(in, f, &config));
+      
+  } else if (f.substr(f.size()-suffix.size(),suffix.size()) 
+             == suffix) {
+      
+    compatibility_file_name = f.substr(0,f.size() - suffix.size());
+    compatibility_file_name += compatibility_suffix;
+      
+    {
+      PosibErr<void> pe = open_file_readlock(in, compatibility_file_name);
+      if (pe.has_err()) {compatibility_file_name = ""; return pe;}
+    } {
+      PosibErr<void> pe = merge(in, compatibility_file_name, &config);
+      if (pe.has_err()) {compatibility_file_name = ""; return pe;}
+    }
+      
+  } else {
+      
+    return make_err(cant_read_file,f);
+      
+  }
+
+  return update_file_date_info(in);
+}
+
+PosibErr<void> WritableBase::merge(ParmString f0) {
+  FStream in;
+  Dict::FileName fn(f0);
+  RET_ON_ERR(open_file_readlock(in, fn.path));
+  RET_ON_ERR(merge(in, fn.path));
+  return no_err;
+}
+
+PosibErr<void> WritableBase::update(FStream & in, ParmString fn) {
+  typedef PosibErr<void> Ret;
+  {
+    Ret pe = merge(in, fn);
+    if (pe.has_err() && compatibility_file_name.empty()) return pe;
+  } {
+    Ret pe = update_file_date_info(in);
+    if (pe.has_err() && compatibility_file_name.empty()) return pe;
+  }
+  return no_err;
+}
+    
+PosibErr<void> WritableBase::save2(FStream & out, ParmString fn) {
+  truncate_file(out, fn);
+      
+  RET_ON_ERR(save(out,fn));
+
+  out.flush();
+
+  return no_err;
+}
+
+PosibErr<void> WritableBase::save_as(ParmString fn) {
+  compatibility_file_name = "";
+  set_file_name(fn);
+  FStream inout;
+  RET_ON_ERR(open_file_writelock(inout, file_name()));
+  RET_ON_ERR(save2(inout, file_name()));
+  RET_ON_ERR(update_file_date_info(inout));
+  return no_err;
+}
+
+PosibErr<void> WritableBase::save(bool do_update) {
+  FStream inout;
+  RET_ON_ERR_SET(open_file_writelock(inout, file_name()),
+                 bool, prev_existed);
+
+  if (do_update
+      && prev_existed 
+      && get_modification_time(inout) > cur_file_date)
+    RET_ON_ERR(update(inout, file_name()));
+
+  RET_ON_ERR(save2(inout, file_name()));
+  RET_ON_ERR(update_file_date_info(inout));
+    
+  if (compatibility_file_name.size() != 0) {
+    remove_file(compatibility_file_name.c_str());
+    compatibility_file_name = "";
+  }
+
+  return no_err;
+}
+
+PosibErr<void> WritableBase::clear() {
+  word_lookup->clear();
+  soundslike_lookup_.clear();
+  buffer.reset();
+  return no_err;
+}
+
+PosibErr<void> WritableBase::set_file_encoding(ParmString enc, Config & c)
+{
+  if (enc == file_encoding) return no_err;
+  if (enc == "") enc = lang()->charmap();
+  RET_ON_ERR(iconv.setup(c, enc, lang()->charmap(), NormFrom));
+  RET_ON_ERR(oconv.setup(c, lang()->charmap(), enc, NormTo));
+  if (iconv || oconv) 
+    file_encoding = enc;
+  else
+    file_encoding = "";
+  return no_err;
+}
+
+
+/////////////////////////////////////////////////////////////////////
+// 
+//  Common Stuff
+//
+
+// a word is stored in memory as follows
+//   <word info><size><word...><null>
+// the hash table points to the word and not the start of the block
+
+static inline void set_word(WordEntry & res, Str w)
+{
+  res.word      = w;
+  res.word_size = (byte)w[-1];
+  res.word_info = (byte)w[-2];
+  res.aff       = "";
+}
+
+// a soundslike is stored in memory as follows
+//   <word info><size><sl...><null>
+// the hash table points to the sl and not the start of the block
+
+static inline void set_sl(WordEntry & res, Str w)
+{
+  res.word      = w;
+  res.word_size = (byte)w[-1];
+}
+
+static void soundslike_next(WordEntry * w)
+{
+  const Str * & i   = (const Str * &)(w->intr[0]);
+  const Str *   end = (const Str *  )(w->intr[1]);
+  set_word(*w, *i);
+  ++i;
+  if (i == end) w->adv_ = 0;
+}
+
+static void sl_init(const StrVector * tmp, WordEntry & o)
+{
+  const Str * i   = tmp->pbegin();
+  const Str * end = tmp->pend();
+  set_word(o, *i);
+  ++i;
+  if (i != end) {
+    o.intr[0] = (void *)i;
+    o.intr[1] = (void *)end;
+    o.adv_ = soundslike_next;
+  } else {
+    o.intr[0] = 0;
+  }
+}
+
+struct SoundslikeElements : public SoundslikeEnumeration {
+
+  typedef SoundslikeLookup::const_iterator Itr;
+
+  Itr i;
+  Itr end;
+
+  WordEntry d;
+
+  SoundslikeElements(Itr i0, Itr end0) : i(i0), end(end0) {
+    d.what = WordEntry::Soundslike;
+  }
+
+  WordEntry * next(int) {
+    if (i == end) return 0;
+    set_sl(d, i->first);
+    d.intr[0] = (void *)(&i->second);
+    ++i;
+    return &d;
+  }
+};
+
+struct CleanElements : public SoundslikeEnumeration {
+
+  typedef WordLookup::const_iterator Itr;
+
+  Itr i;
+  Itr end;
+
+  WordEntry d;
+
+  CleanElements(Itr i0, Itr end0) : i(i0), end(end0) {
+    d.what = WordEntry::Word;
+  }
+
+  WordEntry * next(int) {
+    if (i == end) return 0;
+    set_word(d, *i);
+    ++i;
+    return &d;
+  }
+};
+
+struct ElementsParms {
+  typedef WordEntry *                Value;
+  typedef WordLookup::const_iterator Iterator;
+  Iterator end_;
+  WordEntry data;
+  ElementsParms(Iterator e) : end_(e) {}
+  bool endf(Iterator i) const {return i==end_;}
+  Value deref(Iterator i) {set_word(data, *i); return &data;}
+  static Value end_state() {return 0;}
+};
+
+/////////////////////////////////////////////////////////////////////
+// 
+//  WritableDict
+//
+
+class WritableDict : public WritableBase
+{
+public: //but don't use
+  PosibErr<void> save(FStream &, ParmString);
+  PosibErr<void> merge(FStream &, ParmString, Config * config);
+
+public:
+
+  WritableDict() : WritableBase(basic_dict, "WritableDict", ".pws", ".per") {}
+
+  Size   size()     const;
+  bool   empty()    const;
+  
+  PosibErr<void> add(ParmString w) {return Dictionary::add(w);}
+  PosibErr<void> add(ParmString w, ParmString s);
+
+  bool lookup(ParmString word, const SensitiveCompare *, WordEntry &) const;
+
+  bool clean_lookup(const char * sondslike, WordEntry &) const;
+
+  bool soundslike_lookup(const WordEntry & soundslike, WordEntry &) const;
+  bool soundslike_lookup(ParmString soundslike, WordEntry &) const;
+
+  WordEntryEnumeration * detailed_elements() const;
+
+  SoundslikeEnumeration * soundslike_elements() const;
+};
+
+WritableDict::Size WritableDict::size() const 
+{
+  return word_lookup->size();
+}
+
+bool WritableDict::empty() const 
+{
+  return word_lookup->empty();
+}
+
+bool WritableDict::lookup(ParmString word, const SensitiveCompare * c,
+                          WordEntry & o) const
+{
+  o.clear();
+  pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(word));
+  while (p.first != p.second) {
+    if ((*c)(word,*p.first)) {
+      o.what = WordEntry::Word;
+      set_word(o, *p.first);
+      return true;
+    }
+    ++p.first;
+  }
+  return false;
+}
+
+bool WritableDict::clean_lookup(const char * sl, WordEntry & o) const
+{
+  o.clear();
+  pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(sl));
+  if (p.first == p.second) return false;
+  o.what = WordEntry::Word;
+  set_word(o, *p.first);
+  return true;
+  // FIXME: Deal with multiple entries
+}  
+
+bool WritableDict::soundslike_lookup(const WordEntry & word, WordEntry & o) const 
+{
+  if (use_soundslike) {
+
+    const StrVector * tmp 
+      = (const StrVector *)(word.intr[0]);
+    o.clear();
+
+    o.what = WordEntry::Word;
+    sl_init(tmp, o);
+
+  } else {
+      
+    o.what = WordEntry::Word;
+    o.word = word.word;
+    o.word_size = word.word_size;
+    o.word_info = word.word_info;
+    o.aff  = "";
+    
+  }
+  return true;
+}
+
+bool WritableDict::soundslike_lookup(ParmString word, WordEntry & o) const 
+{
+  if (use_soundslike) {
+
+    o.clear();
+    SoundslikeLookup::const_iterator i = soundslike_lookup_.find(word);
+    if (i == soundslike_lookup_.end()) {
+      return false;
+    } else {
+      o.what = WordEntry::Word;
+      sl_init(&i->second, o);
+      return true;
+    }
+  
+  } else {
+
+    return WritableDict::clean_lookup(word, o);
+
+  }
+}
+
+SoundslikeEnumeration * WritableDict::soundslike_elements() const {
+  if (use_soundslike)
+    return new SoundslikeElements(soundslike_lookup_.begin(), 
+                                  soundslike_lookup_.end());
+  else
+    return new CleanElements(word_lookup->begin(),
+                             word_lookup->end());
+}
+
+WritableDict::Enum * WritableDict::detailed_elements() const {
+  return new MakeEnumeration<ElementsParms>
+    (word_lookup->begin(),ElementsParms(word_lookup->end()));
+}
+
+PosibErr<void> WritableDict::add(ParmString w, ParmString s) {
+  RET_ON_ERR(check_if_valid(*lang(),w));
+  SensitiveCompare c(lang());
+  WordEntry we;
+  if (WritableDict::lookup(w,&c,we)) return no_err;
+  byte * w2;
+  w2 = (byte *)buffer.alloc(w.size() + 3);
+  *w2++ = lang()->get_word_info(w);
+  *w2++ = w.size();
+  memcpy(w2, w.str(), w.size() + 1);
+  word_lookup->insert((char *)w2);
+  if (use_soundslike) {
+    byte * s2;
+    s2 = (byte *)buffer.alloc(s.size() + 2);
+    *s2++ = s.size();
+    memcpy(s2, s.str(), s.size() + 1);
+    soundslike_lookup_[(char *)s2].push_back((char *)w2);
+  }
+  return no_err;
+}
+
+PosibErr<void> WritableDict::merge(FStream & in, 
+                                   ParmString file_name, 
+                                   Config * config)
+{
+  typedef PosibErr<void> Ret;
+  unsigned int ver;
+
+  String buf;
+  DataPair dp;
+
+  if (!getline(in, dp, buf))
+    make_err(bad_file_format, file_name);
+
+  split(dp);
+  if (dp.key == "personal_wl")
+    ver = 10;
+  else if (dp.key == "personal_ws-1.1")
+    ver = 11;
+  else 
+    return make_err(bad_file_format, file_name);
+
+  split(dp);
+  {
+    Ret pe = set_check_lang(dp.key, *config);
+    if (pe.has_err())
+      return pe.with_file(file_name);
+  }
+
+  split(dp); // count not used at the moment
+
+  split(dp);
+  if (dp.key.size > 0)
+    set_file_encoding(dp.key, *config);
+  else
+    set_file_encoding("", *config);
+  
+  ConvP conv(iconv);
+  while (getline_n_unescape(in, dp, buf)) {
+    if (ver == 10)
+      split(dp);
+    else
+      dp.key = dp.value;
+    Ret pe = add(conv(dp.key));
+    if (pe.has_err()) {
+      clear();
+      return pe.with_file(file_name);
+    }
+  }
+  return no_err;
+}
+
+PosibErr<void> WritableDict::save(FStream & out, ParmString file_name) 
+{
+  out.printf("personal_ws-1.1 %s %i %s\n", 
+             lang_name(), word_lookup->size(), file_encoding.c_str());
+
+  WordLookup::const_iterator i = word_lookup->begin();
+  WordLookup::const_iterator e = word_lookup->end();
+    
+  ConvP conv(oconv);
+  for (;i != e; ++i) {
+    write_n_escape(out, conv(*i));
+    out << '\n';
+  }
+  return no_err;
+}
+
+/////////////////////////////////////////////////////////////////////
+// 
+//  WritableReplList
+//
+
+static inline StrVector * get_vector(Str s) 
+{
+  return (StrVector *)(s - sizeof(StrVector) - 2);
+}
+
+class WritableReplDict : public WritableBase
+{
+  WritableReplDict(const WritableReplDict&);
+  WritableReplDict& operator=(const WritableReplDict&);
+
+public:
+  WritableReplDict() : WritableBase(replacement_dict, "WritableReplDict", ".prepl",".rpl") 
+  {
+    fast_lookup = true;
+  }
+  ~WritableReplDict();
+
+  Size   size()     const;
+  bool   empty()    const;
+
+  bool lookup(ParmString, const SensitiveCompare *, WordEntry &) const;
+
+  bool clean_lookup(ParmString sondslike, WordEntry &) const;
+
+  bool soundslike_lookup(const WordEntry &, WordEntry &) const;
+  bool soundslike_lookup(ParmString, WordEntry &) const;
+
+  bool repl_lookup(const WordEntry &, WordEntry &) const;
+  bool repl_lookup(ParmString, WordEntry &) const;
+      
+  WordEntryEnumeration * detailed_elements() const;
+  SoundslikeEnumeration * soundslike_elements() const;
+      
+  PosibErr<void> add_repl(ParmString mis, ParmString cor) {
+    return Dictionary::add_repl(mis,cor);}
+  PosibErr<void> add_repl(ParmString mis, ParmString cor, ParmString s);
+
+private:
+  PosibErr<void> save(FStream &, ParmString );
+  PosibErr<void> merge(FStream &, ParmString , Config * config);
+};
+
+WritableReplDict::Size WritableReplDict::size() const 
+{
+  return word_lookup->size();
+}
+
+bool WritableReplDict::empty() const 
+{
+  return word_lookup->empty();
+}
+    
+bool WritableReplDict::lookup(ParmString word, const SensitiveCompare * c,
+                              WordEntry & o) const
+{
+  o.clear();
+  pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(word));
+  while (p.first != p.second) {
+    if ((*c)(word,*p.first)) {
+      o.what = WordEntry::Misspelled;
+      set_word(o, *p.first);
+      o.intr[0] = (void *)*p.first;
+      return true;
+    }
+    ++p.first;
+  }
+  return false;
+}
+
+bool WritableReplDict::clean_lookup(ParmString sl, WordEntry & o) const
+{
+  o.clear();
+  pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(sl));
+  if (p.first == p.second) return false;
+  o.what = WordEntry::Misspelled;
+  set_word(o, *p.first);
+  o.intr[0] = (void *)*p.first;
+  return true;
+  // FIXME: Deal with multiple entries
+}  
+
+bool WritableReplDict::soundslike_lookup(const WordEntry & word, WordEntry & o) const 
+{
+  if (use_soundslike) {
+    const StrVector * tmp = (const StrVector *)(word.intr[0]);
+    o.clear();
+    o.what = WordEntry::Misspelled;
+    sl_init(tmp, o);
+  } else {
+    o.what = WordEntry::Misspelled;
+    o.word = word.word;
+    o.word_size = word.word_size;
+    o.aff = "";
+  }
+  return true;
+}
+
+bool WritableReplDict::soundslike_lookup(ParmString soundslike, WordEntry & o) const
+{
+  if (use_soundslike) {
+    o.clear();
+    SoundslikeLookup::const_iterator i = soundslike_lookup_.find(soundslike);
+    if (i == soundslike_lookup_.end()) {
+      return false;
+    } else {
+      o.what = WordEntry::Misspelled;
+      sl_init(&(i->second), o);
+      return true;
+    }
+  } else {
+    return WritableReplDict::clean_lookup(soundslike, o);
+  }
+}
+
+SoundslikeEnumeration * WritableReplDict::soundslike_elements() const {
+  if (use_soundslike)
+    return new SoundslikeElements(soundslike_lookup_.begin(), 
+                                  soundslike_lookup_.end());
+  else
+    return new CleanElements(word_lookup->begin(),
+                             word_lookup->end());
+}
+
+WritableReplDict::Enum * WritableReplDict::detailed_elements() const {
+  return new MakeEnumeration<ElementsParms>
+    (word_lookup->begin(),ElementsParms(word_lookup->end()));
+}
+
+static void repl_next(WordEntry * w)
+{
+  const Str * & i   = (const Str * &)(w->intr[0]);
+  const Str *   end = (const Str *  )(w->intr[1]);
+  set_word(*w, *i);
+  ++i;
+  if (i == end) w->adv_ = 0;
+}
+
+static void repl_init(const StrVector * tmp, WordEntry & o)
+{
+  o.what = WordEntry::Word;
+  const Str * i   = tmp->pbegin();
+  const Str * end = tmp->pend();
+  set_word(o, *i);
+  ++i;
+  if (i != end) {
+    o.intr[0] = (void *)i;
+    o.intr[1] = (void *)end;
+    o.adv_ = repl_next;
+  } else {
+    o.intr[0] = 0;
+  }
+}
+  
+bool WritableReplDict::repl_lookup(const WordEntry & w, WordEntry & o) const 
+{
+  const StrVector * repls;
+  if (w.intr[0] && !w.intr[1]) { // the intr are not for the sl iter
+    repls = get_vector(w.word);
+  } else {
+    SensitiveCompare c(lang()); // FIXME: This is not exactly right
+    WordEntry tmp;
+    WritableReplDict::lookup(w.word, &c, tmp);
+    repls = get_vector(tmp.word);
+    if (!repls) return false;
+  }
+  o.clear();
+  repl_init(repls, o);
+  return true;
+}
+
+bool WritableReplDict::repl_lookup(ParmString word, WordEntry & o) const 
+{
+  WordEntry w;
+  w.word = word;
+  return WritableReplDict::repl_lookup(w, o);
+}
+
+PosibErr<void> WritableReplDict::add_repl(ParmString mis, ParmString cor, ParmString sl) 
+{
+  Str m;
+  SensitiveCompare cmp(lang()); // FIXME: I don't think this is completely correct
+  WordEntry we;
+
+  pair<WordLookup::iterator, WordLookup::iterator> p0(word_lookup->equal_range(mis));
+  WordLookup::iterator p = p0.first;
+
+  for (; p != p0.second && !cmp(mis,*p); ++p);
+
+  if (p == p0.second) {
+    byte * m0  = (byte *)buffer.alloc(sizeof(StrVector) + mis.size() + 3, sizeof(void *));
+    new (m0) StrVector;
+    m0 += sizeof(StrVector);
+    *m0++ = lang()->get_word_info(mis);
+    *m0++ = mis.size();
+    memcpy(m0, mis.str(), mis.size() + 1);
+    m = (char *)m0;
+    p = word_lookup->insert(m).first;
+  } else {
+    m = *p;
+  }
+
+  StrVector * v = get_vector(m);
+
+  for (StrVector::iterator i = v->begin(); i != v->end(); ++i)
+    if (cmp(cor, *i)) return no_err;
+    
+  byte * c0 = (byte *)buffer.alloc(cor.size() + 3);
+  *c0++ = lang()->get_word_info(cor);
+  *c0++ = cor.size();
+  memcpy(c0, cor.str(), cor.size() + 1);
+  v->push_back((char *)c0);
+
+  if (use_soundslike) {
+    byte * s0 = (byte *)buffer.alloc(sl.size() + 2);
+    *s0++ = sl.size();
+    memcpy(s0, sl.str(), sl.size() + 1);
+    soundslike_lookup_[(char *)s0].push_back(m);
+  }
+
+  return no_err;
+}
+
+PosibErr<void> WritableReplDict::save (FStream & out, ParmString file_name) 
+{
+  out.printf("personal_repl-1.1 %s 0 %s\n", lang_name(), file_encoding.c_str());
+  
+  WordLookup::iterator i = word_lookup->begin();
+  WordLookup::iterator e = word_lookup->end();
+
+  ConvP conv1(oconv);
+  ConvP conv2(oconv);
+  
+  for (;i != e; ++i) 
+  {
+    StrVector * v = get_vector(*i);
+    for (StrVector::iterator j = v->begin(); j != v->end(); ++j)
+    {
+      write_n_escape(out, conv1(*i));
+      out << ' ';
+      write_n_escape(out, conv2(*j));
+      out << '\n';
+    }
+  }
+  return no_err;
+}
+
+PosibErr<void> WritableReplDict::merge(FStream & in,
+                                       ParmString file_name, 
+                                       Config * config)
+{
+  typedef PosibErr<void> Ret;
+  unsigned int version;
+  unsigned int num_words, num_repls;
+
+  String buf;
+  DataPair dp;
+
+  if (!getline(in, dp, buf))
+    make_err(bad_file_format, file_name);
+
+  split(dp);
+  if (dp.key == "personal_repl")
+    version = 10;
+  else if (dp.key == "personal_repl-1.1") 
+    version = 11;
+  else
+    return make_err(bad_file_format, file_name);
+
+  split(dp);
+  {
+    Ret pe = set_check_lang(dp.key, *config);
+    if (pe.has_err())
+      return pe.with_file(file_name);
+  }
+
+  unsigned int num_soundslikes = 0;
+  if (version == 10) {
+    split(dp);
+    num_soundslikes = atoi(dp.key);
+  }
+
+  split(dp); // not used at the moment
+
+  split(dp);
+  if (dp.key.size > 0)
+    set_file_encoding(dp.key, *config);
+  else
+    set_file_encoding("", *config);
+
+  if (version == 11) {
+
+    ConvP conv1(iconv);
+    ConvP conv2(iconv);
+    for (;;) {
+      bool res = getline_n_unescape(in, buf, '\n');
+      if (!res) break;
+      char * mis = buf.mstr();
+      char * repl = strchr(mis, ' ');
+      if (!repl) continue; // bad line, ignore
+      *repl = '\0'; // split string
+      ++repl;
+      if (!repl[0]) continue; // empty repl, ignore
+      WritableReplDict::add_repl(conv1(mis), conv2(repl));
+    }
+    
+  } else {
+    
+    String mis, sound, repl;
+    unsigned int h,i,j;
+    for (h=0; h != num_soundslikes; ++h) {
+      in >> sound >> num_words;
+      for (i = 0; i != num_words; ++i) {
+        in >> mis >> num_repls;
+        in.ignore(); // ignore space
+        for (j = 0; j != num_repls; ++j) {
+          in.getline(repl, ',');
+          WritableReplDict::add_repl(mis, repl);
+        }
+      }
+    }
+
+  }
+  return no_err;
+}
+
+WritableReplDict::~WritableReplDict()
+{
+  WordLookup::iterator i = word_lookup->begin();
+  WordLookup::iterator e = word_lookup->end();
+  
+  for (;i != e; ++i) 
+    get_vector(*i)->~StrVector();
+}
+
+}
+
+namespace aspeller {
+
+  Dictionary * new_default_writable_dict() {
+    return new WritableDict();
+  }
+
+  Dictionary * new_default_replacement_dict() {
+    return new WritableReplDict();
+  }
+
+}
diff --git a/modules/tokenizer/Makefile.in b/modules/tokenizer/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/modules/tokenizer/basic.cpp b/modules/tokenizer/basic.cpp
new file mode 100644 (file)
index 0000000..89ea078
--- /dev/null
@@ -0,0 +1,80 @@
+
+// This file is part of The New Aspell
+// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include "tokenizer.hpp"
+#include "convert.hpp"
+#include "speller.hpp"
+
+
+namespace acommon {
+
+  class TokenizerBasic : public Tokenizer
+  {
+  public:
+    bool advance();
+  };
+
+  bool TokenizerBasic::advance() {
+    word_begin = word_end;
+    begin_pos = end_pos;
+    FilterChar * cur = word_begin;
+    unsigned int cur_pos = begin_pos;
+    word.clear();
+
+    // skip spaces (non-word characters)
+    while (*cur != 0 &&
+          !(is_word(*cur)
+            || (is_begin(*cur) && is_word(cur[1])))) 
+    {
+      cur_pos += cur->width;
+      ++cur;
+    }
+
+    if (*cur == 0) return false;
+
+    word_begin = cur;
+    begin_pos = cur_pos;
+
+    if (is_begin(*cur) && is_word(cur[1]))
+    {
+      cur_pos += cur->width;
+      ++cur;
+    }
+
+    while (is_word(*cur) || 
+          (is_middle(*cur) && 
+           cur > word_begin && is_word(cur[-1]) &&
+           is_word(cur[1]) )) 
+    {
+      word.append(*cur);
+      cur_pos += cur->width;
+      ++cur;
+    }
+
+    if (is_end(*cur))
+    {
+      word.append(*cur);
+      cur_pos += cur->width;
+      ++cur;
+    }
+
+    word.append('\0');
+    word_end = cur;
+    end_pos = cur_pos;
+
+    return true;
+  }
+#undef increment__
+
+  PosibErr<Tokenizer *> new_tokenizer(Speller * speller)
+  {
+    Tokenizer * tok = new TokenizerBasic();
+    speller->setup_tokenizer(tok);
+    return tok;
+  }
+
+}
diff --git a/myspell/Makefile.am b/myspell/Makefile.am
new file mode 100644 (file)
index 0000000..06f169f
--- /dev/null
@@ -0,0 +1,5 @@
+noinst_PROGRAMS = munch
+
+munch_SOURCES = munch.c
+
+EXTRA_DIST = README* en_US.aff *.h
\ No newline at end of file
diff --git a/myspell/Makefile.in b/myspell/Makefile.in
new file mode 100644 (file)
index 0000000..208d1c9
--- /dev/null
@@ -0,0 +1,480 @@
+# Makefile.in generated by automake 1.10.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = munch$(EXEEXT)
+subdir = myspell
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/gen/settings.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_munch_OBJECTS = munch.$(OBJEXT)
+munch_OBJECTS = $(am_munch_OBJECTS)
+munch_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/gen
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(munch_SOURCES)
+DIST_SOURCES = $(munch_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkglibdir = @pkglibdir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDE = @CURSES_INCLUDE@
+CURSES_LIB = @CURSES_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERLPROG = @PERLPROG@
+POSUB = @POSUB@
+PTHREAD_LIB = @PTHREAD_LIB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgdocdir = @pkgdocdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+munch_SOURCES = munch.c
+EXTRA_DIST = README* en_US.aff *.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  myspell/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  myspell/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+munch$(EXEEXT): $(munch_OBJECTS) $(munch_DEPENDENCIES) 
+       @rm -f munch$(EXEEXT)
+       $(LINK) $(munch_OBJECTS) $(munch_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/munch.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/myspell/README b/myspell/README
new file mode 100644 (file)
index 0000000..e85ba86
--- /dev/null
@@ -0,0 +1,7 @@
+This directory contains some utilites and documentation from the
+standalone MySpell utility with some minor modifications.
+
+You can find MySpell at
+http://lingucomponent.openoffice.org/dictionary.html
+
+
diff --git a/myspell/README.munch b/myspell/README.munch
new file mode 100644 (file)
index 0000000..241e22b
--- /dev/null
@@ -0,0 +1,13 @@
+Munch will take a word list and output an affix compressed version of
+the list to stdout.  Is syntax is 
+
+munch <word list file> <affix file>
+
+The input word list for munch MUST start with a number indicating the
+number of words in the list.  A good way to find it is 'wc -l'.
+
+To use the list to create an Aspell dictionary you need to remove the
+first line in the output which is the number of words in the output
+list.
+
+I hope to eventually integrate this program with the rest of Aspell.
\ No newline at end of file
diff --git a/myspell/README.replacetable b/myspell/README.replacetable
new file mode 100644 (file)
index 0000000..6fcdcb4
--- /dev/null
@@ -0,0 +1,25 @@
+We can define language-dependent phonetic information
+in the affix file (.aff)  by a replacement table. With this 
+table, MySpell can suggest the right forms for the typical 
+faults of spelling when the incorrect form differs by more, 
+than 1 letter from the right form.
+
+Replacement table syntax:
+
+REP [number_of_replacement_definitions]
+REP [what] [replacement]
+REP [what] [replacement]
+...
+
+For example a possible English replacement table definition
+to handle misspelt consonants:
+
+REP 8
+REP f ph
+REP ph f
+REP f gh
+REP gh f
+REP j dg
+REP dg j
+REP k ch
+REP ch k
diff --git a/myspell/README_en_US.txt b/myspell/README_en_US.txt
new file mode 100644 (file)
index 0000000..3fb4e5a
--- /dev/null
@@ -0,0 +1,9 @@
+This dictionary is based on a subset of the original 
+English wordlist created by Kevin Atkinson for Pspell 
+and  Aspell and thus is covered by his original 
+LGPL license.  The affix file is a heavily modified
+version of the original english.aff file which was
+released as part of Geoff Kuenning's Ispell and as 
+such is covered by his BSD license.
+
+Thanks to both authors for there wonderful work.
diff --git a/myspell/en_US.aff b/myspell/en_US.aff
new file mode 100644 (file)
index 0000000..5d0c272
--- /dev/null
@@ -0,0 +1,188 @@
+SET ISO8859-1
+TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
+
+PFX A Y 1
+PFX A   0     re         .
+
+PFX I Y 1
+PFX I   0     in         .
+
+PFX U Y 1
+PFX U   0     un         .
+
+PFX C Y 1
+PFX C   0     de          .
+
+PFX E Y 1
+PFX E   0     dis         .
+
+PFX F Y 1
+PFX F   0     con         .
+
+PFX K Y 1
+PFX K   0     pro         .
+
+SFX V N 2
+SFX V   e     ive        e
+SFX V   0     ive        [^e]
+
+SFX N Y 3
+SFX N   e     ion        e
+SFX N   y     ication    y 
+SFX N   0     en         [^ey] 
+
+SFX X Y 3
+SFX X   e     ions       e
+SFX X   y     ications   y
+SFX X   0     ens        [^ey]
+
+SFX H N 2
+SFX H   y     ieth       y
+SFX H   0     th         [^y] 
+
+SFX Y Y 1
+SFX Y   0     ly         .
+
+SFX G Y 2
+SFX G   e     ing        e
+SFX G   0     ing        [^e] 
+
+SFX J Y 2
+SFX J   e     ings       e
+SFX J   0     ings       [^e]
+
+SFX D Y 4
+SFX D   0     d          e
+SFX D   y     ied        [^aeiou]y
+SFX D   0     ed         [^ey]
+SFX D   0     ed         [aeiou]y
+
+SFX T N 4
+SFX T   0     st         e
+SFX T   y     iest       [^aeiou]y
+SFX T   0     est        [aeiou]y
+SFX T   0     est        [^ey]
+
+SFX R Y 4
+SFX R   0     r          e
+SFX R   y     ier        [^aeiou]y
+SFX R   0     er         [aeiou]y
+SFX R   0     er         [^ey]
+
+SFX Z Y 4
+SFX Z   0     rs         e
+SFX Z   y     iers       [^aeiou]y
+SFX Z   0     ers        [aeiou]y
+SFX Z   0     ers        [^ey]
+
+SFX S Y 4
+SFX S   y     ies        [^aeiou]y
+SFX S   0     s          [aeiou]y
+SFX S   0     es         [sxzh]
+SFX S   0     s          [^sxzhy]
+
+SFX P Y 3
+SFX P   y     iness      [^aeiou]y
+SFX P   0     ness       [aeiou]y
+SFX P   0     ness       [^y]
+
+SFX M Y 1
+SFX M   0     's         .
+
+SFX B Y 3
+SFX B   0     able       [^aeiou]
+SFX B   0     able       ee
+SFX B   e     able       [^aeiou]e
+
+SFX L Y 1
+SFX L   0     ment       .
+
+REP 88
+REP a ei
+REP ei a
+REP a ey
+REP ey a
+REP ai ie
+REP ie ai
+REP are air
+REP are ear
+REP are eir
+REP air are
+REP air ere
+REP ere air
+REP ere ear
+REP ere eir
+REP ear are
+REP ear air
+REP ear ere
+REP eir are
+REP eir ere
+REP ch te
+REP te ch
+REP ch ti
+REP ti ch
+REP ch tu
+REP tu ch
+REP ch s
+REP s ch
+REP ch k
+REP k ch
+REP f ph
+REP ph f
+REP gh f
+REP f gh
+REP i igh
+REP igh i
+REP i uy
+REP uy i
+REP i ee
+REP ee i
+REP j di
+REP di j
+REP j gg
+REP gg j
+REP j ge
+REP ge j
+REP s ti
+REP ti s
+REP s ci
+REP ci s
+REP k cc
+REP cc k
+REP k qu
+REP qu k
+REP kw qu
+REP o eau
+REP eau o
+REP o ew
+REP ew o
+REP oo ew
+REP ew oo
+REP ew ui
+REP ui ew
+REP oo ui
+REP ui oo
+REP ew u
+REP u ew
+REP oo u
+REP u oo
+REP u oe
+REP oe u
+REP u ieu
+REP ieu u
+REP ue ew
+REP ew ue
+REP uff ough
+REP oo ieu
+REP ieu oo
+REP ier ear
+REP ear ier
+REP ear air
+REP air ear
+REP w qu
+REP qu w
+REP z ss
+REP ss z
+REP shun tion
+REP shun sion
+REP shun cion
diff --git a/myspell/munch.c b/myspell/munch.c
new file mode 100644 (file)
index 0000000..b56e05b
--- /dev/null
@@ -0,0 +1,870 @@
+/* Munch a word list and generate a smaller root word list with affixes*/
+
+/*
+ * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada
+ * And Contributors (see CONTRIBUTORS file).  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. All modifications to the source code must be clearly marked as
+ *    such.  Binary redistributions based on modified source code
+ *    must be clearly marked as modified versions in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS 
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+ * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Minor modifications by Kevin Atkinson:
+ *   added check for word count in the first line of the word list
+ */
+
+#include <ctype.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#ifdef __linux__
+#include <error.h>
+#include <errno.h>
+#endif
+#include <sys/mman.h>
+
+#include "munch.h"
+
+int main(int argc, char** argv)
+{
+
+  int i, j, k, n;
+  int rl, p , nwl;
+  int al;
+
+  FILE * wrdlst;
+  FILE * afflst;
+
+  char *nword, *wf, *af;
+  char as[(MAX_PREFIXES + MAX_SUFFIXES)];
+  char * ap;
+
+  struct hentry * ep;
+  struct hentry * ep1;
+  struct affent * pfxp;
+  struct affent * sfxp;
+
+  /* first parse the command line options */
+  /* arg1 - wordlist, arg2 - affix file */
+
+  if (argv[1]) {
+       wf = mystrdup(argv[1]);
+  } else {
+    fprintf(stderr,"correct syntax is:\n"); 
+    fprintf(stderr,"munch word_list_file affix_file\n");
+    exit(1);
+  }
+  if (argv[2]) {
+       af = mystrdup(argv[2]);
+  } else {
+    fprintf(stderr,"correct syntax is:\n"); 
+    fprintf(stderr,"munch word_list_file affix_file\n");
+    exit(1);
+  }
+
+  /* open the affix file */
+  afflst = fopen(af,"r");
+  if (!afflst) {
+    fprintf(stderr,"Error - could not open affix description file\n");
+    exit(1);
+  }
+
+  /* step one is to parse the affix file building up the internal
+     affix data structures */
+
+  numpfx = 0;
+  numsfx = 0;
+
+  parse_aff_file(afflst);
+  fclose(afflst);
+
+  fprintf(stderr,"parsed in %d prefixes and %d suffixes\n",numpfx,numsfx);
+
+  /* affix file is now parsed so create hash table of wordlist on the fly */
+
+  /* open the wordlist */
+  wrdlst = fopen(wf,"r");
+  if (!wrdlst) {
+    fprintf(stderr,"Error - could not open word list file\n");
+    exit(1);
+  }
+
+  if (load_tables(wrdlst)) {
+    fprintf(stderr,"Error building hash tables\n");
+    exit(1);
+  }
+  fclose(wrdlst);
+
+  for (i=0; i< tablesize; i++) {
+    ep = &tableptr[i];
+    if (ep->word == NULL) continue;
+    for (  ;  ep != NULL;  ep = ep->next) {
+      numroots = 0;
+      aff_chk(ep->word,strlen(ep->word));
+      if (numroots) {
+            /* now there might be a number of combinations */
+            /* of prefixes and suffixes that might match this */
+            /* word.  So how to choose?  As a first shot look */
+            /* for the shortest remaining root word to */
+            /* to maximize the combinatorial power */
+
+           /* but be careful, do not REQUIRE a specific combination */
+            /* of a prefix and a suffix to generate the word since */
+            /* that violates the rule that the root word with just */
+            /* the prefix or just the suffix must also exist in the */
+            /* wordlist as well */
+
+           /* in fact because of the cross product issue, this not a  */
+           /* simple choice since some combinations of previous */ 
+           /* prefixes and new suffixes may not be valid. */
+           /*  The only way to know is to simply try them all */
+  
+            rl = 1000;
+            p = -1;
+
+            for (j = 0; j < numroots; j++){
+
+             /* first collect the root word info and build up */
+              /* the potential new affix string */
+               nword = (roots[j].hashent)->word;
+               nwl = strlen(nword);
+               *as = '\0';
+               al = 0;
+               ap = as;
+               if (roots[j].prefix) *ap++ = (roots[j].prefix)->achar;
+               if (roots[j].suffix) *ap++ = (roots[j].suffix)->achar;
+               if ((roots[j].hashent)->affstr) {
+                  strcpy(ap,(roots[j].hashent)->affstr);
+               } else {
+                *ap = '\0';
+               }
+               al =strlen(as);
+
+               /* now expand the potential affix string to generate */
+               /* all legal words and make sure they all exist in the */
+               /* word list */
+               numwords = 0;
+               wlist[numwords].word = mystrdup(nword);
+               wlist[numwords].pallow = 0;
+               numwords++;
+               n = 0;
+               if (al)
+                expand_rootword(nword,nwl,as,al);
+               for (k=0; k<numwords; k++) {
+                if (lookup(wlist[k].word)) n++;
+                 free(wlist[k].word);
+                 wlist[k].word = NULL;
+                 wlist[k].pallow = 0;
+               }
+
+               /* if all exist in word list then okay */
+               if (n == numwords) {               
+                  if (nwl < rl) {
+                     rl = nwl;
+                     p = j;
+                  }
+               }
+            }
+            if (p != -1) {
+               ep1 = roots[p].hashent;
+               pfxp = roots[p].prefix;
+               sfxp = roots[p].suffix;
+               ep1->keep = 1;
+               if (pfxp != NULL) add_affix_char(ep1,pfxp->achar);
+               if (sfxp != NULL) add_affix_char(ep1,sfxp->achar);
+
+            } else {
+             ep->keep = 1;
+            }
+      } else {
+            ep->keep = 1;
+      }
+    }
+  }
+
+  /* now output only the words to keep along with affixes info */
+  /* first count how many words that is */
+  k = 0;
+  for (i=0; i< tablesize; i++) {
+    ep = &tableptr[i];
+    if (ep->word == NULL) continue;
+    for (  ;  ep != NULL;  ep = ep->next) {
+       if (ep->keep > 0) k++;
+    }
+  }
+  fprintf(stdout,"%d\n",k);
+
+  for (i=0; i< tablesize; i++) {
+    ep = &tableptr[i];
+    if (ep->word == NULL) continue;
+    for (  ;  ep != NULL;  ep = ep->next) {
+      if (ep->keep > 0) {
+        if (ep->affstr != NULL) { 
+         fprintf(stdout,"%s/%s\n",ep->word,ep->affstr);
+       } else {
+          fprintf(stdout,"%s\n",ep->word);
+        }
+      }
+    }
+  }
+  return 0;
+}
+
+
+void parse_aff_file(FILE * afflst)
+{  
+    int i, j;
+    int numents = 0;
+    char achar = '\0';
+    short ff=0;
+    char ft;
+    struct affent * ptr= NULL;
+    struct affent * nptr= NULL;
+    char * line = malloc(MAX_LN_LEN);
+
+    while (fgets(line,MAX_LN_LEN,afflst)) {
+       mychomp(line);
+       ft = ' ';
+       fprintf(stderr,"parsing line: %s\n",line);
+       if (strncmp(line,"PFX",3) == 0) ft = 'P';
+       if (strncmp(line,"SFX",3) == 0) ft = 'S';
+       if (ft != ' ') {
+          char * tp = line;
+          char * piece;
+          i = 0;
+          ff = 0;
+          while ((piece=mystrsep(&tp,' '))) {
+             if (*piece != '\0') {
+                 switch(i) {
+                    case 0: break;
+                    case 1: { achar = *piece; break; }
+                    case 2: { if (*piece == 'Y') ff = XPRODUCT; break; }
+                    case 3: { numents = atoi(piece); 
+                              ptr = malloc(numents * sizeof(struct affent));
+                              ptr->achar = achar;
+                              ptr->xpflg = ff;
+                             fprintf(stderr,"parsing %c entries %d\n",achar,numents);
+                              break;
+                            }
+                   default: break;
+                 }
+                 i++;
+             }
+             free(piece);
+          }
+          /* now parse all of the sub entries*/
+          nptr = ptr;
+          for (j=0; j < numents; j++) {
+             fgets(line,MAX_LN_LEN,afflst);
+             mychomp(line);
+             tp = line;
+             i = 0;
+             while ((piece=mystrsep(&tp,' '))) {
+                if (*piece != '\0') {
+                    switch(i) {
+                       case 0: { if (nptr != ptr) {
+                                   nptr->achar = ptr->achar;
+                                   nptr->xpflg = ptr->xpflg;
+                                 }
+                                 break;
+                               }
+                       case 1: break;
+                       case 2: { nptr->strip = mystrdup(piece);
+                                 nptr->stripl = strlen(nptr->strip);
+                                 if (strcmp(nptr->strip,"0") == 0) {
+                                   free(nptr->strip);
+                                   nptr->strip=mystrdup("");
+                                  nptr->stripl = 0;
+                                 }   
+                                 break; 
+                               }
+                       case 3: { nptr->appnd = mystrdup(piece);
+                                 nptr->appndl = strlen(nptr->appnd);
+                                 if (strcmp(nptr->appnd,"0") == 0) {
+                                   free(nptr->appnd);
+                                   nptr->appnd=mystrdup("");
+                                  nptr->appndl = 0;
+                                 }   
+                                 break; 
+                               }
+                       case 4: { encodeit(nptr,piece);}
+                               fprintf(stderr, "   affix: %s %d, strip: %s %d\n",nptr->appnd,
+                                                   nptr->appndl,nptr->strip,nptr->stripl);
+                      default: break;
+                    }
+                    i++;
+                }
+                free(piece);
+             }
+             nptr++;
+          }
+          if (ft == 'P') {
+             ptable[numpfx].aep = ptr;
+             ptable[numpfx].num = numents;
+             fprintf(stderr,"ptable %d num is %d\n",numpfx,ptable[numpfx].num);
+             numpfx++;
+          } else {
+             stable[numsfx].aep = ptr;
+             stable[numsfx].num = numents;
+             fprintf(stderr,"stable %d num is %d\n",numsfx,stable[numsfx].num);
+             numsfx++;
+          }
+          ptr = NULL;
+          nptr = NULL;
+          numents = 0;
+          achar='\0';
+       }
+    }
+    free(line);
+}
+
+
+void encodeit(struct affent * ptr, char * cs)
+{
+  int nc;
+  int neg;
+  int grp;
+  unsigned char c;
+  int n;
+  int ec;   
+  int nm;
+  int i, j, k;
+  unsigned char mbr[MAX_WD_LEN];
+
+  /* now clear the conditions array */
+  for (i=0;i<SET_SIZE;i++) ptr->conds[i] = (unsigned char) 0;
+
+  /* now parse the string to create the conds array */
+  nc = strlen(cs);
+  neg = 0;  /* complement indicator */
+  grp = 0;  /* group indicator */
+  n = 0;    /* number of conditions */
+  ec = 0;   /* end condition indicator */
+  nm = 0;   /* number of member in group */
+  i = 0;
+  if (strcmp(cs,".")==0) {
+    ptr->numconds = 0;
+    return;
+  }
+  while (i < nc) {
+    c = *((unsigned char *)(cs + i));
+    if (c == '[') {
+       grp = 1;
+       c = 0;
+    }
+    if ((grp == 1) && (c == '^')) {
+       neg = 1;
+       c = 0;
+    }
+    if (c == ']') {
+       ec = 1;
+       c = 0;
+    }
+    if ((grp == 1) && (c != 0)) {
+      *(mbr + nm) = c;
+      nm++;
+      c = 0;
+    }
+    if (c != 0) {
+       ec = 1;
+    }
+    if (ec) {
+      if (grp == 1) {
+        if (neg == 0) {
+         for (j=0;j<nm;j++) {
+            k = (unsigned int) mbr[j];
+             ptr->conds[k] = ptr->conds[k] | (1 << n);
+          }
+       } else {
+          for (j=0;j<SET_SIZE;j++) ptr->conds[j] = ptr->conds[j] | (1 << n);
+          for (j=0;j<nm;j++) {
+            k = (unsigned int) mbr[j];
+             ptr->conds[k] = ptr->conds[k] & ~(1 << n);
+          }
+        }
+        neg = 0;
+        grp = 0;   
+        nm = 0;
+      } else {
+       /* not a group so just set the proper bit for this char */
+       /* but first handle special case of . inside condition */
+       if (c == '.') {
+         /* wild card character so set them all */
+         for (j=0;j<SET_SIZE;j++) ptr->conds[j] = ptr->conds[j] | (1 << n);
+       } else {
+         ptr->conds[(unsigned int) c] = ptr->conds[(unsigned int)c] | (1 << n);
+       }
+      }
+      n++;
+      ec = 0;
+    }
+    i++;
+  }
+  ptr->numconds = n;
+  return;
+}
+
+
+
+/* search for a prefix */
+void pfx_chk (const char * word, int len, struct affent* ep, int num)
+{
+    struct affent *     aent;
+    int                        cond;
+    int        tlen;
+    struct hentry *    hent;
+    unsigned char *    cp;             
+    int                        i;
+    char               tword[MAX_WD_LEN];
+
+    for (aent = ep, i = num; i > 0; aent++, i--) {
+
+       tlen = len - aent->appndl;
+
+       if (tlen > 0 &&  (aent->appndl == 0 ||  
+            strncmp(aent->appnd, word, aent->appndl) == 0)
+           &&  tlen + aent->stripl >= aent->numconds) {
+
+           if (aent->stripl) strcpy (tword, aent->strip);
+           strcpy((tword + aent->stripl), (word + aent->appndl));
+
+            /* now go through the conds and make sure they all match */
+           cp = (unsigned char *) tword;
+           for (cond = 0;  cond < aent->numconds;  cond++) {
+               if ((aent->conds[*cp++] & (1 << cond)) == 0)
+                   break;
+           }
+
+           if (cond >= aent->numconds) {
+               tlen += aent->stripl;
+               if ((hent = lookup(tword)) != NULL) {
+                  if (numroots < MAX_ROOTS) {
+                      roots[numroots].hashent = hent;
+                      roots[numroots].prefix = aent;
+                      roots[numroots].suffix = NULL;
+                      numroots++;
+                  }
+               }
+           }
+       }
+    }
+}
+
+
+
+void suf_chk (const char * word, int len, struct affent * ep, 
+              int num, struct affent * pfxent, int cpflag)
+{
+    struct affent *     aent;  
+    int                        tlen;   
+    int                        cond;   
+    struct hentry *    hent;   
+    unsigned char *    cp;
+    int                        i;
+    char               tword[MAX_WD_LEN];
+
+    for (aent = ep, i = num; i > 0; aent++, i--) {
+
+        if ((cpflag & XPRODUCT) != 0 &&  (aent->xpflg & XPRODUCT) == 0)
+           continue;
+
+       tlen = len - aent->appndl;
+       if (tlen > 0  &&  (aent->appndl == 0 ||  
+            strcmp(aent->appnd, (word + tlen)) == 0)
+           &&  tlen + aent->stripl >= aent->numconds) {
+
+           strcpy (tword, word);
+           cp = (unsigned char *) (tword + tlen);
+           if (aent->stripl) {
+              strcpy ((char *)cp, aent->strip);
+              tlen += aent->stripl;
+              cp = (unsigned char *)(tword + tlen);
+           } else *cp = '\0';
+
+           for (cond = aent->numconds;  --cond >= 0;  ) {
+               if ((aent->conds[*--cp] & (1 << cond)) == 0) break;
+           }
+           if (cond < 0) {
+              if ((hent = lookup(tword)) != NULL) {
+                 if (numroots < MAX_ROOTS) {
+                    roots[numroots].hashent = hent;
+                    roots[numroots].prefix = pfxent;
+                    roots[numroots].suffix = aent;
+                    numroots++;
+                 }
+              }
+           }
+       }
+    }
+}
+
+
+
+void aff_chk (const char * word, int len)
+{
+    int i;
+    int j;
+    int nh=0;
+    char * nword;
+    int nwl;
+
+    if (len < 4) return;
+
+    for (i=0; i < numpfx; i++) {
+       pfx_chk(word, len, ptable[i].aep, ptable[i].num);
+    }
+
+    nh = numroots;
+
+    if (nh > 0) {
+       for (j=0;j<nh;j++){
+         if (roots[j].prefix->xpflg & XPRODUCT) {
+            nword = mystrdup((roots[j].hashent)->word);
+            nwl = strlen(nword);
+            for (i=0; i < numsfx; i++) {
+               suf_chk(nword,nwl,stable[i].aep, stable[i].num, roots[j].prefix, XPRODUCT);
+            }
+            free(nword);
+         }
+       }
+    }
+    for (i=0; i < numsfx; i++) {
+       suf_chk(word, len, stable[i].aep, stable[i].num, NULL, 0);
+    }
+}
+
+
+
+/* lookup a root word in the hashtable */
+
+struct hentry * lookup(const char *word)
+{
+    struct hentry * dp;
+    dp = &tableptr[hash(word)];
+    if (dp->word == NULL) return NULL;
+    for (  ;  dp != NULL;  dp = dp->next) {
+      if (strcmp(word,dp->word) == 0) return dp;
+    }
+    return NULL;
+}
+
+
+
+/* add a word to the hash table */
+
+int add_word(char * word)
+{
+    int i;
+    struct hentry * dp;
+    struct hentry * hp = (struct hentry *) malloc (sizeof(struct hentry));
+
+    hp->word = word;
+    hp->affstr = NULL;
+    hp->keep = 0;
+    hp->next = NULL;
+
+    i = hash(word);
+    dp = &tableptr[i];
+    
+    if (dp->word == NULL) {
+      *dp = *hp;
+       free(hp);
+    } else {
+      while (dp->next != NULL) dp=dp->next; 
+      dp->next = hp;
+    }
+    return 0;
+}     
+
+
+
+/* load a word list and build a hash table on the fly */
+
+int load_tables(FILE * wdlst)
+{
+  char * ap;
+  char ts[MAX_LN_LEN];
+
+  /* first read the first line of file to get hash table size */
+  if (! fgets(ts, MAX_LN_LEN-1,wdlst)) return 2;
+  mychomp(ts);
+  char * end;
+  tablesize = strtol(ts, &end, 10);
+  if (ts == end && tablesize == 0) {
+    fprintf(stderr, "ERROR: The first line must be the number of words in the list\n");
+    exit(1);
+  }
+  tablesize = tablesize + 5;
+  if ((tablesize %2) == 0) tablesize++;
+
+  /* allocate the hash table */
+  tableptr = (struct hentry *) calloc(tablesize, sizeof(struct hentry));
+  if (! tableptr) return 3;
+
+  /* loop thorugh all words on much list and add to hash
+   * table and store away word and affix strings in tmpfile
+   */
+
+  while (fgets(ts,MAX_LN_LEN-1,wdlst)) {
+    mychomp(ts);
+    ap = mystrdup(ts);
+    add_word(ap);
+
+  }
+  return 0;
+}
+
+
+/* the hash function is a simple load and rotate
+ * algorithm borrowed
+ */
+
+int hash(const char * word)
+{
+    int i;
+    long  hv = 0;
+    for (i=0; i < 4  &&  *word != 0; i++)
+       hv = (hv << 8) | (*word++);
+    while (*word != 0) {
+      ROTATE(hv,ROTATE_LEN);
+      hv ^= (*word++);
+    }
+    return (unsigned long) hv % tablesize;
+}
+
+
+void add_affix_char(struct hentry * ep, char ac)
+{
+  int al;
+  int i;
+  char * tmp;
+  if (ep->affstr == NULL) {
+     ep->affstr = (char *) malloc(2*sizeof(char));
+     *(ep->affstr) = ac;
+     *((ep->affstr)+1) = '\0';
+     return;
+  }
+  al = strlen(ep->affstr);
+  for (i=0; i< al; i++)
+    if (ac == (ep->affstr)[i]) return;
+  tmp = calloc((al+2),sizeof(char));
+  memcpy(tmp,ep->affstr,(al+1));
+  *(tmp+al) = ac;
+  *(tmp+al+1)='\0';
+  free(ep->affstr);
+  ep->affstr = tmp;
+  return;
+}
+
+
+/* add a prefix to word */
+void pfx_add (const char * word, int len, struct affent* ep, int num)
+{
+    struct affent *     aent;
+    int                        cond;
+    int        tlen;
+    unsigned char *    cp;             
+    int                        i;
+    char *              pp;
+    char               tword[MAX_WD_LEN];
+
+    
+    for (aent = ep, i = num; i > 0; aent++, i--) {
+
+        /* now make sure all conditions match */
+        if ((len > aent->stripl) && (len >= aent->numconds)) {
+
+            cp = (unsigned char *) word;
+            for (cond = 0;  cond < aent->numconds;  cond++) {
+              if ((aent->conds[*cp++] & (1 << cond)) == 0)
+                 break;
+            }
+            if (cond >= aent->numconds) {
+
+             /* we have a match so add prefix */
+              tlen = 0;
+              if (aent->appndl) {
+                 strcpy(tword,aent->appnd);
+                  tlen += aent->appndl;
+               } 
+               pp = tword + tlen;
+               strcpy(pp, (word + aent->stripl));
+               tlen = tlen + len - aent->stripl;
+
+               if (numwords < MAX_WORDS) {
+                  wlist[numwords].word = mystrdup(tword);
+                  wlist[numwords].pallow = 0;
+                  numwords++;
+               }
+           }
+       }
+    }
+}
+
+
+/* add a suffix to a word */
+void suf_add (const char * word, int len, struct affent * ep, int num)
+{
+    struct affent *     aent;  
+    int                        tlen;   
+    int                        cond;   
+    unsigned char *    cp;
+    int                        i;
+    char               tword[MAX_WD_LEN];
+    char *              pp;
+
+    for (aent = ep, i = num; i > 0; aent++, i--) {
+
+      /* if conditions hold on root word 
+       * then strip off strip string and add suffix
+       */
+
+      if ((len > aent->stripl) && (len >= aent->numconds)) {
+       cp = (unsigned char *) (word + len);
+       for (cond = aent->numconds;  --cond >= 0;  ) {
+           if ((aent->conds[*--cp] & (1 << cond)) == 0) break;
+       }
+       if (cond < 0) {
+         /* we have a matching condition */
+          strcpy(tword,word);
+          tlen = len;
+         if (aent->stripl) {
+             tlen -= aent->stripl;
+          }
+          pp = (tword + tlen);
+          if (aent->appndl) {
+              strcpy (pp, aent->appnd);
+              tlen += aent->stripl;
+         } else *pp = '\0';
+
+          if (numwords < MAX_WORDS) {
+              wlist[numwords].word = mystrdup(tword);
+              wlist[numwords].pallow = (aent->xpflg & XPRODUCT);
+              numwords++;
+          }
+       }
+      }
+    }
+}
+
+
+
+int expand_rootword(const char * ts, int wl, const char * ap, int al)
+{
+    int i;
+    int j;
+    int nh=0;
+    int nwl;
+
+    for (i=0; i < numsfx; i++) {
+      if (strchr(ap,(stable[i].aep)->achar)) {
+         suf_add(ts, wl, stable[i].aep, stable[i].num);
+      }
+    }
+   
+    nh = numwords;
+
+    if (nh > 1) {
+       for (j=1;j<nh;j++){
+         if (wlist[j].pallow) {
+            for (i=0; i < numpfx; i++) {
+               if (strchr(ap,(ptable[i].aep)->achar)) {
+                if ((ptable[i].aep)->xpflg & XPRODUCT) {
+                   nwl = strlen(wlist[j].word);
+                   pfx_add(wlist[j].word, nwl, ptable[i].aep, ptable[i].num);
+                }
+              }
+           }
+        }
+       }
+    }
+
+    for (i=0; i < numpfx; i++) {
+       if (strchr(ap,(ptable[i].aep)->achar)) {
+          pfx_add(ts, wl, ptable[i].aep, ptable[i].num);
+       }
+    }
+    return 0;
+}
+
+
+
+/* strip strings into token based on single char delimiter
+ * acts like strsep() but only uses a delim char and not
+ * a delim string
+ */
+char * mystrsep(char ** stringp, const char delim)
+{
+  char * rv = NULL;
+  char * mp = *stringp;
+  int n = strlen(mp);
+  if (n > 0) {
+    char * dp = (char *)memchr(mp,(int)((unsigned char)delim),n);
+    if (dp) {
+      int nc;
+      *stringp = dp+1;
+      nc = (int)((unsigned long)dp - (unsigned long)mp);
+      rv = (char *) malloc(nc+1);
+      memcpy(rv,mp,nc);
+      *(rv+nc) = '\0';
+      return rv;
+    } else {
+      rv = (char *) malloc(n+1);
+      memcpy(rv, mp, n);
+      *(rv+n) = '\0';
+      *stringp = mp + n;
+      return rv;
+    }
+  }
+  return NULL;
+}
+
+
+char * mystrdup(const char * s)
+{
+  char * d = NULL;
+  if (s) {
+    int sl = strlen(s);
+    d = (char *) malloc(((sl+1) * sizeof(char)));
+    if (d) memcpy(d,s,((sl+1)*sizeof(char)));
+  }
+  return d;
+}
+
+
+void mychomp(char * s)
+{
+  int k = strlen(s);
+  if (k > 0) *(s+k-1) = '\0';
+  if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
+}
+
diff --git a/myspell/munch.h b/myspell/munch.h
new file mode 100644 (file)
index 0000000..8dc7aea
--- /dev/null
@@ -0,0 +1,121 @@
+/* munch header file */
+
+#define MAX_LN_LEN    200
+#define MAX_WD_LEN    200
+#define MAX_PREFIXES  256
+#define MAX_SUFFIXES  256
+#define MAX_ROOTS      20
+#define MAX_WORDS     5000
+#define ROTATE_LEN      5
+#define ROTATE(v,q) \
+   (v) = ((v) << (q)) | (((v) >> (32 - q)) & ((1 << (q))-1));
+
+#define SET_SIZE      256
+
+#define XPRODUCT  (1 << 0)
+
+/* the affix table entry */
+
+struct affent
+{
+    char *  appnd;
+    char *  strip;
+    short   appndl;
+    short   stripl;
+    char    achar;
+    char    xpflg;   
+    short   numconds;
+    char    conds[SET_SIZE];
+};
+
+
+struct affixptr
+{
+    struct affent * aep;
+    int                    num;
+};
+
+/* the prefix and suffix table */
+int    numpfx;         /* Number of prefixes in table */
+int     numsfx;                /* Number of suffixes in table */
+
+/* the prefix table */
+struct affixptr          ptable[MAX_PREFIXES];
+
+/* the suffix table */
+struct affixptr          stable[MAX_SUFFIXES];
+
+
+/* data structure to store results of lookups */
+struct matches
+{
+    struct hentry *    hashent;        /* hash table entry */
+    struct affent *    prefix;         /* Prefix used, or NULL */
+    struct affent *    suffix;         /* Suffix used, or NULL */
+};
+
+int    numroots;                 /* number of root words found */
+struct matches  roots[MAX_ROOTS]; /* list of root words found */
+
+/* hashing stuff */
+
+struct hentry
+{
+  char * word;
+  char * affstr;
+  struct hentry * next;
+  int keep;
+};
+
+int             tablesize;
+struct hentry * tableptr;
+
+/* unmunch stuff */
+
+int    numwords;                 /* number of words found */
+struct dwords
+{
+  char * word;
+  int pallow;
+};
+
+struct dwords  wlist[MAX_WORDS]; /* list words found */
+
+
+/* the routines */
+
+void parse_aff_file(FILE* afflst);
+
+void encodeit(struct affent * ptr, char * cs);
+
+int load_tables(FILE * wrdlst);
+
+int hash(const char *);
+
+int add_word(char *);
+
+struct hentry * lookup(const char *);
+
+void aff_chk (const char * word, int len);
+
+void pfx_chk (const char * word, int len, struct affent* ep, int num);
+
+void suf_chk (const char * word, int len, struct affent * ep, int num, 
+             struct affent * pfxent, int cpflag);
+
+void add_affix_char(struct hentry * hent, char ac);
+
+int expand_rootword(const char *, int, const char*, int);
+
+void pfx_add (const char * word, int len, struct affent* ep, int num);
+
+void suf_add (const char * word, int len, struct affent * ep, int num);
+
+char * mystrsep(char ** stringp, const char delim);
+
+char * mystrdup(const char * s);
+
+void mychomp(char * s);
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644 (file)
index 0000000..3d6ca20
--- /dev/null
@@ -0,0 +1,31 @@
+# Set of available languages.
+ast
+be
+ca
+cs
+da
+de
+en_GB
+es
+fi
+fr
+ga
+id
+it
+ja
+mn
+ms
+nl
+pt_BR
+ro
+ru
+rw
+sk
+sl
+sr
+sv
+tg
+uk
+vi
+wa
+zh_CN
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..5022b8b
--- /dev/null
@@ -0,0 +1,403 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.16
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+       @echo "$(MSGFMT) -c -o $@ $<"; \
+       $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+       @lang=`echo $* | sed -e 's,.*/,,'`; \
+       test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+       echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+       cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+       sed -e '/^#/d' $< > t-$@
+       mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+       test ! -f $(srcdir)/$(DOMAIN).pot || \
+         test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+       @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+         echo "touch stamp-po" && \
+         echo timestamp > stamp-poT && \
+         mv stamp-poT stamp-po; \
+       }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+       if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+         msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+       else \
+         msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+       fi; \
+       $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+         --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+         --files-from=$(srcdir)/POTFILES.in \
+         --copyright-holder='$(COPYRIGHT_HOLDER)' \
+         --msgid-bugs-address="$$msgid_bugs_address"
+       test ! -f $(DOMAIN).po || { \
+         if test -f $(srcdir)/$(DOMAIN).pot; then \
+           sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+           sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+           if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+           else \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+             mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+           fi; \
+         else \
+           mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+         fi; \
+       }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+       $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+       @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+       if test -f "$(srcdir)/$${lang}.po"; then \
+         test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+         echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+         cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+       else \
+         $(MAKE) $${lang}.po-create; \
+       fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+         for file in $(DISTFILES.common) Makevars.template; do \
+           $(INSTALL_DATA) $(srcdir)/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         for file in Makevars; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+install-data-no: all
+install-data-yes: all
+       $(mkdir_p) $(DESTDIR)$(datadir)
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
+         if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+         $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+         echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+         for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+           if test -n "$$lc"; then \
+             if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+               link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+               mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+               mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+                for file in *; do \
+                  if test -f $$file; then \
+                    ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+                  fi; \
+                done); \
+               rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+             else \
+               if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+                 :; \
+               else \
+                 rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+                 mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               fi; \
+             fi; \
+             rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+             ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+             ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+             cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+             echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+           fi; \
+         done; \
+       done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+       else \
+         : ; \
+       fi
+installdirs-data-no:
+installdirs-data-yes:
+       $(mkdir_p) $(DESTDIR)$(datadir)
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
+         for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+           if test -n "$$lc"; then \
+             if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+               link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+               mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+               mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+                for file in *; do \
+                  if test -f $$file; then \
+                    ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+                  fi; \
+                done); \
+               rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+             else \
+               if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+                 :; \
+               else \
+                 rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+                 mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               fi; \
+             fi; \
+           fi; \
+         done; \
+       done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         for file in $(DISTFILES.common) Makevars.template; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+uninstall-data-no:
+uninstall-data-yes:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+           rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+         done; \
+       done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+       rm -f remove-potcdate.sed
+       rm -f stamp-poT
+       rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+       $(MAKE) update-po
+       @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         dists="$$dists Makevars.template"; \
+       fi; \
+       if test -f $(srcdir)/$(DOMAIN).pot; then \
+         dists="$$dists $(DOMAIN).pot stamp-po"; \
+       fi; \
+       if test -f $(srcdir)/ChangeLog; then \
+         dists="$$dists ChangeLog"; \
+       fi; \
+       for i in 0 1 2 3 4 5 6 7 8 9; do \
+         if test -f $(srcdir)/ChangeLog.$$i; then \
+           dists="$$dists ChangeLog.$$i"; \
+         fi; \
+       done; \
+       if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+       for file in $$dists; do \
+         if test -f $$file; then \
+           cp -p $$file $(distdir) || exit 1; \
+         else \
+           cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+         fi; \
+       done
+
+update-po: Makefile
+       $(MAKE) $(DOMAIN).pot-update
+       test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+       $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+       @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+       echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+       exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+       @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+       if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+       tmpdir=`pwd`; \
+       echo "$$lang:"; \
+       test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+       echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+       cd $(srcdir); \
+       if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+         if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+           rm -f $$tmpdir/$$lang.new.po; \
+         else \
+           if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+             :; \
+           else \
+             echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
+       else \
+         echo "msgmerge for $$lang.po failed!" 1>&2; \
+         rm -f $$tmpdir/$$lang.new.po; \
+       fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+       @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+       cd $(top_builddir) \
+         && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644 (file)
index 0000000..598aeeb
--- /dev/null
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Kevin Atkinson
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = kevina@gnu.org
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..a3627cf
--- /dev/null
@@ -0,0 +1,17 @@
+common/info.cpp
+common/config.cpp
+common/convert.cpp
+common/errors.cpp
+common/posib_err.cpp 
+lib/new_fmode.cpp
+prog/aspell.cpp
+prog/check_funs.cpp
+modules/speller/default/language.cpp
+modules/speller/default/affix.cpp
+modules/speller/default/readonly_ws.cpp
+modules/speller/default/multi_ws.cpp
+modules/speller/default/suggest.cpp
+modules/speller/default/data.cpp
+modules/speller/default/speller_impl.cpp
+modules/filter/tex.cpp
+gen/filter.pot
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644 (file)
index 0000000..9c2a995
--- /dev/null
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+       $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+       $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+       @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+       tmpdir=`pwd`; \
+       echo "$$lang:"; \
+       ll=`echo $$lang | sed -e 's/@.*//'`; \
+       LC_ALL=C; export LC_ALL; \
+       cd $(srcdir); \
+       if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+         if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+           rm -f $$tmpdir/$$lang.new.po; \
+         else \
+           if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+             :; \
+           else \
+             echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
+       else \
+         echo "creation of $$lang.po failed!" 1>&2; \
+         rm -f $$tmpdir/$$lang.new.po; \
+       fi
+
+en@quot.insert-header: insert-header.sin
+       sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+       sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+       rm -f *.insert-header
diff --git a/po/aspell.pot b/po/aspell.pot
new file mode 100644 (file)
index 0000000..f364775
--- /dev/null
@@ -0,0 +1,1336 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Kevin Atkinson
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr ""
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr ""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr ""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr ""
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr ""
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr ""
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr ""
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr ""
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr ""
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr ""
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr ""
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr ""
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr ""
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr ""
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr ""
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr ""
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr ""
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr ""
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr ""
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr ""
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr ""
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr ""
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr ""
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr ""
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr ""
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr ""
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr ""
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr ""
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr ""
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr ""
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr ""
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr ""
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr ""
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr ""
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr ""
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr ""
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr ""
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr ""
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr ""
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr ""
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr ""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr ""
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr ""
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr ""
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr ""
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr ""
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr ""
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr ""
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr ""
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr ""
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr ""
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr ""
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr ""
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr ""
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr ""
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr ""
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr ""
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr ""
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr ""
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr ""
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr ""
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr ""
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr ""
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr ""
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr ""
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr ""
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr ""
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr ""
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr ""
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr ""
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr ""
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr ""
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr ""
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr ""
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr ""
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr ""
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr ""
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr ""
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr ""
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr ""
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr ""
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr ""
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr ""
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr ""
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr ""
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr ""
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr ""
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr ""
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr ""
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr ""
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr ""
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr ""
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr ""
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr ""
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr ""
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr ""
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr ""
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr ""
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr ""
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr ""
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr ""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr ""
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr ""
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr ""
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr ""
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr ""
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr ""
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr ""
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr ""
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
diff --git a/po/ast.gmo b/po/ast.gmo
new file mode 100644 (file)
index 0000000..24fdc98
Binary files /dev/null and b/po/ast.gmo differ
diff --git a/po/ast.po b/po/ast.po
new file mode 100644 (file)
index 0000000..46012d6
--- /dev/null
+++ b/po/ast.po
@@ -0,0 +1,1404 @@
+# GNU Aspell asturian translations.
+# Copyright (C) 2010 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Marquinos <maacub@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2010-02-28 22:09+0200\n"
+"Last-Translator: Marquinos <maacub@gmail.com>\n"
+"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ast\n"
+"X-Generator: Virtaal 0.3.1\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un númberu ente 0 y 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "na forma \"<nome> <valor>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "testu"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "enteru"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleanu"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "llista"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "o \"true\" o \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un númberu enteru positivu"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# por defeutu:"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtru: %s\n"
+"#   %s\n"
+"#\n"
+"# quedó configurao d'esta miente:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "variable d'entornu ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "ficheru de configuración principal"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "allugamientu del ficheru de configuración principal"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "allugamientu de los ficheros de datos d'idioma"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "crear alies de diccionariu"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "allugamientu del pallabreru principal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codificación esperada pa los datos"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "amiesta o desanicia un filtru"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "camín/caminos onde aspell gueta los filtros"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mou de filtru"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "diccionarios adicionales a usar"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "allugamientu de los ficheros personales"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "inorar pallabres con <= de n caráuteres"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "inorar tildes al comprobar les pallabres -- ANGUAÑO INORAES"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "inorar mayúscules/minúscules al comprobar les pallabres"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "inorar comandos de guardáu de les pareyes de troquéu"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "información adicional pal pallabreru"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definición del tecláu pal análisis d'errores ortográficos"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "códigu del idioma"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "obsoletu, usar lang en cuenta d'él"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "allugamientu de los ficheros de datos del idioma llocal"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "nome del diccionariu principal a usar"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "afitar el nome del módulu"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "orde de busca pa los módulos"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "activar normalización Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "necesítase normalización Unicode pal idioma actual"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Normalización Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "evitar conversiones con perda al normalizar"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "ficheru de configuración personal"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nome de ficheru del diccionariu personal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "direutoriu de prefixos"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nome de ficheru de la llista de troqueo"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considerar llegales les pallabres compuestes"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "númberu másimu que pue ser aunao"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "llonxitú mínima de les pallabres interiores"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "guardar les pareyes de troquéu en guardar too"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "afitar el prefixu acordies col allugamientu del executable"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "tamañu del palla"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "yá nun s'usa"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mou de suxerencies"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+"distancia d'edición a usar, nun se tien en cuenta el sug-mode por defeutu"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+"usar l'análisis d'errores ortrográficos, nun se tien en cuenta el sug-mode "
+"por defeutu"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "usar tables de troquéu, nun se tien en cuenta el sug-mode por defeutu"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caráuteres a amestar cuando se dixebra una pallabra"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "usar los diccionarios personal, de troquéu y de sesión"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "camín de busca pa los ficheros d'información del pallabreru"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "activar avisos"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indicador pa les marque d'afixos nos pallabreros -- ANGUAÑO INORÁU"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "usar compresión d'afixos al crear diccionarios"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "desaniciar marques d'afixos non válides"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "fai por llimpiar les pallabres pa que seyan válides"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "calcular l'asemeyanza fonética cuando seya necesario"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "espander parcialmente los afixos pa sacar suxerencies meyores"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "omitir pallabres non válides"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "comprobar si les marques d'afixos son válides"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "comprobar si les pallabres son válides"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "crear una copia de seguridá amestando «.bak» al nome del ficheru"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+"usar desplazamientos de byte en cuenta de desplazamientos de caráuteres"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "crear combinaciones raiz/afixu que falten"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapa de tecláu pal mou de revisión: «aspell» o «ispell»"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "invertir l'orde de la llista de suxerencies"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suxerir los troqueos posibles"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "tiempu de carga y de suxerencia nel mou pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Esto tamién podría significar que'l ficheru «%s» nun se pudo abrir pa lleelu "
+"o que nun esiste."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "El códigu Unicode U+%04X nun ta soportáu."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Secuencia UTF-8 non válida nel allugamientu %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operación non soportada: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "El métodu «%what:1» nun ta implementáu en «%where:2»."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "El ficheru «%file:1» nun se pue abrir"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "El ficheru «%file:1» nun se pue abrir pa lleelu."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "El ficheru «%file:1» nun se pue abrir pa escribilu."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "El nome de ficheu «%file:1» nun ye válidu."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "El ficheru «%file:1» nun tien el formatu apropiáu."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "El direutoriu \"%dir:1\" nun se pue abrir pa lleelu."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Nun se conoz la clave «%key:1»."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "El valor de la opción «%key:1» nun se pue camudar."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "La clave «%key:1» nun ye %accepted:2 y, poro, nun ye válida."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"El valor «%value:2» nun ye %accepted:3 y, poro, nun ye válidu pa la clave «%"
+"key:1»."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "La clave «%key:1» nun ye una cadena de testu."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "La clave «%key:1» nun ye un númberu enteru."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "La clave «%key:1» nun ye un booleanu."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "La clave «%key:1» nun ye una llista."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"La clave «%key:1» nun almite parámetros cuando lleva'l prefixu «reset-»."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"La clave «%key:1» nun almite parámetros cuando lleva'l prefixu «enable-»."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"La clave «%key:1» nun almite parámetros cuando lleva'l prefixu «dont-» nin "
+"«disable-»."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"La clave «%key:1» nun almite parámetros cuando lleva'l prefixu «clear-»."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Nun se conoz l'idioma «%lang:1»."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Nun se conoz l'asemeyanza fonética «%sl:2»."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Nun se soporta l'idioma «%lang:1»."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Nun s'atoparon pallabreros pal idioma «%lang:1»."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Esperábase l'idioma «%lang:1» pero atopóse «%prev:2»."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "L'afixu «%aff:1» ta corruptu."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "La condición «%cond:1» nun ye válida."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"La condición «%cond:1» nun garantiza que se puea obtener siempre «%strip:2»."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"El ficheru «%file:1» nun tien el formatu afechiscu. Esperábase que'l ficheru "
+"tuviera en «%exp:2» en cuenta d'en «%got:3»."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Nun se conoz la codificación «%encod:1»."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Nun se soporta la codificación «%encod:1»."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "La conversión de «%encod:1» a «%encod2:2» nun ta soportada."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "La cadena «%str:1» nun ye válida."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "La pallabr «%str:1» nun ye válida."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "La marca d'afixu «%aff:1» nun ye válida pa la pallabra «%word:2»."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+"La marca d'afixu «%aff:1» nun pue ser aplicada a la pallabra «%word:2»."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "nun ye un númberu de versión"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen tornó «%return:1»."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "El ficheru «%filter:1» nun contién filtru dalu."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "El filtru «%filter:1» nun esiste."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Confundíu pol control de versión."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "La versión d'aspell nun concueya colos requerimientos del filtru."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "La opción del filtru yá esiste."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Usar modificadores d'opción namái cola opción nomada."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modificador d'opción desconocíu."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Fallu al afitar la descripción del filtru."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Especificador d'opción vaciu."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "La opción «%option:1» seique tea especificada enantes que'l filtru."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Clave de descripción de mou «%key:1» desconocida."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Esperábase la clave «%modekey:1»."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "L'especificador de versión nun tien la clave: «aspell»."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "La versión d'aspell nun concueya colos requerimientos del mou."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Falta la espresión del mou máxicu."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Estensión vacia nel caráuter %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Fallu de «%mode:1»"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Mou desconocíu: «%mode:1»."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "Fallu de «%mode:1» al estender los moos d'Aspell (¿Memoria escosada?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: nun s'afitó l'aniciu pa la busca máxica col «%magic:2» máxicu."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: nun s'afitó'l rangu pa la busca máxica col «%magic:2» máxicu."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: nun hai disponible espresión máxica dala pal «%magic:2» máxicu."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"«%mode:1»: «%magic:2» máxicu: espresión regular incorreuta depués del "
+"especificador d'allugamientu; regexp informa: «%regerr:3»."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "«%expression:1» nun ye una espresión regular válida."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Fallu non esperáu:"
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fallu: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Fallu:"
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entrar nel mou Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "entrar nel mou HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entrar nel mou TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "entrar nel mou Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opción non válida: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " nun almite parámetru dalu."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Has especificar un parámetru pa «%s»."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Has especificar una aición"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Aición desconocida: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Fallu: Has especificar a lo menos %d parámetros pa «%s».\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Entrada non válida"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "AVISU: Nun se pue entrar nel mou Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tiempu pa cargar el pallabreru:"
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Tiempu de suxerencies: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Has especificar un nome de ficheru."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Namái se pue especificar un nome de ficheru."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Nun se pudo abrir el ficheru «%s» pa lleelu"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Mapa de tecláu non válidu: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Nun se pudo abrir el ficheru «%s» pa escribilu. El ficheru nun quedó guardáu."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Inorar"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Inorar too"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Trocar"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Trocar too"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Amestar"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Amestar en minúscules"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Encaboxar"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Colar"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "¿Tas seguru de que quies encaboxar (s/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "SsYy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Con:"
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "¡Sentímoslo, esa ye una escoyeta non válida!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Sentímoslo, anguaño «filter» nun ta implementáu.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Sentímoslo, tovía nun se pue entemecer un pallabreru principal."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Sentímoslo, anguaño «create/merge personal» nun ta implementáu.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Sentímoslo, nun se va sobreescribir «%s»"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Sentímoslo, anguaño «create/merge repl» nun ta implementáu.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "«%s» nun ye una marca válida pal comandu «munch-list»."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Usu: aspell [opciones] <comandu>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<comandu> ye ún de los siguientes:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage           amuesa un mensax d'usu breve"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help               amuesa un mensax d'aida detalláu"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <ficheru> pa comprobar un ficheru"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe            mou de compatibilidá con «ispell -a»"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config      vuelca la configuración actual al stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <clave>     amuesa el valor actual d'una opción"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    llista los diccionarios / filtros / moos disponibles"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[options] ye una de les siguientes:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list               xenera una llista de pallabres mal escrites dende la "
+"entrada estándar"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike         torna l'asemeyanza fonética de cada pallabra introducida"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+"  munch              xenera les raíces y afixos posibles de les pallabres"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]       espande les marques d'afixos"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]     llimpia un pallabreru pa que cada llinia seya una "
+"pallabra válida"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version         amuesta una llinia cola versión"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+"    amenorga'l tamañu d'un pallabreru al traviés de la compresión d'afixos"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <orixe> <destín> [<triba-norm>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    convierte d'una codificación a otra"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<mapa-norm> | <orixe> <mapa-norm> <destín>) [<triba-norm>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    fai la normalización Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nome>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    vuelca, crea o entemez un diccionariu principal, personal o de troqueos."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <triba-norm>     triba de normalización que se va usar: none, internal o "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Diccionarios disponibles:\n"
+"    Los diccionarios puen seleicionase direutamente al traviés de la\n"
+"    opción «-d» o «master». Tamién se puen escoyer indireutamente al\n"
+"    traviés de les opciones «lang», «variety» y «size».\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtros disponibles (y opciones asociaes):\n"
+"    Los filtros puen amestase o desaniciase al traviés de la opción\n"
+"    «filter».\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  filtru %s: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Moos de filtru disponibles:\n"
+"    Los moos de filtru son combinaciones reconfiguraes de filtros "
+"optimizaos\n"
+"    pa ficheros d'una triba específica. Un mou escuéyese al traviés de la\n"
+"    opción \"mode\". Esto faise implícitamente si Aspell ye pa identificar "
+"la\n"
+"    mena de ficheru per aciu de la estensión, y si ye dable, del conteníu\n"
+"    del ficheru.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Fallu: Stdin nun ye un terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Intro"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Aceutar cambeos"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Retrocesu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Borra'l caráuter anterior"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Esquierda"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Retrocede un espaciu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Drecha"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Avanza un espaciu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Aniciu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Va al aniciu de la llinia"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Fin"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Va a lo cabero de la llinia"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Suprimir"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Borra'l caráuter siguiente"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Desanicia tolos caráuteres hasta'l final de llinia"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Encaboxa esta operación"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Esto pue ser porque:"
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Falta'l campu requeríu «nome»."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Cadena vacia."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "El caráuter «%s» (U+%02X) nun pue apaecer al entamu d'una pallabra."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "El caráuter «%s» (U+%02X) ha tar siguíu por un caráuter alfabéticu."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Nun tien nengún caráuter alfabéticu."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "El caráuter «%s» (U+%02X) nun pue apaecer en mediu d'una pallabra."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"El caráuter «\\\r» (U+0D) nun pue apaecer al final d'una pallabra. Esto "
+"probablemente seya porque'l ficheru tea usando'l fin de llinia MS-DOS en "
+"cuenta del d'Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "El caráuter «%s» (U+%02X) nun pue apaecer al final d'una pallabra."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Avisu: Desaniciando afixu «%s» non válidu de la pallabra %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Avisu: Desaniciando afixu «%s» non aplicable de la pallabra %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Avisu: Omitiendo cadena %s.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "La llonxitú total ye mayor de 240 caráuteres."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Avisu: Omitiendo pallabra %s.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Recuentu posiblemente incorreutu."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Ordenación endian incorreuta."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Asemeyanza fonética incorreuta."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Versión d'asemeyanza fonética incorreuta."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Atopáronse marque d'afixos na pallabra pero nun s'afitó nengún ficheru "
+"d'afixos."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"La llonxitú total de la pallabra, contando los datos de l'asemeyanza "
+"fonética, ye mayor de 240 caráuteres."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Ha haber a lo menos una llinia «add»."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "ún d'ente ultra, fast, normal, slow o bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "nun ye nenguna de les tribes permitíes"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Nun ta disponible'l pallabreru personal."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Nun ta disponible'l pallabreru de la sesión."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Nun ta disponible'l pallabreru principal."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "una cadena d'ente «o», «O», «p» o «P»"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtru esperimental p'anubrir contestos dellimitaos"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "dellimitadores de contestu (separtaos por espacios)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "cambia ente testu visible y invisible"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtru pa omitir les cites de los mensaxes de corréu electrónicu"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caráuteres de cita del corréu electrónicu"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "númberu de caráuteres que puen apaecer enantes del caráuter de cita"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtru pa remanar documentos HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atributos HTML qu'han revisase siempre"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "etiquetes HTML de les qu'omitir siempre'l so conteníu"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtru pa remanar documentos Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtru pa remanar documentos SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atributos SGML qu'han revisase siempre"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "etiquetes SGML de les qu'omitir siempre'l so conteníu"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtru pa remanar documentos TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "comprobar comentarios TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "comandos TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtru pa remanar documentos Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "comando Texinfo de los qu'han inorase los parámetros"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "entornos Tesinfo qu'han inorase"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtru pa omitir construcciones del tipu URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mou pa comprobar comentarios C++ y lliterales de cadenes"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mou pa comprobar les llinies qu'entamen por #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mou pa omitir les cites de los mensaxes de corréu electrónicu"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mou pa comprobar documentos HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mou pa desactivar tolos filtros"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mou pa comprobar documentos Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mou pa comprobar comentarios Perl y lliterales de cadenes"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mou pa remanar documentos SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mou pa comprobar documentos TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mou pa comprobar documentos Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mou pa omitir construcciones del tipu URL (mou por defeutu)"
diff --git a/po/be.gmo b/po/be.gmo
new file mode 100644 (file)
index 0000000..124a33f
Binary files /dev/null and b/po/be.gmo differ
diff --git a/po/be.po b/po/be.po
new file mode 100644 (file)
index 0000000..89db8fc
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,1495 @@
+# translation of aspell.
+# Copyright (C) 2004 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# <>, 2004.
+# , fuzzy
+#  <>, 2004.
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.51\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-01-06 16:34+0200\n"
+"Last-Translator: Vital khilko <dojlid@mova.org>\n"
+"Language-Team: Belarusian <i18n@mova.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr ""
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr ""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr ""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr ""
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr ""
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr ""
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "канфігурацыйны файл"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "знаходжаньне канфігурацыйнага файла"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "разьмяшччэньне файлаў даньняў мовы"
+
+#: common/config.cpp:1367
+#, fuzzy
+msgid "create dictionary aliases"
+msgstr "дадатковыя слоўнікі для выкарыстаньня"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "разьмяшчэньне сьпісу словаў"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "кадаваньне чаканых даньняў"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "дадае ці выдаляе фільтар"
+
+#: common/config.cpp:1375
+#, fuzzy
+msgid "path(s) aspell looks for filters"
+msgstr "шлях(і) для прагляду фільтараў (.so/.dll/.flt);"
+
+#: common/config.cpp:1379
+#, fuzzy
+msgid "filter mode"
+msgstr "рэжым TeX."
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "дадатковыя слоўнікі для выкарыстаньня"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "разьмяшчэньне для асабістых файлаў"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ігнараваньне словаў <= n сымбаляў"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+#, fuzzy
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ігнараваньне акцэнтаў у часе праверкі словаў"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ігнараваньне рэгістра ў працэсе праверкі словаў"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ігнараваньне камандаў у захаваньні параў замены"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "дадатковыя зьвесткі для сьпісу словаў"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "вызначэньне клявіятуры ў выкарыстаньні для тыповага аналізу"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "код мовы"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "асуджана, замест гэтага выкарыстоўвайце lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "разьмяшчэньне файлаў даньняў бягучае мовы"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "асноўная назва слоўніка"
+
+#: common/config.cpp:1408
+#, fuzzy
+msgid "set module name"
+msgstr "Усталяваньне назвы модуля"
+
+#: common/config.cpp:1410
+#, fuzzy
+msgid "search order for modules"
+msgstr "Накірунак пошуку для модуляў"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "пэрсанальны канфігурацыйны файл"
+
+#: common/config.cpp:1425
+#, fuzzy
+msgid "personal dictionary file name"
+msgstr "назва асабістага файла сьпісу словаў"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "каталёг"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "назва файла сьпісу зьменаў"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "разгледзеныя складаныя словы правільныя"
+
+#: common/config.cpp:1435
+#, fuzzy
+msgid "maximum number that can be strung together"
+msgstr "максымальная колькасьць якая мусіць зьвязана разам"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "мінімальная даўжыня нутраных словаў"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "захаваньне параў замены ў часе захаваньня"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "усталяваньне прэфікса са знаходжаньня запускнога файла"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "памер сьпісу файлаў"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "шмат не выкрыстоўваўся"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "рэжым прапанаваньня"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+#, fuzzy
+msgid "use replacement tables, override sug-mode default"
+msgstr "захаваньне параў замены ў часе захаваньня"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+#, fuzzy
+msgid "search path for word list information files"
+msgstr "Шлях пошуку для сьпісаў словаў"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "стварае рэзэрвовы файл праз даданьне пашырэньня \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+#, fuzzy
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "мапаваньне клявішаў для рэжыма праверкі, адно з aspell ispell"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "адваротны накірунак у сьпісе прапановаў"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "час загрузкі й час прапановы ў рэжыме канала"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, fuzzy, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Кадаваньне \"%encod:1\" не падтрымліваецца."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr ""
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr ""
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr ""
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Файл \"%file:1\" не можа быць адкрыты"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Файл \"%file:1\" не можа быць адкрыты для чытаньня."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Файл \"%file:1\" не можа быць адкрыты для запісу."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Недапушчальная назва файла \"%file:1\"."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Файл \"%file:1\" у памылковым фармаце."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Каталёг \"%dir:1\" не можа быць адкрыты для чытаньня."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Ключ \"%key:1\" невядомы."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Значэньне для выбару \"%key:1\" не можа быць зьменена."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Ключ \"%key:1\" не %accepted:2 і таму нерэчаісны."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Значэньне \"%value:2\" не %accepted:3 і таму не рэчаісна для ключа \"%key:1"
+"\"."
+
+#: common/errors.cpp:163
+#, fuzzy
+msgid "The key \"%key:1\" is not a string."
+msgstr "Ключ \"%key:1\" невядомы."
+
+#: common/errors.cpp:171
+#, fuzzy
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Ключ \"%key:1\" невядомы."
+
+#: common/errors.cpp:179
+#, fuzzy
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Ключ \"%key:1\" невядомы."
+
+#: common/errors.cpp:187
+#, fuzzy
+msgid "The key \"%key:1\" is not a list."
+msgstr "Ключ \"%key:1\" невядомы."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Мова \"%lang:1\" невядома."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Невядомы гук \"%sl:2\"."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Мова \"%lang:1\" не падтрымліваецца."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Няма сьпісу словаў для мовы \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Чакалася мова \"%lang:1\" але атрымана \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, fuzzy, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Слова \"%word:1\" нерэчаіснае."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, fuzzy, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr "Файл \"%file:1\" у памылковым фармаце."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Невядомае кадаваньне \"%encod:1\"."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Кадаваньне \"%encod:1\" не падтрымліваецца."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Пераўтварэньне з \"%encod:1\" у \"%encod2:2\" не падтрымліваецца."
+
+#: common/errors.cpp:379
+#, fuzzy, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Слова \"%word:1\" нерэчаіснае."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Слова \"%word:1\" нерэчаіснае."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+#, fuzzy
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Файл \"%file:1\" не можа быць адкрыты для чытаньня."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+#, fuzzy
+msgid "dlopen returned \"%return:1\"."
+msgstr "%where:1: \"%filter:2\" dlopen вярнула \"%return:3\"."
+
+#: common/errors.cpp:475
+#, fuzzy, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "%where:1: Файл \"%filter:2\" не ўтрымлівае фільтараў."
+
+#: common/errors.cpp:483
+#, fuzzy, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Файл \"%file:1\" не можа быць адкрыты"
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+#, fuzzy
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Радок %line:3 Вэрсыя Aspell не мае падтрымкі "
+"фільтараў."
+
+#: common/errors.cpp:507
+#, fuzzy
+msgid "Filter option already exists."
+msgstr "%where:1: \"%filter:2\" Радок %line:3 Выбар фільтара ўжо існуе."
+
+#: common/errors.cpp:515
+#, fuzzy
+msgid "Use option modifiers only within named option."
+msgstr ""
+"%where:1: \"%filter:2\" %line:3 Выкарыстоўвайце выбар мадыфікатараў толькі у "
+"названым выбары."
+
+#: common/errors.cpp:523
+#, fuzzy
+msgid "Option modifier unknown."
+msgstr "%where:1: \"%filter:2\" %line:3 Невядомы выбар мадыфікатара."
+
+#: common/errors.cpp:531
+#, fuzzy
+msgid "Error setting filter description."
+msgstr "%where:1: \"%filter:2\" памылка усталяваньня апісаньня фільтра."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+#, fuzzy
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Радок %line:3 Вэрсыя Aspell не мае падтрымкі "
+"фільтараў."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+#: common/errors.cpp:635
+#, fuzzy, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"%where:1: \"%filter:2\" памылка пашыраных выбараў Aspell. (недахоп памяці?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, fuzzy, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "%action:1: `%expression:2' не зьяўляецца дапушчальным сталым выразам."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Памылка без апрацоўкі: "
+
+#: prog/aspell.cpp:97
+#, fuzzy, c-format
+msgid "Error: %s\n"
+msgstr "Памылка: "
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Памылка: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "рэжым э-пошты."
+
+#: prog/aspell.cpp:204
+#, fuzzy
+msgid "enter HTML mode."
+msgstr "рэжым TeX."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "рэжым TeX."
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "рэжым TeX."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Недапушчальны выбар: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " не патрабуе ніякіх парамэтраў."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Вы мусіце пазначыць парамэтар для %s"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Вы мусіце пазначыць дзеяньне"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Невядомае дзеяньне: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Вы мусіце пазначыць парамэтар для %s"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Недапушчальны ўвод"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Час загрузкі сьпісу словаў: "
+
+#: prog/aspell.cpp:929
+#, fuzzy, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Час прапанаваньня: "
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Вы мусіце пазначыць назву файла."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Немагчыма адкрыць файл \"%s\" для чытаньня"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Недапушчальнае мапаваньне клявішаў:·%s"
+
+#: prog/aspell.cpp:1020
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Немагчыма адкрыць файл \"%s\"  для запісу. Файл не захаваны."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ігнараваць"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ігнараваць усё"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Замяніць"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Замяніць усё"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Дадаць"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Дадаць малымі літарамі"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Адкінуць"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "ВЫйсьці"
+
+#: prog/aspell.cpp:1116
+#, fuzzy
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Вы сапраўды жадаеце адкінуць?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "З: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Выбачайце, але гэта памылковы выбар!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Выбачайце \"фільтар\" зараз не працаздольны.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Немагчыма зараз аб'яднаць асноўны сьпіс словаў. Выбачайце."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Выбачайце \"стварэньне/аб'яднаньне пэрсанальнага\" зараз непрацаздольнае.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Выбачайце, трэба перазапісаць \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Выбачайце пакуль гэтая апэрацыя непрацаздольная.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+#, fuzzy
+msgid "Delete the next character"
+msgstr "сымбалі дужак э.пошты"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr ""
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr ""
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr ""
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+#, fuzzy
+msgid "Does not contain any alphabetic characters."
+msgstr " не патрабуе ніякіх парамэтраў."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+#, fuzzy
+msgid "The personal word list is unavailable."
+msgstr "назва асабістага файла сьпісу словаў"
+
+#: modules/speller/default/speller_impl.cpp:248
+#, fuzzy
+msgid "The session word list is unavailable."
+msgstr "назва асабістага файла сьпісу словаў"
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+#, fuzzy
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Фільтар для хаваньня ад Aspell абмежаванага кантэксту"
+
+#: modules/filter/context-filter.info:13
+#, fuzzy
+msgid "context delimiters (separated by spaces)"
+msgstr "даданьне/выдаленьне межаў пазначаных прагаламі"
+
+#: modules/filter/context-filter.info:21
+#, fuzzy
+msgid "swaps visible and invisible text"
+msgstr "абмен бачнага і нябачнага тэксту;( пачатак з бачнага)"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "сымбалі дужак э.пошты"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "колькасьць сымбаляў якія ідуць перад сымбалем дужак"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+#, fuzzy
+msgid "HTML attributes to always check"
+msgstr "атрыбуты sgml для сталае праверкі."
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+#, fuzzy
+msgid "SGML attributes to always check"
+msgstr "атрыбуты sgml для сталае праверкі."
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+#, fuzzy
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Фільтар для вызначэньня камандаў TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "праверка камэнтараў TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "каманды TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ігнараваньне камандаў у захаваньні параў замены"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+#, fuzzy
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Фільтар для вызначэньня камандаў TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+
+#~ msgid "configured as follows"
+#~ msgstr "сканфігуравана як наступнае"
+
+#~ msgid "path(es) aspell looks for options descriptions;"
+#~ msgstr "шлях(і) для прагляду выбараў апісаньня;"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "выразаць акцэнты са сьпісу словаў"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+#~ msgstr "%where:1: Фільтар \"%filter:2\" не знаходзіцца ў шляху фільтараў."
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: не мае выбару апісаньня."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr ""
+#~ "%where:1: \"%filter:2\" Радок %line:3 зьбянтэжаны кіраваньнем вэрсыі"
+
+#~ msgid "%action:1: invalid regular expression."
+#~ msgstr "%action:1: недапушчальны сталы выраз."
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "рэжым Html/Sgml."
+
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  -l|list          produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or `all'\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s альфа вэрсыя.  Аўтарскае права 2000 Кевіна Аткінсана.\n"
+#~ "\n"
+#~ "Выкарыстаньне: aspell [выбары] <каманда>\n"
+#~ "\n"
+#~ "<каманда> адна з:\n"
+#~ "  -?|help [<выраз>] адлюстроўвае гэтае паведамленьне дапамогі\n"
+#~ "                    і дапамогу для фільтараў супаўшых з <выразам> калі\n"
+#~ "                    яны ўсталяваныя\n"
+#~ "  -c|check <файл>  правярае файл\n"
+#~ "  -a|pipe          рэжым эмуляваньня \"ispell -a\"\n"
+#~ "  -l|list          стварае сьпіс прапановаў са стандартнага ўваходу\n"
+#~ "  [dump] config [-e <expr>]  адбітак бягучае канфігурацыі ў стандартны "
+#~ "вывад\n"
+#~ "  config [+e <выраз>] <ключ>   друкуе бягучае значэньне выбару\n"
+#~ "  soundslike       вяртае гукі падобныя да ўведзенага слова\n"
+#~ "  filter           прапускае стандартны ўвод праз фільтары\n"
+#~ "  -v|version       друкуе радок вэрсыі\n"
+#~ "  dump|create|merge master|personal|repl [сьпіс словаў]\n"
+#~ "                   стварае адбітак, ці аб'ядноўвае асноўны і асабісты "
+#~ "сьпісы, ці\n"
+#~ "                   замяняе сьпіс словаў.\n"
+#~ "\n"
+#~ "  <выбар>           сталы выбар супадзеньня з назвай файла(ў) ці 'ўсё'\n"
+#~ "\n"
+#~ "[выбары] адзін з наступных выбараў:\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "  %s Filter: %s\n"
+#~ "\tNOTE: in ambiguous case prefix following options by `filter-'\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  %s Фільтар: %s\n"
+#~ "\tЗаўвага: у двухсэнсавых выпадках прэфікс сьледуе за выбарам `filter-'\n"
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Фільтар для выдаленьня дужак э.пошты"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Фільтар для кадаваньня, фільтрацыі й дэкадаваньня сымбаляў sgml"
+
+#, fuzzy
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "літары кадаваныя шматзначнымі сымбалямі (<char>:<rep>[:<rep>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "сымбаль для пазначэньня пераносаў"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "Фільтар для хаваньня ад·Aspell url, шляхоў ці падобнага"
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644 (file)
index 0000000..4b937aa
--- /dev/null
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“\e[1m/g
+s/”/\e[0m”/g
+s/‘/‘\e[1m/g
+s/’/\e[0m’/g
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644 (file)
index 0000000..7b422f1
Binary files /dev/null and b/po/ca.gmo differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..967ddce
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,1405 @@
+# GNU Aspell Catalan translation.
+# Copyright (C) 2006 Joan Sala Soler
+# This file is distributed under the same license as the GNU Aspell package
+# Joan Sala Soler <joansala@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.3\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2006-07-03 19:40+0100\n"
+"Last-Translator: Joan Sala Soler <joansala@gmail.com>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un nombre entre 0 i 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "en la forma \"<nom> <valor>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "text"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "enter"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleà"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "llista"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "o bé «true» o «false»"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un nombre enter positiu"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# per defecte:"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtre: %s\n"
+"#   %s\n"
+"#\n"
+"# s’ha configurat de la següent manera:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "fitxer principal de configuració"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "ubicació del fitxer principal de configuració"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "ubicació dels fitxers de dades d’idiomes"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "crea àlies de diccionari"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "ubicació del vocabulari principal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codificació que s’espera que tinguin les dades"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "afegeix o elimina un filtre"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "camins a on l’Aspell cerca els filtres"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mode de filtratge"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "diccionaris addicionals a utilitzar"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "ubicació per als fitxers personals"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignora les paraules <= n caràcters"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+"revisa els mots sense tenir en compte els accents -- ACTUALMENT S’IGNORA"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "revisa sense distinció de majúscules/minúscules"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignora les ordres per a desar les substitucions"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informació addicional per al vocabulari"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definició de teclat per a l’anàlisi tipogràfic"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "codi de l’idioma"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "obsolet, utilitzeu «lang» en el seu lloc"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "ubicació dels fitxers de dades de l’idioma local"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "nom base del vocabulari principal a utilitzar"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "estableix el nom del mòdul"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ordre de cerca per als mòduls"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "habilita la normalització d’Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "l’idioma actual necessita normalització d’Unicode"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "normalització d’Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "evita la normalització amb pèrdua"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "fitxer personal de configuració"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nom de fitxer del diccionari personal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "carpeta prefix"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nom de fitxer de la llista de substitucions"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considera legals totes les paraules compostes"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "nombre màxim de mots que es poden aglutinar"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "llargària mínima dels mots interiors"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "desa els parells de substitució en desar-ho tot"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "dedueix el prefix partint del camí de l’executable"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "mida del vocabulari"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "ja no s’utilitza"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mode de suggeriments"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "distància d’edició a utilitzar"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "utilitza l’anàlisi tipogràfic"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "utilitza les taules de substitució"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caràcters a afegir quan es divideix una paraula"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "només dicc. personal, de substitució i de sessió"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "camí de cerca per als fitxers d’informació"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "habilita els missatges d’advertència"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"indicador per a les marques d’afixos en el vocabulari -- ACTUALMENT S’IGNORA"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "crea els diccionaris usant compressió d’afixos"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "elimina les marques d’afixos incorrectes"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "intenta netejar el mots perquè siguin vàlids"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "calcula la semblança fònica quan sigui necessari"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "expandeix parcialment els afixos"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "omet les paraules incorrectes"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "comprova si les marques dels afixos són vàlides"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "comprova si les paraules són vàlides"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "crea una còpia afegint «.bak» al nom del fitxer"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "utilitza els offsets del byte (no del caràcter)"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "crea les combinacions arrel/afix que falten"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapa de teclat per a la revisió: aspell o ispell"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "inverteix l’ordre de la llista de suggeriments"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suggereix les substitucions possibles"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "temps de càrrega i de suggestió al mode pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Això pot voler dir que el fitxer «%s» no es pot obrir per a llegir-lo o bé "
+"que no existeix."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "El codi U+%04X d’Unicode no està implementat."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "La seqüència UTF-8 que es troba a la posició %ld no és vàlida."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "L’operació no està implementada: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "El mètode «%what:1» no està implementat a «%where:2»."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "El fitxer «%file:1» no es pot obrir"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "El fitxer «%file:1» no es pot obrir per a llegir-lo."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "El fitxer «%file:1» no es pot obrir per a escriure-hi."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "El nom de fitxer «%file:1» no és vàlid."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "El fitxer «%file:1» no té el format adequat."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "La carpeta «%dir:1» no es pot obrir per a llegir-la."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Es desconeix la clau «%key:1»."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "El valor de l’opció «%key:1» no es pot modificar."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "La clau «%key:1» no és %accepted:2 i per tant no es vàlida."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"El valor «%value:2» no és %accepted:3 i per tant no és vàlid per a la clau «%"
+"key:1»."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "La clau «%key:1» no és una cadena de text."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "La clau «%key:1» no és un enter."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "La clau «%key:1» no és un booleà."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "La clau «%key:1» no és una llista."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "La clau «%key:1» no admet cap paràmetre quan es prefixa amb «reset-»."
+
+#: common/errors.cpp:203
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "La clau «%key:1» no admet cap paràmetre quan es prefixa amb «enable-»."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"La clau «%key:1» no admet cap paràmetre quan es prefixa amb «dont-» o "
+"«disable-»."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "La clau «%key:1» no admet cap paràmetre quan es prefixa amb «clear-»."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Es desconeix l’idioma «%lang:1»."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Es desconeix la semblança fònica «%sl:2»."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "L’idioma «%lang:1» no està implementat."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "No s’ha pogut trobar cap vocabulari per a l’idioma «%lang:1»."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "S’esperava l’idioma «%lang:1», però s’ha trobat «%prev:2»."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "L’afix «%aff:1» està alterat."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "La condició «%cond:1» no és vàlida."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"La condició «%cond:1» no garanteix que sempre es pugui treure «%strip:2»."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"El fitxer «%file:1» no té el format adequat. S’esperava que el fitxer fos en "
+"«%exp:2» en comptes de «%got:3»."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Es desconeix la codificació «%encod:1»."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "La codificació «%encod:1» no està implementada."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Convertir des de «%encod:1» cap a «%encod2:2» no està implementat."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "La cadena «%str:1» no és vàlida."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "La paraula «%word:1» no és vàlida."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "La marca d’afix '%aff:1' no és vàlida per a la paraula «%word:2»."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "La marca d’afix '%aff:1' no és pot aplicar a la paraula «%word:2»."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "no és un número de versió"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen ha tornat «%return:1»."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "El fitxer «%filter:1» no conté cap filtre."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "El filtre «%filter:1» no existeix."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "El control de la versió és confús."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "La versió de l’Aspell no coincideix amb les necessitats del filtre."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "L’opció de filtratge ja existeix."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Utilitza els modificadors d'opcions només amb les opcions anomenades."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Es desconeix el modificador de l’opció."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "S’ha produït un error en establir la descripció del filtre"
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Especificador d’opció buit."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "L’opció «%option:1» possiblement s’ha especificat abans que el filtre."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Es desconeix la clau de descripció de mode «%key:1»."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "S’esperava la clau «%modekey:1»."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "A l’especificador de versió li falta la clau: «aspell»."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "La versió de l’Aspell no coincideix amb les necessitats del mode."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Falta l'expressió del mode màgic."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "L’extensió que es troba al caràcter %char:1 està buida."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "error de «%mode:1»"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Mode desconegut: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"s’ha produït un error del mode «%mode:1» mentre s’ampliaven els modes de "
+"l’Aspell (s’ha quedat sense memòria?)."
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no s’ha establert cap inici per a la cerca màgica al màgic «%"
+"magic:2»."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no s’ha establert l’abast de la cerca màgica al màgic «%magic:2»."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no hi ha cap expressió màgica disponible per al màgic «%magic:2»."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"«%mode:1»: Màgic «%magic:2»: l’expressió regular de després de "
+"l’especificador d’ubicació no és correcte; regexp informa: «%regerr:3»."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "«%expression:1» no és una expressió regular vàlida."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Error inesperat: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Error: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Error: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entra al mode Email"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "entra al mode HTML"
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entra al mode TeX"
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "entra al mode Nroff"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "L’opció no és vàlida: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " no admet cap paràmetre."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Heu d’especificar un paràmetre per a «%s»."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Heu d’especificar una acció"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Acció desconeguda: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Error: Heu d’especificar com a mínim %d paràmetres per a «%s».\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "L’entrada no és vàlida"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "ADVERTÈNCIA: No s’ha pogut entrar al mode Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Temps per carregar del vocabulari: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Temps de suggestió: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Heu d’especificar un nom de fitxer."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "No s’ha pogut obrir el fitxer \"%s\" per a llegir-lo"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "El mapa de teclat no és vàlid: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"No s’ha pogut obrir el fitxer \"%s\" per a escriure-hi. El fitxer no s’ha "
+"desat."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignora-la"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignora-les totes"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Reemplaça-la"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Reemplaça-les totes"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Afegeix-la"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Afegeix-la en minúscules"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Avorta"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Surt"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Segur que voleu avortar (s/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "SsYy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Amb: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "No és una opció vàlida! Disculpeu les molèsties."
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Actualment «filter» no està implementat. Disculpeu les molèsties.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+"Ara per ara el vocabulari principal no es pot unir. Disculpeu les molèsties."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Actualment «create/merge personal» no està implementat. Disculpeu les "
+"molèsties.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "No sobreescriuré «%s». Disculpeu les molèsties."
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+"Actualment «create/merge repl» no està implementat. Disculpeu les "
+"molèsties.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "«%s» no és una marca vàlida per a l’ordre «munch-list»."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Sintaxi: aspell [opcions] <ordre>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<ordre> és una de les següents:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage           mostra un missatge resumit d’utilització"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help               mostra un missatge detallat d’ajuda"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fitxer>  per tal de revisar un fitxer"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe            mode de compatibilitat amb «ispell -a»"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config      aboca la configuració actual a l’stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <clau>      mostra el valor actual d’una opció"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    llista els diccionaris / filtres / modes de filtratge disponibles"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[opcions] és qualsevol de les següents:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list               torna una llista de faltes a partir de l’entrada "
+"estàndard"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike         torna la semblança fònica de cada paraula introduïda"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch              genera les possibles arrels i afixos"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]       expandeix les marques d’afixos"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]     neteja un vocabulari perquè cada línia sigui un mot "
+"vàlid"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version         mostra una línia amb la versió"
+
+#: prog/aspell.cpp:2831
+#, fuzzy
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]\n"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+"    redueix la mida d’un vocabulari per mitjà de la compressió d’afixos"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    converteix des d’una codificació cap a una altra"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    realitza la normalització d’Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nom>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    aboca, crea o uneix un diccionari principal, personal o de substitucions."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr "  <norm-form>        tipus de normalització: none, internal, o strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 per Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Diccionaris disponibles:\n"
+"    Els diccionaris es poden seleccionar directament amb les opcions\n"
+"    «-d» o «master». També es poden seleccionar indirectament amb les\n"
+"    opcions «lang», «variety» i «size».\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtres disponibles (i opcions relacionades):\n"
+"    Els filtres es poden afegir o eliminar per mitjà de l’opció «filter».\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  filtre %s: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Modes de filtratge disponibles:\n"
+"    Els modes de filtratge són combinacions reconfigurades de filtres\n"
+"    optimitzades per a fitxers de determinats tipus. Un mode es pot\n"
+"    seleccionar per mitjà de l’opció «mode». Això succeeix de manera\n"
+"    implícita si l’Aspell és capaç d’identificar el tipus de fitxer a\n"
+"    partir de la seva extensió i, si és possible, del seu contingut.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Error: Stdin no és un terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Retorn"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accepta els canvis"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Retrocés"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Suprimeix l’anterior caràcter"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Esquerra"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Vés un espai endarrere"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Dreta"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Vés un espai endavant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Inici"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Vés al començament de la línia"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Fi"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Vés al final de la línia"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Suprimeix"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Suprimeix el següent caràcter"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Elimina tots els caràcters fins a l’EOL"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Avorta aquesta operació"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Segurament és degut a: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Falta el paràmetre necessari «name»."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "La cadena està buida."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+"El caràcter '%s' (U+%02X) no pot aparèixer al començament d’una paraula."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "El caràcter '%s' (U+%02X) ha d’anar seguit d’un caràcter alfabètic."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "No conté cap caràcter alfabètic."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "El caràcter '%s' (U+%02X) no pot aparèixer al mig d’una paraula."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"El caràcter '\\r' (U+0D) no pot aparèixer al final d’una paraula. Això "
+"probablement significa que el fitxer utilitza els EOL d’MS-DOS en comptes "
+"dels EOL d’Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "El caràcter '%s' (U+%02X) no pot aparèixer al final d’una paraula."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+"Advertència: S’està eliminant l’afix incorrecte '%s' de la paraula «%s».\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+"Advertència: S’està eliminant l’afix inaplicable '%s' de la paraula «%s».\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Advertència: %s S’està ometent la cadena.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "La llargària total és superior a 240 caràcters."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Advertència: %s S’està ometent la paraula.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "El recompte possiblement és incorrecte."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "L’ordenació endian no és correcte."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "La semblança fònica no és correcte."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "La versió de la semblança fònica no és correcte."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"S’han trobat marques d’afixos a la paraula però no s’ha especificat cap "
+"fitxer d’afixos."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"La llargària total de la paraula, incloent les dades de la semblança fònica, "
+"és superior a 240 caràcters."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "ultra, fast, normal, slow, o bé bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "no és cap dels tipus permesos"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "El vocabulari personal no està disponible."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "El vocabulari de la sessió no està disponible."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "El vocabulari principal no està disponible."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "una cadena d'entre 'o', 'O', 'p' o 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtre experimental que amaga contexts delimitats"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "delimitadors de context separats per espais"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "inverteix el text visible i l’amagat"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtre que omet les cites del correu electrònic"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caràcters de cita al correu electrònic"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "nre. de caràcters màxim abans del de cita"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtre per a ocupar-se dels documents HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atributs HTML que s’han de revisar sempre"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "etiquetes HTML per a ignorar-ne el contingut"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtre per a ocupar-se dels documents Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtre per a ocupar-se dels documents SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atributs SGML que s’han de revisar sempre"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "etiquetes SGML per a ignorar-ne el contingut"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtre per a ocupar-se dels documents TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "comprova els comentaris TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "ordres TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtre per a ocupar-se dels documents Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ordres Texinfo per a ignorar-ne els paràmetres"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Entorns Texinfo a ignorar"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtre que omet text del tipus URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mode de revisió de comentaris i literals C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mode de revisió de línies que comencen amb #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mode que omet el text citat del correu electrònic"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mode de revisió de documents HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mode per a inhabilitar tots els filtres"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mode de revisió de documents Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mode de revisió de comentaris i literals Perl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mode de revisió de documents SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mode de revisió de documents TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mode de revisió de documents Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mode que omet text del tipus URL (predeterminat)"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644 (file)
index 0000000..574651c
Binary files /dev/null and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..0059667
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,1416 @@
+# Czech translation of aspell
+# Copyright (C) 2004, 2007 Kevin Atkinson
+# Copyright (C) 2004, 2007 Miloslav Trmac <mitr@volny.cz>
+# This file is distributed under the same license as the aspell package.
+# Miloslav Trmac <mitr@volny.cz>, 2004, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.5\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2007-09-06 21:28+0200\n"
+"Last-Translator: Miloslav Trmac <mitr@volny.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "číslo mezi 0 a 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "ve tvaru \"<název> <hodnota>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "řetězec"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "celé číslo"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleovská hodnota"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "seznam"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "buď \"true\" nebo \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "kladné celé číslo"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# implicitní: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtr: %s\n"
+"#   %s\n"
+"#\n"
+"# nastaven následovně:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "proměnná prostředí ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "hlavní soubor nastavení"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "umístění hlavního souboru nastavení"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "umístění souboru dat o jazycích"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "vytvořit aliasy slovníků"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "umístění hlavního seznamu slov"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "kódování, ve kterém očekávat data"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "přidat nebo odstranit filtr"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "cesty, kde aspell hledá filtry"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "režim filtru"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "další slovníky, které používat"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "umístění osobních souborů"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorovat slova s <= n znaky"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "při kontrole slov ignorovat diakritiku -- MOMENTÁLNĚ IGNOROVÁNO"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "při kontrole slov nerozlišovat velikost písmen"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorovat příkazy pro uložení dvojic nahrazení"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informace navíc pro seznam slov"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definice klávesnice pro analýzu překlepů"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "kód jazyka"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "zastaralé, použijte místo toho lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "umístění místních souborů dat o jazycích"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "základní jméno hlavního slovníku, který používat"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "nastavit název modulu"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "pořadí hledání modulů"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "povolit normalizaci Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Normalizace Unicode vyžadovaná pro aktuální jazyk"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "forma normalizace Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "nepoužívat při normalizaci ztrátové konverze"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "soubor s osobním nastavením"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "název souboru s osobním slovníkem"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "adresář prefixu"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "název souboru se seznamem náhrad"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "považovat slova spojená dohromady za platná"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "maximální počet, který může být spojen dohromady"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "minimální délka vnitřních slov"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "uložit dvojice nahrazení při uložení všeho"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "nastavit prefix podle umístění programu"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "velikost seznamu slov"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "už se nepoužívá"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "režim navrhování"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "nahradit vzdálenost implicitní ze sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "používat analýzu překlepů bez ohledu na sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "používat tabulky nahrazení bez ohledu na sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "znaky, které vložit při rozdělení slova"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "používat osobní slovník, slovník náhrad a sezení"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "cesta pro soubory s informacemi o seznamech slov"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "povolit varování"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indikátor příznaků přípon v seznamech slov -- MOMENTÁLNĚ IGNOROVÁNO"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "při tvorbě slovníků používat kompresi přípon"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "odstraňovat neplatné příznaky přípon"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "pokusí se vyčistit slova, aby byla platná"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "počítat podobnost zvuku na požádání místo ukládání"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "částečně rozbalovat přípony pro lepší návrhy"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "přeskakovat neplatná slova"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "kontrolovat, jestli jsou příznaky přípon platné"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "kontrolovat, jestli jsou slova platná"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "vytvořit záložní soubor připojením \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "používat posuny v bajtech místo ve znacích"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "vytvořit chybějící kombinace kořen/přípona"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapování kláves pro režim kontroly: \"aspell\" nebo \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "obrátit pořadí seznamu návrhů"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "navrhovat možné náhrady"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "měřit čas načítání a návrhů v režimu pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"To by také mohlo znamenat, že soubor \"%s\" nelze otevřít pro čtení nebo "
+"soubor neexistuje."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Kód Unicode U+%04X není podporován."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Neplatná sekvence UTF-8 na pozici %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operace není podporována: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metoda \"%what:1\" není v \"%where:2\" implementována."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Soubor \"%file:1\" nelze otevřít"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Soubor \"%file:1\" nelze otevřít pro čtení."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Soubor \"%file:1\" nelze otevřít pro zápis."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Název souboru \"%file:1\" není platný."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Soubor \"%file:1\" není ve správném formátu."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Adresář \"%dir:1\" nelze otevřít pro čtení."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Klíč \"%key:1\" není znám."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Hodnota přepínače \"%key:1\" nemůže být změněna."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Klíč \"%key:1\" není %accepted:2 a je tedy neplatný."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Hodnota \"%value:2\" není %accepted:3 a je tedy neplatná pro klíč \"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Klíč \"%key:1\" není řetězec."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Klíč \"%key:1\" není celé číslo."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Klíč \"%key:1\" není booleovská hodnota."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Klíč \"%key:1\" není seznam."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "Klíč \"%key:1\" nemá žádné parametry, když má předponu \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "Klíč \"%key:1\" nemá žádné parametry, když má předponu \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr "Klíč \"%key:1\" nemá žádné parametry, když má předponu \"dont-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "Klíč \"%key:1\" nemá žádné parametry, když má předponu \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Jazyk \"%lang:1\" není znám."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Podobnost zvuku \"%sl:2\" není známa"
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Jazyk \"%lang:1\" není znám."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Pro jazyk \"%lang:1\" nelze najít seznam slov."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Očekával jsem jazyk \"%lang:1\", ale dostal jsem \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Přípona '%aff:1' je poškozena."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Podmínka \"%cond:1\" není platná."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr "Podmínka \"%cond:1\" nezaručuje, že \"%strip:2\" lze vždy odstranit."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Soubor \"%file:1\" není ve správném formátu. Očekávaný formát souboru je \"%"
+"exp:2\", ne \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Kódování \"%encod:1\" není známo."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Kódování \"%encod:1\" není podporováno."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Převod z \"%encod:1\" do \"%encod2:2\" není podporován."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Řetězec \"%str:1\" není platný."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Slovo \"%word:1\" není platné."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Příznak přípony '%aff:1' není pro slovo \"%word:2\" platný."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Příznak přípony '%aff:1' nelze použít na slovo \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "není číslo verze"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen vrátilo \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Soubor \"%filter:1\" neobsahuje žádné filtry."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filtr \"%filter:1\" neexistuje."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Zmaten správou verzí."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Verze Aspellu neodpovídá požadavku filtru."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Přepínač filtru již existuje."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Modifikátory přepínače používejte jen s pojmenovanými přepínači."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modifikátor přepínače není znám."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Chyba při nastavování popisu filtru."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Prázdný specifikátor přepínače."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Přepínač \"%option:1\" bylo možná zadán před filtrem."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Neznámý klíč popisu režimu \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Očekávám klíč \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Ve specifikátoru verze chybí klíč: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Verze Aspellu neodpovídá požadavku filtru."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Chybí výraz režimu magic."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Prázdná přípona u znaku %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "chyba \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Neznámý mód: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "Chyba \"%mode:1\" při rozšiřování režimů Aspellu. (nedostatek paměti?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\": pro magic \"%magic:2\" nebyl zadán začátek hledání."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\": pro magic \"%magic:2\" nebyl zadán rozsah hledání."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": pro magic \"%magic:2\" není k dispozici výraz magic."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": špatný regulární výraz po určení umístění; "
+"regexp hlásí: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" není platný regulární výraz."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Neobsloužená chyba: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Chyba: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Chyba: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "přejít do režimu E-mail."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "přejít do režimu HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "přejít do režimu TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "přejít do režimu Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Neplatný přepínač: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " nemá žádné parametry."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Musíte zadat parametr pro \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Musíte určit akci"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Neznámá akce: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Chyba: Musíte zadat alespoň %d parametrů pro \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Neplatný vstup"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "VAROVÁNÍ: Nemohu přejít do režimu Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Čas načítání seznamu slov: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Čas návrhu: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Musíte určit název souboru."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Může být zadán jen jeden název souboru."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Nemohu otevřít soubor \"%s\" pro čtení"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Neplatné mapování kláves: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Nemohu otevřít soubor \"%s\" pro zápis. Soubor nebyl uložen."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorovat"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorovat vše"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Nahradit"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Nahradit vše"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Přidat"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Přidat malá"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Přerušit"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Ukončit"
+
+# FIXME: "to abort"
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Jste si jisti, že chcete přerušit (a/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Aa"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "S: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Lituji, to je neplatná volba!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Lituji, \"filter\" momentálně není implementováno.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Zatím neumím sloučit hlavní seznam slov. Lituji."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Lituji, \"vytvořit/sloučit osobní\" momentálně není implementováno.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Lituji, nepřepíšu \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Lituji, \"vytvořit/sloučit náhr\" momentálně není implementováno.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" není platný přepínač pro příkaz \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Použití: aspell [přepínače] <příkaz>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<příkaz> je jedno z:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         zobrazit krátkou zprávu o použití"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             zobrazit podrobnou zprávu s nápovědou"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <soubor> zkontrolovat soubor"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          režim pro kompatibilitu s \"ispell -a\""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    vypíše aktuální nastavení na stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <klíč>    vypíše aktuální hodnotu přepínače"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    vypíše dostupné slovníky / filtry / režimy filtrů"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[přepínač] je libovolný z následujících:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             vypsat seznam slov s překlepy ze standardního vstupu"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       vrátí ekvivalent pro podobnost zvuku každého zadaného "
+"slova"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            vygenerovat možné kořeny slov a přípony"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     rozbaluje příznaky přípon"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   vyčistí seznam slov, aby každý řádek bylo platné slovo"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       vypíše řádek o verzi"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    zmenšit seznam slov kompresí přípon"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <z> <do> [<norm-forma>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    převede z jednoho kódování do jiného"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <z> <norm-map> <do>) [<norm-forma>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "   provést normalizaci Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<název>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    vypíše, vytvoří nebo sloučí hlavní, osobní seznam slov nebo seznam "
+"náhrad."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr "  <norm-forma>     normalizační forma, buď none, internal nebo strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Dostupné slovníky:\n"
+"    Slovníky lze vybrat přímo pomocí přepínače \"-d\" nebo \"master\".\n"
+"    Mohou také být vybrány nepřímo pomocí přepínače \"lang\", \"variety\"\n"
+"    a \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Dostupné filtry (a asociované přepínače):\n"
+"    Filtry mohou být přidány nebo odebrány pomocí přepínače \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  Filtr %s: %s\n"
+
+# FIXME: s/reconfigured/preconfigured/
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Dostupné režimy filtrů:\n"
+"    Režimy filtrů jsou přednastavené kombinace filtrů optimalizované pro\n"
+"    soubory určitého typu. Režim se volí přepínačem \"mode\". Režim je\n"
+"    zvolen implciitně, pokud Aspell může identifikovat typ souboru\n"
+"    z přípony a popřípadě obsahu souboru.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Chyba: stdin není terminál."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Přijmout změny"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Ctrl-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Odstranit předchozí znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Vlevo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Ctrl-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Přejít o místo zpět"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Vpravo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Ctrl-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Přejít o místo vpřed"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Ctrl-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Přejít na začátek řádku"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Ctrl-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Přejít na konec řádku"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Ctrl-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Odstranit následující znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Ctrl-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Zabít všechny znaky do konce řádku"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Ctrl-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Přerušit tuto operaci"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "To je pravděpodobně protože: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Vyžadované pole \"name\" chybí."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Prázdný řetězec."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Znak '%s' (U+%02X) nesmí být na začátku slova."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Znak '%s' (U+%02X) musí být následován písmenem."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Neobsahuje žádná písmena."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Znak '%s' (U+%02X) nesmí být uprostřed slova."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Znak '\\r' (U+0D) nesmí být na konci slova. Toto pravděpodobně znamená, že "
+"soubor používá konce řádků MS-DOS místo unixových."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Znak '%s' (U+%02X) nesmí být na konci slova."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Varování: Odstraňuji neplatnou příponu '%s' ze slova %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Varování: Odstraňuji nepoužitelnou příponu '%s' ze slova %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Varování: %s Přeskakuji řetězec.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Celková délka je větší než 240 znaků."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Varování: %s Přeskakuji slovo.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Možná nesprávný počet."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Špatné pořadí bajtů."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Špatná podobnost zvuku."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Špatná verze podobnosti zvuku."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Příznaky přípon nalezeny ve slově, ale nezadán soubor přípon."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Celková délka slova s daty o podobnosti zvuku je větší než 240 znaků."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Musí existovat aspoň jeden řádek \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "jedno z ultra, fast, normal, slow nebo bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "není jeden z povolených typů"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Osobní seznam slov není k dispozici."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Seznam slov sezení není k dispozici."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Hlavní seznam slov není k dispozici."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "řetězec 'o','O','p' nebo 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "experimentální filtr pro skrývání daných kontextů"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "oddělovače kontextu (oddělené mezerami)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "prohazuje viditelný a neviditelný text"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtr pro přeskakování citovaného textu v e-mailu"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "znaky citací z e-mailu"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "počet znaků, které mohou být před znakem citace"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtr pro práci s dokumenty HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atributy HTML, které vždy kontrolovat"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "tagy HTML, jejichž obsah vždy přeskakovat"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtr pro práci s dokumenty Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtr pro práci s obecnými dokumenty SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atributy SGML, které vždy kontrolovat"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "tagy SGML, jejichž obsah vždy přeskakovat"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtr pro práci s dokumenty v TeXu/LaTeXu"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "kontrolovat poznámky v TeXu"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "příkazy TeXu"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtr pro práci s dokumenty Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Příkazy Texhinfo, jejichž parametry ignorovat"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Prostředí texinfo, která ignorovat"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtr pro přeskakování konstrukcí podobných URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "režim pro kontrolu komentářů a řetězcových literálů v C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "režim pro kontrolu všech řádků začínajících na #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "režim pro přeskakování citovaného textu v e-mailech"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "režim pro kontrolu dokumentů HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "režim pro zakázání všech filtrů"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "režim pro kontrolu dokumentů Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "režim pro kontrolu komentářů a řetězcových literálů v Perlu"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "režim pro kontrolu obecných dokumentů SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "režim pro kontrolu dokumentů v TeXu/LaTeXu"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "režim pro kontrolu dokumentů Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "režim pro přeskakování konstrukcí podobných URL (implicitní režim)"
+
+#~ msgid "Empty value; only bool type option and \"rem-all\" list prefix."
+#~ msgstr ""
+#~ "Prázdná hodnota; jen přepínač typu bool a předpona seznamu \"rem-all\"."
+
+#~ msgid "Filter \"%filter:1\" could not be found in filter paths."
+#~ msgstr "Filtr \"%filter:1\" nelze najít v cestě filtrů."
+
+#~ msgid "Can't find the option file \"%option:2\"."
+#~ msgstr "Nemohu najít soubor přepínačů \"%option:2\"."
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Filtr pro eliminaci znaků citací z e-mailu"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Filtry pro kódování, filtrování a dekódování znaků sgml"
+
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "písmena kódovaná více znaky (<znak>:<náhr>[:<náhr>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "znaky používané pro kódování umístění dělení slov"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "Filtr pro skrývání url/cest a podobně před Aspellem"
+
+#~ msgid "indicator for additional flags in word lists"
+#~ msgstr "indikátor dalších příznaků v seznamech slov"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "odstranit ze seznamu slov diakritiku"
+
+#~ msgid "use jump tables when creating dictionaries"
+#~ msgstr "při tvorbě slovníků používat tabulky skoků"
+
+#~ msgid "Affix compression is currently incompatible with soundslike lookup."
+#~ msgstr ""
+#~ "Komprese přípon momentálně není kompatibilní s vyhledáváním podle "
+#~ "podobnosti zvuku."
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644 (file)
index 0000000..32aa309
Binary files /dev/null and b/po/da.gmo differ
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..ce65d4d
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1400 @@
+# Danish translation of Aspell.
+# Copyright © 2010, Kevin Atkinson, Jacob Sparre Andersen, Joe Hansen.
+# This file is distributed under the same license as the Aspell package.
+# Jacob Sparre Andersen <sparre@nbi.dk>, 2004.
+# Joe Hansen <joedalton2@yahoo.dk>, 2010.
+# Korrekturlæst Lars Christian Jensen <larschrjensen@gmail.com>, 2010.
+#
+# affix -> affiks (fællesbetegnelse for præfikser, infikser og suffikser)
+# check -> tjek (alternativ kontrollere)
+# exists -> findes
+# lists -> viser
+# mode -> tilstand (var tidligere modus)
+# modifier -> modifikator
+# soundslike -> soundslike (udtale)
+#
+# /" -> »«
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2010-05-08 12:51+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "et tal mellem 0 og 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "på formen »<navn> <værdi>«"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "streng"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "heltal"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "logisk"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "liste"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "enten »true« (sandt) eller »false« (falsk)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "et positivt heltal"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# standardværdi: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# sat op som følger:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF miljøvariabel"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "hovedopsætningsfil"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "placering af hovedopsætningsfil"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "placering af sprogdatafiler"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "generer ordbogsaliaser"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "placering af hovedordliste"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "forventet tekstkodning for data"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "tilføjer eller fjerner et filter"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "katalog(er) aspell leder efter filtre i"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "filtertilstand"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "yderligere ordbøger at bruge"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "placering af personlige filer"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "kun versalfølsom for ord på flere end n tegn"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignorer accenter ved stavekontrol -- IGNORERES FOR TIDEN"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorer forskel på store og små bogstaver ved stavekontrol"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorer ordrer om at gemme udskiftningspar"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "yderligere oplysninger til ordlisten"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "tastaturudlægning til brug ved tastefejlsanalyse"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "sprogkode"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "forældet, brug »lang« i stedet for"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "placering af lokale sprogdatafiler"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "navn på hovedordbogen som bruges"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "sæt modulnavn"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "søgerækkefølge for moduler"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "aktiver unicode-normalisering"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Unicode-normalisering kræves for det nuværende sprog"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Unicode-normaliseringsform: »none«, »nfd«, »nfc« eller »comp«"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "undgå informationstab ved normalisering"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "personlig opsætningsfil"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "filnavn for personlig ordbog"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "foranstil katalog"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "udskiftningslistes filnavn"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "regn alle ordsammensætninger for korrekte ord"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "største antal ord der kan sættes sammen"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "mindste længde af enkeltordene i et sammensat ord"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "gem udskiftningsliste ved »gem alt«"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "vælg foranstillet katalognavn udfra hvor programmet ligger"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "ordlistens størrelse"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "bruges ikke længere"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "forslagstilstand"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "redigeringsafstand (overstyr standardvalget)"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "brug tastefejlsanalyse (overstyr standardvalget)"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "brug udskiftningstabeller (overstyr standardvalget)"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "tegn der indsættes når et ord deles"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "brug personlige, erstatnings- og midlertidige ordbøger"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "søgesti for filer med ordlisteoplysninger"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "aktiver advarsler"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "markør for affiksflag i ordlister -- IGNORERES FOR TIDEN"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "brug affikskomprimering når der laves ordbøger"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "fjern ugyldige affiksflag"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "forsøger at rense ord, så de er gyldige"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "beregn soundslike (udtale) når der er behov fremfor lagring"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "udfold affikser delvist for at generere bedre forslag"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "spring ugyldige ord over"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "undersøg om affiksflag er gyldige"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "undersøg om ord er gyldige"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "lav sikkerhedskopi ved at tilføje ».bak« til filnavnet"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "regn positioner i bytes i stedet for i tegn"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "generer manglende rod-affiks-kombinationer"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "genvejstaster for stavekontrol; »aspell« eller »ispell«"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "inverter rækkefølgen i foreslagslisten"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "foreslå mulige erstatninger"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "tag tid på indlæsning og foreslag i kanaltilstand"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Det kunne også betyde at filen »%s« ikke findes eller at du ikke har lov til "
+"at læse i den."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Unicode-positionen U+%04X er ikke understøttet."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Ugyldig UTF-8-sekvens på position %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Uunderstøttet operation: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metoden »%what:1« er ikke implementeret i »%where:2«."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Filen »%file:1« kan ikke åbnes"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Der kan ikke læses fra filen »%file:1«."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Der kan ikke skrives til filen »%file:1«."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Filnavnet »%file:1« er ikke korrekt."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Filen »%file:1« har ikke det rette format."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Der kan ikke læses fra kataloget »%dir:1«."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Tilvalget »%key:1« er ukendt."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Værdien for tilvalget »%key:1« kan ikke ændres."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Nøglen »%key:1« er ikke %accepted:2 og derfor ugyldig."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Værdien »%value:2« er ikke %accepted:3 og derfor ugyldig for nøglen »%key:1«."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Nøglen »%key:1« er ikke en streng."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Nøglen »%key:1« er ikke et heltal."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Nøglen »%key:1« er ikke sand/falsk."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Nøglen \"%key:1\" er ikke en liste."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Nøglen »%key:1« tager ikke nogle parametre, når den er foranstillet med "
+"»reset-«."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Nøglen »%key:1« tager ikke nogle parametre, når den er foranstillet med "
+"»enable-«."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Nøglen »%key:1« tager ikke nogle parametre, når den er foranstillet med "
+"»dont-« eller »disable-«."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Nøglen »%key:1« tager ikke nogle parametre, når den er foranstillet med "
+"»clear-«."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Sproget »%lang:1« er ukendt."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "soundslikereglerne (udtale) »%sl:2« er ukendte."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Kan ikke håndtere sproget »%lang:1«."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Kan ikke finde nogle ordlister for sproget »%lang:1«."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Forventede sproget »%lang:1«, men fandt »%prev:2«."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Affikset »%aff:1« er korrupt."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Betingelsen »%cond:1« er ugyldig."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr "Betingelsen »%cond:1« garanterer ikke at »%strip:2« altid kan fjernes."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Filen »%file:1« har ikke det rette format. Forventede at filen ville være "
+"formatteret som »%exp:2« og ikke som »%got:3«."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Tegnkodningen »%encod:1« er ukendt."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Kan ikke håndtere tegnkodningen »%encod:1«."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Kan ikke konvertere fra »%encod:1« til »%encod2:2«."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Strengen »%str:1« er ugyldig."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Ordet »%word:1« er ugyldigt."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Affiksflaget »%aff:1« er ugyldigt for ordet »%word:2«."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Affiksflaget »%aff:1« kan ikke bruges på ordet »%word:2«."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "ikke et versionsnummer"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "systemkaldet dlopen returnerede »%return:1«."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Filen »%filter:1« indeholder ikke nogle filtre."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filtret »%filter:1« findes ikke."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Forvirret af versionsstyring."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspell-versionen svarer ikke til filterets krav."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Filterindstilling findes allerede."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Brug kun indstillingsmodifikator indenfor navngivet tilvalg."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Indstillingsmodifikator ukendt."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Fejl ved angivelse af filterbeskrivelse."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Tom indstillingsangiver."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Indstilling »%option:1« er muligvis angivet før filter."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Ukendt tilstandsbeskrivelsestast »%key:1«."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Forventer »%modekey:1« tast."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Versionangivers manglende tast: »aspell«."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell version svarer ikke til tilstandens krav."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Mangler magisk tilstandsudtryk."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Tom filendelse ved tegn %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "»%mode:1-fejl«"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Ukendt tilstand: »%mode:1«."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"»%mode:1« fejl under udvidelse af Aspell-tilstande (ikke nok hukommelse?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "»%mode:1«: Ingen start for magisk søgning angivet for magi »%magic:2«."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"»%mode:1«: Intet interval for magisk søgning angivet for magi »%magic:2«."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "»%mode:1«: Intet magisk udtryk tilgængelig for magi »%magic:2«."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"»%mode:1«: Magi »%magic:2«: Dårligt regulært udtryk efter at stedangiver; "
+"regexp rapporterer: »%regerr:3«."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "»%expression:1« er ikke et gyldigt regulært udtryk."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Uhåndteret fejl: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fejl: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Fejl: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "skift til e-post-tilstand."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "skift til HTML-tilstand."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "skift til TeX-tilstand."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "skift til Nroff-tilstand."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Ugyldigt tilvalg: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " tager ikke nogle argumenter."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Du skal angive et argument til »%s«."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Du er nødt til at angive en handling"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Ukendt handling: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Fejl: Du skal angive mindst %d parametre til »%s«.\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Ugyldige inddata"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "ADVARSEL: Kan ikke skifte til Nroff-tilstand: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tid brugt på at indlæse ordliste: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Forslagstid: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Du bliver nødt til at angive et filnavn."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Kun et filnavn må angives."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Kunne ikke læse fra filen »%s«"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Ugyldig tastaturafbildning: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Kunne ikke skrive til filen »%s«. Filen er ikke gemt."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorer alt"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Erstat"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Erstat alt"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Tilføj"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Tilføj skrevet med småt"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Afbryd"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Afslut"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Er du sikker på at du vil afbryde? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Jj"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Med: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Beklager. Det er ikke et gyldigt valg."
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Beklager. »Filter« er endnu ikke implementeret.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Kan endnu ikke sammenflette en hovedordliste. Beklager."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Beklager »opret/sammenføj personlig« er aktuelt ikke implementeret.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Beklager. Vil ikke overskrive »%s«"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Beklager »opret/sammenføj repl« er aktuelt ikke implementeret.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "»%s« er ikke et gyldigt flag for kommandoen munch-list."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Brug: aspell [tilvalg] <kommando>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<kommando> er en af:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         viser en kort besked om brugen"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             viser en detaljeret hjælpebesked"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fil>   for at kontrollere en fil"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          Kompatibilitetstilstand »ispell -a«"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+"  [dump] config    sender (dumps) den aktuelle konfiguration til stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <tast>    udskriver den aktuelle værdi på et tilvalg"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    viser tilgængelige ordbøger / filtre / filtertilstande"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[tilvalg] er en af de følgende:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             producerer en liste over stavefejl fra standardinddata"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       returnerer de lyde som svarer til hvert ord indtastet"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            generer mulige rødder og affikser"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     udfolder affiksflag"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr "  clean [strict]   rydder en ordliste så hver linje er et gyldigt ord"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       viser en versionslinje"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    reducer størrelsen på en ordliste via affikspakning"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <fra> <til> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    konverterer fra en kodning til en anden"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <fra> <norm-map> <til>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    gennemfør unicode-normalisering"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<navn>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    sletter, opretter eller sammenføjer en master, personlig eller "
+"erstatningsordbog."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      normaliseringsform der skal bruges, enten none, internal "
+"eller strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011, Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Tilgængelige ordbøger:\n"
+"    Ordbøgerne kan vælges direkte med »-d«- og »master«-\n"
+"    tilvalgene. De kan også vælges indirekte med »lang«-,\n"
+"    »variety«- og »size«-tilvalgene.\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Tilgængelige filtre (og tilknyttede tilvalg):\n"
+"    Filtre kan tilføjes eller fjernes via tilvalget »filter«.\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Tilgængelige filtertilstande:\n"
+"    Filtertilstande er rekonfigurerbare kombinationer af filtre optimeret\n"
+"    for filer af en specifik type. En tilstand vælges via tilvalget »mode«.\n"
+"    Dette vil ske automatisk hvis Aspell er i stand til at genkende\n"
+"    filtypen ud fra endelsen, og muligvis indholdet af filen.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Fejl: »Stdin« er ikke en terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accepter ændringer"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Slet baglæns"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Slet forrige tegn"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Venstre"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Ryk et tegn til venstre"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Højre"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Ryk et tegn til højre"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Ryk til starten af linjen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Ryk til slutningen af linjen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Slet næste tegn"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Slet resten af linjen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Afbryd"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Det er sandsynligvis fordi: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Det obligatoriske felt »name« (navn) mangler."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Tom streng."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Et ord må ikke begynde med tegnet '%s' (U+%02X)."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Tegnet '%s' (U+%02X) skal følges af et bogstav."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Indeholder ingen bogstaver."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Tegnet '%s' (U+%02X) må ikke forekomme indeni et ord."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Tegnet '\\r' (U+0D) må ikke fremgå af slutningen af ordet. Det betyder "
+"sikkert at filen bruger MS-DOS EOL fremfor Unix EOL."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Et ord må ikke slutte med tegnet '%s' (U+%02X)."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Advarsel: Fjerner ugyldig affiks '%s' fra ordet %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Advarsel: Fjerner ubrugbar affiks '%s' fra ordet %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Advarsel: %s Springer streng over.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Den samlede længde er større end 240 tegn."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Advarsel: %s Springer ord over.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Muligvis en forkert optælling."
+
+# endian er, så vidt jeg ved, byte rækkefølge
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Forkert endian (byte) rækkefølge."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Forkert soundslike (udtale)."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Forkert version af soundslike (udtale)."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Affiksflag fundet i ord men ingen affiksfil angivet."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Den totale ordlængde, med soundslike (udtale) data, er længere end 240 tegn."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Der skal mindst være en »tilføj linje«."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "en af ultra, hurtig, normal, langsom eller dårlig stavning"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "er ikke en af det tilladte typer"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Den personlige ordliste er utilgængelig."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Sessionsordlisten er utilgængelig."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Hovedordlisten er utilgængelig."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "en string af 'o','O','p',eller 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "eksperimentelt filter til skjulning af afgrænset kontekst"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "kontekstafgrænsere (adskilt af mellemrum)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "ombyt synlig og usynlig tekst"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filter til at springe citeret tekst i e-post-beskeder over med"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "e-post-anførelsestegn"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "numeriske tegn som kan ses før anførelsestegnet"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filter til at håndtere HTML-dokumenter"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML-attributter for altid at tjekke"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTMl-mærker for altid at springe indholdet over"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filter til at håndtere Nroff-dokumenter"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filter til at håndtere generiske SGML-/XML-dokumenter"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML-attributter for altid at tjekke"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML-mærker for altid at springe indholdet over"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Filter til at håndtere TeX- og LeTeX-dokumenter"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "tjek TeX-kommentarer"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX-kommandoer"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "Filter til at håndtere Texinfo-dokumenter"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Kommandoer i Texinfo der ignorerer parametrene på"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Miljøer i Texinfo der skal ignoreres"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filter til at springe URL-lignende konstruktioner over med"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "tilstand for tjek af C++-kommentarer og slåfejl i strenge"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "tilstand for tjek af linjer der starter med #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "tilstand for at springe citeret tekst i e-post-beskeder over."
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "tilstand for tjek af HTML-dokumenter"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "tilstand for deaktivering af alle filtre"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "tilstand for tjek af Nroff-dokumenter"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "tilstand for tjek af Perl-kommentarer og slåfejl i strenge"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "tilstand for tjek af generiske SGML-/XML-dokumenter"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "tilstand for at tjekke TeX- og LeTeX-dokumenter"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "tilstand for at tjekke Texinfo-dokumenter"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+"tilstand for at springe URL-lignende konstruktioner over med "
+"(standardtilstand)"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644 (file)
index 0000000..61c234f
Binary files /dev/null and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..daba5dc
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1400 @@
+# German translation for aspell.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the aspell package.
+# Roland Illig <roland.illig@gmx.de>, 2004.
+# Roland Illig <roland.illig@gmx.de>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-11-24 13:19+0100\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "Eine Zahl zwischen 0 und 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "In der Form »<Name> <Wert>«"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "Leere Zeichenkette."
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "Ganzzahl"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "Wahrheitswert"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "Liste"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "Entweder »true« (wahr) oder »false« (falsch)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "Eine positive ganze Zahl"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# Standardwert: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# wie folgt konfiguriert:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF Umgebungsvariable"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "Hauptkonfigurationsdatei"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "Name der Hauptkonfigurationsdatei"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "Name der Sprachdatendateien"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "Wörterbuchaliase erzeugen"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "Name der Haupt-Wortliste"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "Codierung, in der die Daten erwartet werden"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "fügt einen Filter hinzu oder entfernt ihn"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "Pfad(e), in denen aspell nach Filtern sucht"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "Filtermodus"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "zusätzlich zu benutzende Wörterbücher"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "Name für persönliche Dateien"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignoriere Wörter mit <= n Zeichen"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignoriere Akzente beim Überprüfen -- MOMENTAN WIRKUNGSLOS"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignoriere Groß- und Kleinschreibung beim Überprüfen"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignoriere Kommandos, Ersetzungspaare zu speichern"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "zusätzliche Information für die Wörterliste"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "Tastaturdefinition für die Tippfehleranalyse"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "Sprachcode"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "veraltet, benutzen Sie »lang« stattdessen"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "Name der lokalen Sprachdatendateien"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "Vorname des Hauptwörterbuchs"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "Modulname festlegen"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "Suchreihenfolge für Module"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "Unicodenormalisierung aktivieren"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Unicodenormalisierung wird für die aktuelle Sprache benötigt"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Form der Unicodenormalisierung: »none«, »nfd«, »nfc«, »comp«"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "Verlustbehaftete Umwandlungen beim Normalisieren vermeiden"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "persönliche Konfigurationsdateien"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "Name des persönlichen Wörterbuchs"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "Präfixverzeichnis"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "Dateiname der Ersetzungsliste"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "zusammengesetzte Wörter akzeptieren"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "maximale Anzahl an zusammengesetzten Wörtern"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "minimale Länge der inneren Wörter"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "bei »Alles speichern« auch die Ersetzungspaare speichern"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "Präfix basierend auf dem Namen des Programms festlegen"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "Größe der Wortliste"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "Wird nicht mehr benutzt"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "Vorschlagmodus"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "Distanz festlegen und damit den Standardwert »sug-mode« überschreiben"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "Tippfehleranalyse durchführen statt Vorschlagsmodus"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "Ersetzungstabellen benutzen statt Vorschlagsmodus"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "einzufügende Zeichen, wenn ein Wort getrennt wird"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "benutze persönliche, Ersetzungs- und Sitzungswörterbücher"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "Suchpfad für Wortlisteninformationsdateien"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "aktiviere Warnungen"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "Indikator für Endungsflags in Wortlisten -- MOMENTAN WIRKUNGSLOS"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "Endungen beim Erzeugen von Wörterbüchern komprimieren"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "ungültige Endungsflags entfernen"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "Wörter so bereinigen, dass sie gültig sind"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "Wortklang bei Bedarf berechnen statt zu speichern"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "Anhänge für bessere Vorschläge teilweise erweitern"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "Ungültige Wörter überspringen"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "Prüfen, ob die Endungsflags gültig sind"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "Prüfen, ob die Wörter gültig sind"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "Backupdatei mit der Erweiterung ».bak« anlegen"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "Byteoffsets statt Zeichenoffsets verwenden"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "Fehlende Stamm-Endung-Kombinationen erzeugen"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "Tastenbelegung für Prüfmodus: »aspell« oder »ispell«"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "Reihenfolge der Vorschlagsliste umdrehen"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "mögliche Ersetzungen vorschlagen"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "Zeit für das Laden und Vorschlagen im Pipe-Modus messen"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Das könnte auch heißen, dass die Datei »%s« nicht zum Lesen geöffnet werden "
+"konnte oder nicht existiert."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Das Unicodezeichen an der Stelle U+%04X wird nicht unterstützt."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Falsche UTF-8-Folge an Position %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operation nicht unterstützt: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Die Methode »%what:1« ist in »%where:2« nicht implementiert."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Die Datei »%file:1« kann nicht geöffnet werden"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Die Datei »%file:1« kann nicht zum Lesen geöffnet werden."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Die Datei »%file:1« kann nicht zum Schreiben geöffnet werden."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Der Dateiname »%file:1« ist ungültig."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Die Datei »%file:1« hat nicht das richtige Format."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Das Verzeichnis »%dir:1« kann nicht zum Lesen geöffnet werden."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Der Schlüssel »%key:1« ist unbekannt."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Der Wert der Option »%key:1« kann nicht geändert werden."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Der Schlüssel »%key:1« wird nicht %accepted:2 und ist daher ungültig."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Der Wert »%value:2« wird nicht %accepted:3 und ist daher für den Schlüssel »%"
+"key:1« ungültig."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Der Schlüssel »%key:1« ist keine Zeichenkette."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Der Schlüssel »%key:1« ist keine Ganzzahl."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Der Schlüssel »%key:1« ist kein Wahrheitswert."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Der Schlüssel »%key:1« ist keine Liste."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Der Schlüssel »%key:1« kann keine Parameter haben, wenn ein »reset-« "
+"vorangestellt ist."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Der Schlüssel »%key:1« kann keine Parameter haben, wenn ein »enable-« "
+"vorangestellt ist."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Der Schlüssel »%key:1« kann keine Parameter haben, wenn ein »dont-« oder "
+"»disable-« vorangestellt ist."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Der Schlüssel »%key:1« kann keine Parameter haben, wenn ein »clear-« "
+"vorangestellt ist."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Die Sprache »%lang:1« ist unbekannt."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Der Wortklang »%sl:2« ist nicht bekannt."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Die Sprache »%lang:1« wird nicht unterstützt."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Für die Sprache »%lang:1« können keine Wortlisten gefunden werden."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Sprache »%lang:1« erwartet, aber »%prev:2« bekommen."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Endung »%aff:1« ist kaputt"
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Die Bedingung »%cond:1« ist ungültig."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Die Bedingung »%cond:1« garantiert nicht, dass »%strip:2« immer abgetrennt "
+"werden kann."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Die Datei »%file:1« hat nicht das richtige Format. Sie wurde in »%exp:2«, "
+"nicht in »%got:3« erwartet."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Die Codierung »%encod:1« ist nicht bekannt."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Die Codierung »%encod:1« wird nicht unterstützt."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Die Umwandlung von »%encod:1« nach »%encod:2« wird nicht unterstützt."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Die Zeichenkette »%str:1« ist ungültig."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Das Wort »%word:1« ist ungültig."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Das Endungsflag »%aff:1« ist für das Wort »%word:2« ungültig."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+"Das Endungsflag »%aff:1« kann nicht auf das Wort »%word:2« angewendet werden."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "Dies ist keine Versionsnummer"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen gab »%return:1« zurück."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Die Datei »%filter:1« enthält keine Filter."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Der Filter »%filter:1« existiert nicht."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Von der Versionskontrolle verwirrt."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspell-Version passt nicht zu den Anforderungen des Filters."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Filteroption existiert bereits."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Benutzen Sie Optionsmodifikatoren nur innerhalb benannter Optionen."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Optionsmodifikator unbekannt."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Fehler beim Festlegen der Filterbeschreibung."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Leere Optionsangabe."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Die Option »%option:1« wurde möglicherweise vor dem Filter angegeben."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Unbekannter Modusbeschreibungsschlüssel »%key:1«."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Schlüssel »%modekey:1« erwartet."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Versionsangabe fehlt: »aspell«."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell-Version passt nicht zu den Anforderungen des Filters."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Der »Magic Modus«-Ausdruck fehlt."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Leere Erweiterung beim Zeichen »%char:1«."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "»%mode:1«: Fehler"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Unbekannter Modus: »%mode:1«."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"»%mode:1« Fehler beim Erweitern der Aspell-Optionen. (Zu wenig Speicher?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "»%mode:1«: Kein Anfang für magische Suche »%magic:2« angegeben."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "»%mode:1«: Kein Bereich für magische Suche »%magic:2« angegeben."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "»%mode:1«: Kein magischer Ausdruck für »%magic:2« verfügbar."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"»%mode:1«: Magic »%magic:2«: Ungültiger regulärer Ausdruck nach Ortsangabe; "
+"regexp sagt dazu: »%regerr:3«."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "»%expression:1« ist kein gültiger regulärer Ausdruck."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Unbahandelter Fehler: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fehler: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Fehler: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "In E-Mail-Modus wechseln."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "In HTML-Modus wechseln."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "In TeX-Modus wechseln."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "In nroff-Modus wechseln."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Ungültige Option: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " hat keine Parameter."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Sie müssen einen Parameter für »%s« angeben"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Sie müssen eine Aktion angeben"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Unbekannte Aktion: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Fehler: Sie müssen mindestens %d Parameter für »%s« angeben.\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Ungültige Eingabe"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "WARNUNG: Kann nicht in den nroff-Modus umschalten: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Zeit, um die Wortliste zu laden: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Vorschlagszeit: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Sie müssen einen Dateinamen angeben."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Es kann nur einen (Dateinamen) geben."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Konnte die Datei »%s« nicht zum Lesen öffnen"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Ungültige Tastaturbelegung: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Konnte die Datei »%s« nicht zum Schreiben öffnen. Datei nicht gespeichert."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Alle ignorieren"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Alle ersetzen"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "In Kleinbuchstaben hinzufügen"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abbrechen"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Beenden"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Sind Sie sicher, dass Sie abbrechen wollen (j/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Jj"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Mit: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Sorry, das ist eine ungültige Auswahl!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Sorry, »filter« ist noch nicht implementiert.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Sorry, kann keine Master-Wortliste vereinigen."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Sorry, »Persönliche Liste anlegen/vereinigen« ist noch nicht implementiert.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Sorry, aber ich werde »%s« nicht überschreiben"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+"Sorry, »Ersetzungsliste anlegen/vereinigen« ist noch nicht implementiert.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "»%s« ist keine gültige Option für den »munch-list«-Befehl."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Aufruf: aspell [Optionen] <Befehl>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<Befehl> ist eins von:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         Einen kurzen Hilfetext anzeigen"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             Einen ausführlichen Hilfetext anzeigen"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <file>  Eine Datei überprüfen"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          Kompatibilitätsmodus für »ispell -a«"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+"  [dump] config    Gibt die aktuelle Konfiguration auf der Standardausgabe "
+"aus"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <key>     Gibt den aktuellen Wert einer Option aus"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    Listet verfügbare Wörterbücher / Filter / Filtermodi auf"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[options] sind beliebig viele der folgenden:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             Liste von falschgeschriebenen Wörtern von der "
+"Standardeingabe ausgeben"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr "  soundslike       Gibt den Wortklang zu jedem eingegebenen Wort aus"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            Mögliche Wortstämme und -endungen erzeugen"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     Endungskennzeichen erweitern"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   Wortliste aufräumen, so dass jede Zeile ein gültiges Wort "
+"ist"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       Gibt eine Zeile mit Versionsinformationen aus"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    Größe einer Wortliste mit Suffixkompression reduzieren"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <von> <nach> [<Normalform>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    Konvertiert von einer Codierung in eine andere"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <von> <norm-map> <nach>) [<Normalform>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "     Unicodenormalisierung aktivieren"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<Wortliste>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    Haupt- (master), persönliche (personal) oder Ersetzungs- (replacement)-\n"
+"    Wortliste ausgeben (dump), erzeugen (create) oder mischen (merge)."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <Normalform>     Zu benutzende Normalisierungsform: »none«, »internal« "
+"oder »strict«"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Verfügbare Wörterbücher:\n"
+"    Sie können Wörterbücher direkt mit der Option »-d« oder »master« "
+"auswählen.\n"
+"    Andere Möglichkeiten sind die Optionen »lang«, »variety« und »size«.\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Verfügbare Filter (un zugehörige Optionen):\n"
+"    Sie können Filter mit der »filter«-Option hinzufügen oder entfernen.\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s-Filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Verfügbare Filtermodi:\n"
+"    Filtermodi sind Kombinationen verschiedener Filter, die für bestimmte\n"
+"    Dateitypen optimiert sind. Sie können den Filtermodus mit der »mode«-\n"
+"    Option festlegen. Andernfalls versucht Aspell, den richtigen Dateityp\n"
+"    und damit den Filtermodus anhand der Dateiendung und (möglicherweise)\n"
+"    dem Dateiinhalt festzustellen.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Fehler: Standardeingabe ist kein Terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Änderungen akzeptieren"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Löschtaste"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Strg-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Vorheriges Zeichen löschen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Links"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Strg-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Ein Zeichen nach links"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Rechts"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Strg-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Ein Zeichen nach rechts"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Pos1"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Strg-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Zum Zeilenanfang"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Ende"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Strg-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Zum Zeilenende"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Entf"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Strg-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Nächstes Zeichen löschen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Strg-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Alle Zeichen bis zum Zeilenende löschen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Strg-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Diese Aktion abbrechen"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Der Grund ist wahrscheinlich: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Das benötigte Feld »name« fehlt."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Leerer String."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Das Zeichen »%s« (U+%02X) darf nicht am Anfang eines Wortes stehen."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Nach dem Zeichen »%s« (U+%02X) muss ein alphabetisches Zeichen folgen."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Enthält keine Buchstaben."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Das Zeichen »%s« (U+%02X) darf nicht in der Mitte eines Wortes stehen."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Das Zeichen »\\r« (U+0D) darf nicht am Ende eines Wortes vorkommen. Das "
+"könnte daran liegen, dass die Datei den MS-DOS-Zeilenumbruch anstelle des "
+"UNIX-Zeilenumbruchs benutzt. "
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Das Zeichen »%s« (U+%02X) darf nicht am Ende eines Wortes stehen."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Warnung: Entferne ungültige Endung »%s« vom Wort »%s«.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Warnung: Entferne nicht anwendbare Endung »%s« vom Wort »%s«.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Warnung: »%s«: Überspringe Zeichenkette.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Das Wort ist insgesamt länger als 240 Zeichen."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Warnung: »%s«: Überspringe Wort.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Möglicherweise falsche Anzahl."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Falsche Endianordnung."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Falscher Wortklang."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Falsche Wortklangversion."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Endungsflags im Wort gefunden, aber keine Endungsdatei angegeben."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Die Gesamtlänge des Wortes, inclusive Wortklangdaten, ist größer als 240 "
+"Zeichen."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Es muss mindestens eine »add«-Zeile geben."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+"eins von »ultra«, »fast«, »normal«, »slow« (langsam), oder »bad-spellers«"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "ist von keinem der erlaubten Typen"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Die persönliche Wortliste ist nicht verfügbar."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Die Sitzungs-Wortliste ist nicht verfügbar."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Die Haupt-Wortliste ist nicht verfügbar."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "Eine Zeichenkette aus 'o', 'O', 'p' oder 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Experimenteller Filter, um begrenzte Abschnitte zu verstecken"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "Kontextbegrenzer (durch Leerzeichen getrennt)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "Vertauscht sichtbaren und unsichtbaren Text"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "Filter, um zitierten Text in Emails zu überspringen"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "E-Mail-Zitatzeichen"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "Anzahl der Zeichen, die vor dem Anführungszeichen kommen können"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "Filter, um HTML-Dokumente zu behandeln"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML-Attribute, die immer überprüft werden."
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML-Tags, deren Inhalt immer übersprungen wird"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "Filter, um nroff-Dokumente zu behandeln"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "Filter, um generische SGML/XML-Dokumente zu behandeln"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML-Attribute, die immer überprüft werden."
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML-Tags, deren Inhalt immer übersprungen wird"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Filter, um TeX/LaTeX-Befehle zu erkennen"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "TeX-Kommentare überprüfen"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX-Befehle"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "Filter, um Texinfo-Dokumente zu behandeln"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Texinfo-Befehle, deren Parameter ignoriert werden"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "zu ignorierende Texinfo-Umgebung"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "Filter, um URL-artige Konstrukte zu überspringen"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "Modus, um C++-Kommentare und Zeichenkettenliterale zu überprüfen"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "Modus, um alle Zeilen zu überprüfen, die mit »#« beginnen"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "Modus, um zitierten Text in Emails zu überspringen"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "Modus, um HTML-Dokumente zu überprüfen"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "Modus, um alle Filter zu deaktivieren"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "Modus, um nroff-Dokumente zu überprüfen"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "Modus, um Perl-Kommentare und Zeichenkettenliterale zu überprüfen"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "Modus, um generische SGML/XML-Dokumente zu überprüfen"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Filter, um TeX/LaTeX-Dokumente zu überprüfen"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "Modus, um Texinfo-Dokumente zu überprüfen"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "Modus, um URL-artige Konstrukte zu überspringen (Standardmodus)"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644 (file)
index 0000000..fedb6a0
--- /dev/null
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644 (file)
index 0000000..a9647fc
--- /dev/null
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
new file mode 100644 (file)
index 0000000..c57f9f7
Binary files /dev/null and b/po/en_GB.gmo differ
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644 (file)
index 0000000..1f13dbe
--- /dev/null
@@ -0,0 +1,1536 @@
+# English (British) translation.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Gareth Owen <gowen72@yahoo.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60-pre1\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-07-25 19:46-0400\n"
+"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
+"Language-Team: English (British) <en_gb@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "a number between 0 and 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "in the form \"<name> <value>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "string"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "integer"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "list"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "either \"true\" or \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "a positive integer"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# default: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "main configuration file"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "location of main configuration file"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "location of language data files"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "create dictionary aliases"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "location of the main word list"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "encoding to expect data to be in"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "add or removes a filter"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "path(s) aspell looks for filters"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "filter mode"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "extra dictionaries to use"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "location for personal files"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignore words <= n chars"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignore accents when checking words -- CURRENTLY IGNORED"
+
+#: common/config.cpp:1390
+#, fuzzy
+msgid "ignore case when checking words"
+msgstr "ignore case when checking words -- CURRENTLY IGNORED"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignore commands to store replacement pairs"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "extra information for the word list"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "keyboard definition to use for typo analysis"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "language code"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "deprecated, use lang instead"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "location of local language data files"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "base name of the main dictionary to use"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "set module name"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "search order for modules"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "enable Unicode normalisation"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Unicode normalisation required for current lang"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Unicode normalisation form: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "avoid lossy conversions when normalisation"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "personal configuration file"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "personal dictionary file name"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "prefix directory"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "replacements list file name"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "consider run-together words legal"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "maximum number that can be strung together"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "minimal length of interior words"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "save replacement pairs on save all"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "set the prefix based on executable location"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "size of the word list"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "no longer used"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "suggestion mode"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "edit distance to use, override sug-mode default"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "use typo analysis, override sug-mode default"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "use replacement tables, override sug-mode default"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "characters to insert when a word is split"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "use personal, replacement & session dictionaries"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "search path for word list information files"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "enable warnings"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "use affix compression when creating dictionaries"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "remove invalid affix flags"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "attempts to clean words so that they are valid"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "compute soundslike on demand rather than storing"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "partially expand affixes for better suggestions"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "skip invalid words"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "check if affix flags are valid"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "check if words are valid"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "create a backup file by appending \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "use byte offsets instead of character offsets"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "create missing root/affix combinations"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "keymapping for check mode: \"aspell\" or \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "reverse the order of the suggest list"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suggest possible replacements"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "time load time and suggest time in pipe mode"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "The Unicode code point U+%04X is unsupported."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Invalid UTF-8 sequence at position %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operation Not Supported: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "The method \"%what:1\" is unimplemented in \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "The file \"%file:1\" can not be opened"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "The file \"%file:1\" can not be opened for reading."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "The file \"%file:1\" can not be opened for writing."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "The file name \"%file:1\" is invalid."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "The file \"%file:1\" is not in the proper format."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "The directory \"%dir:1\" can not be opened for reading."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "The key \"%key:1\" is unknown."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "The value for option \"%key:1\" can not be changed."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "The key \"%key:1\" is not a string."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "The key \"%key:1\" is not an integer."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "The key \"%key:1\" is not a boolean."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "The key \"%key:1\" is not a list."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+
+#: common/errors.cpp:203
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"enable-"
+"\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "The language \"%lang:1\" is not known."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "The soundslike \"%sl:2\" is not known."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "The language \"%lang:1\" is not supported."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "No word lists can be found for the language \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Expected language \"%lang:1\" but got \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Affix '%aff:1' is corrupt."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "The condition \"%cond:1\" is invalid."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "The encoding \"%encod:1\" is not known."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "The encoding \"%encod:1\" is not supported."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "The string \"%str:1\" is invalid."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "The word \"%word:1\" is invalid."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "not a version number"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen returned \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "The file \"%filter:1\" does not contain any filters."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "The filter \"%filter:1\" does not exist."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Confused by version control."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspell version does not match filter's requirement."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Filter option already exists."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Use option modifiers only within named option."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Option modifier unknown."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Error setting filter description."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Empty option specifier."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Option \"%option:1\" possibly specified prior to filter."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Unknown mode description key \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Expecting \"%modekey:1\" key."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Version specifier missing key: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell version does not match mode's requirement."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Missing magic mode expression."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Empty extension at char %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\" error"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Unknown mode: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" is not a valid regular expression."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Unhandled Error: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Error: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Error: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "enter Email mode."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "enter HTML mode."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "enter TeX mode."
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "enter TeX mode."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Invalid Option: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " does not take any parameters."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "You must specify a parameter for %s"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "You must specify an action"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Unknown Action: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "You must specify a parameter for %s"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Invalid Input"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Time to load word list: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Suggestion Time: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "You must specify a file name."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Could not open the file \"%s\" for reading"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Invalid keymapping: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Could not open the file \"%s\" for writing. File not saved."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignore"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignore all"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Replace"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Replace all"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Add"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Add Lower"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abort"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Exit"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Are you sure you want to abort (y/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "With: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Sorry that is an invalid choice!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Sorry \"filter\" is currently not implemented.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Can't merge a master word list yet. Sorry."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Sorry \"create/merge personal\" is currently not implemented.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Sorry I won't overwrite \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Sorry \"create/merge repl\" is currently not implemented.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Usage: aspell [options] <command>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<command> is one of:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         display a brief usage message"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             display a detailed help message"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <file>  to check a file"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" compatibility mode"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    dumps the current configuration to stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <key>     prints the current value of an option"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    lists available dictionaries / filters / filter modes"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[options] is any of the following:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             produce a list of misspelled words from standard input"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            generate possible root words and affixes"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     expands affix flags"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       prints a version line"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    converts from one encoding to another"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    perform Unicode normalisation"
+
+#: prog/aspell.cpp:2839
+#, fuzzy
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [word list]"
+
+#: prog/aspell.cpp:2840
+#, fuzzy
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    dumps, creates or merges a master, personal, or replacement word list."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      normalisation form to use, either none, internal, or "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Error: Stdin not a terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accept Changes"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Delete the previous character"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Left"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Move Back one space"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Right"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Move Forward one space"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Move to the beginning of the line"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Move to the end of the line"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Delete the next character"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Kill all characters to the EOL"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Abort This Operation"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "This is probably because: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "The required field \"name\" is missing."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Empty string."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "The character '%s' (U+%02X) may not appear at the beginning of a word."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Does not contain any alphabetic characters."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "The character '%s' (U+%02X) may not appear in the middle of a word."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "The character '%s' (U+%02X) may not appear at the end of a word."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Warning: Removing invalid affix '%s' from word %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Warning: Removing inapplicable affix '%s' from word %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Warning: %s Skipping string.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "The total length is larger than 240 characters."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Warning: %s Skipping word.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Possibly incorrect count."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Wrong endian order."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Wrong soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Wrong soundslike version."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Affix flags found in word but no affix file given."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"The total word length, with soundslike data, is larger than 240 characters."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "a string of 'o','O','p',or 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "experimental filter for hiding delimited contexts"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "context delimiters (separated by spaces)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "swaps visible and invisible text"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filter for skipping quoted text in email messages"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "email quote characters"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "num chars that can appear before the quote char"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filter for dealing with HTML documents"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML attributes to always check"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML tags to always skip the contents of"
+
+#: modules/filter/nroff-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Nroff documents"
+msgstr "filter for dealing with HTML documents"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filter for dealing with generic SGML/XML documents"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML attributes to always check"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML tags to always skip the contents of"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filter for dealing with TeX/LaTeX documents"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "check TeX comments"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX commands"
+
+#: modules/filter/texinfo-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Texinfo documents"
+msgstr "filter for dealing with HTML documents"
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ignore commands to store replacement pairs"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filter to skip URL like constructs"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mode for checking C++ comments and string literals"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mode to check any lines starting with a #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mode for skipping quoted text in email messages"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mode for checking HTML documents"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mode to disable all filters"
+
+#: modules/filter/modes/nroff.amf:7
+#, fuzzy
+msgid "mode for checking Nroff documents"
+msgstr "mode for checking HTML documents"
+
+#: modules/filter/modes/perl.amf:8
+#, fuzzy
+msgid "mode for checking Perl comments and string literals"
+msgstr "mode for checking perl comments and string literals"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mode for checking generic SGML/XML documents"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mode for checking TeX/LaTeX documents"
+
+#: modules/filter/modes/texinfo.amf:7
+#, fuzzy
+msgid "mode for checking Texinfo documents"
+msgstr "mode for checking HTML documents"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mode to skip URL like constructs (default mode)"
+
+#~ msgid "configured as follows"
+#~ msgstr "configured as follows"
+
+#~ msgid "path(es) aspell looks for options descriptions"
+#~ msgstr "path(s) aspell looks for options descriptions"
+
+#~ msgid "indicator for additional flags in word lists"
+#~ msgstr "indicator for additional flags in word lists"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+#~ msgstr "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: can't find option description."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+
+#~ msgid "%action:1: invalid regular expression."
+#~ msgstr "%action:1: invalid regular expression."
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "enter Html/Sgml mode."
+
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  list             produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  clean [strict]   cleans a word list so that every line is a valid word\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  conv <from> <to> [<norm-form>]\n"
+#~ "    converts from one encoding to another\n"
+#~ "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]\n"
+#~ "    perform unicode normlization\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "  <norm-form>      normalization form to use, either none, internal, or "
+#~ "strict\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  list             produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  clean [strict]   cleans a word list so that every line is a valid word\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  conv <from> <to> [<norm-form>]\n"
+#~ "    converts from one encoding to another\n"
+#~ "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]\n"
+#~ "    perform unicode normlisation\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "  <norm-form>      normalisation form to use, either none, internal, or "
+#~ "strict\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "  %s filter: %s\n"
+#~ "    NOTE: in ambiguous case prefix following options by \"filter-\"\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  %s filter: %s\n"
+#~ "    NOTE: in ambiguous case prefix following options by \"filter-\"\n"
+
+#~ msgid "Expected the file to be in \"%s\" not \"%s\"."
+#~ msgstr "Expected the file to be in \"%s\" not \"%s\"."
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Filter for eliminating email quote characters"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Filters for encoding, filtering and decoding sgml characters"
+
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "characters used to encode hyphenation locations"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "Filter for hiding urls/paths and similar from Aspell"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "strip accents from word lists"
+
+#~ msgid "encode soundslike infomation when creating dicts"
+#~ msgstr "encode soundslike infomation when creating dicts"
+
+#~ msgid "use jump tables when creating dictionaries"
+#~ msgstr "use jump tables when creating dictionaries"
+
+#~ msgid "Affix compression is currently incompatible with soundslike lookup."
+#~ msgstr "Affix compression is currently incompatible with soundslike lookup."
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644 (file)
index 0000000..1f3b6a0
Binary files /dev/null and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..23de124
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1491 @@
+# -*- mode: po; buffer-file-coding-system: iso-8859-1; default-input-method: latin-1-prefix -*-
+#
+# Spanish messages for GNU Aspell
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# This file is distributed under the same license as the aspell package.
+#
+# Sergey Poznyakoff       <gray@gnu.org>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2009-04-24 18:04+0200\n"
+"Last-Translator: Francisco Molinero <paco@byasl.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un número entre 0 y 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "en la forma «<nombre> <valor>»"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "cadena"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "entero"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleano"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "lista"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "o «true» o «false»"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un entero positivo"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# predeterminado"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtro: %s\n"
+"# %s\n"
+"#\n"
+"# configurado como sigue:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "variable de entorno ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "archivo de configuración principal"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "localización del archivo de configuración principal"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "localización de los archivos de idiomas"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "crear alias de diccionarios"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "localización del vocabulario principal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codificación de la entrada"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "añade o quita un filtro"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "ruta(s) donde aspell busca filtros"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "modo filtro"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "diccionarios adicionales"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "localización de los archivos personales"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "omitir palabras con menos de n caracteres"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "Ignorar los acentos al comprobar las palabras -- ACTUALMENTE IGNORADOS"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorar capitalización al comprobar las palabras"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "pasa por alto órdenes de remplazo"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "información suplementaria para el vocabulario"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definición del teclado para análisis de errores tipográficos"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "código del idioma"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "obsoleto, use lang en su lugar"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "localización de los archivos de datos de idiomas"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "nombre del diccionario principal"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "establecer nombre del módulo"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "establecer el orden de los módulos"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "activar normalización Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Se requiere normalización Unicode para el idioma actual"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Forma de normalización Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "evitar conversaciones con pérdidas en la normalización"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "archivo de configuración principal"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nombre del diccionario personal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "directorio prefijo"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nombre del archivo de sustituciones"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considerar palabras aglutinadas legales"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "número máximo que pueden ser aglutinados"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "tamaño mí­nimo de las palabras interiores"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "guardar sustituciones al recibir orden «save all»"
+
+# FUZZY
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "establecer el prefijo en la localización del ejecutable"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "tamaño del vocabulario"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "no se usa más"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "modo de sugerencia"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "editar distancia de uso, anulación de sug-mode predeterminada"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "usar análisis tipográfico, sobrecarga sug-mode predeterminada"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "usar tablas de sustitución, anulación de sug-mode predeterminada"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caracteres a insertar cuando se divide una palabra"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "usar diccionarios personal, de reemplazo y de sesión"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "ruta de búsqueda para archivos de información de listas de palabras"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "activar avisos"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"indicador para banderas de afijos en listas de palabras -- ACTUALMENTE "
+"IGNORADO"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "usar compresión de afijos al crear diccionarios"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "eliminar banderas de afijos inválidas"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "intenta limpiar palabras para que sean válidas"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "calcular semejanza a petición en lugar  de almacenamiento"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "expansión parcial de afijos para obtener mejores sugerencias"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "omite palabras inválidas"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "comprueba si las banderas de afijos son válidas"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "comprueba si las palabras son válidas"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "crear archivo de respaldo añadiendo «.bak» al nombre del archivo"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "usa desplazamientos de byte en lugar de desplazamientos de carácter"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "crea combinaciones raí­z/afijo que faltan"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapa de teclas en modo de verificación: «aspell» o «ispell»"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "invertir la lista de sugerencias"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "sugerir posibles sustituciones"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+"tiempo de demora de carga y tiempo de demora sugerida en el modo de tuberí­a"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Esto también podrí­a significar que el archivo «%s» no pudo abrirse para "
+"escritura,o que no existe."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "El código Unicode U+%04X no está permitido"
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Secuencia UTF-8 incorrecta en la posición %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operación no permitida: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "El método «%what:1» no está implementado en «%where:2»."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "No se puede abrir archivo «%file:1»"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "No se puede abrir archivo «%file:1» para leer"
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "No se puede abrir archivo «%file:1» para escribir"
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Nombre de archivo «%file:1» no es válido."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Archivo «%file:1» está en un formato incorrecto."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "No se puede abrir directorio «%dir:1» para leer"
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Clave «%key:1» desconocida."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "No se puede cambiar el valor de la opción «%key:1»."
+
+# MAL!
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "La clave «%key:1» no está %accepted:2 y por lo tanto es inválida."
+
+# MAL!
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"El valor «%valor:2» no está %accepted:3 y por lo tanto es inválido para la "
+"clave «%key:1»."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "La clave «%key:1» no es una cadena."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "La clave «%key:1» no es un entero."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "La clave «%key:1» no es un booleano."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "La clave «%key:1» no es una lista."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"La clave «%key:1» no admite parámetros cuando lleva el prefijo «reset-»."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"La clave «%key:1» no admite parámetros cuando lleva el prefijo «enable-»."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"La clave «%key:1» no admite parámetros cuando lleva el prefijo «dont-» o \n"
+"«disable-»."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"La clave «%key:1» no recibe parámetros cuando lleva el prefijo «clear-»."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "El idioma «%lang:1» no es conocido"
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "El código «soundslike» %sl:2 no es conocido"
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Idioma «%lang:1» no permitido."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "No se encontraron vocabularios para «%lang:1»."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Se esperaba «%lang:1», pero se ha encontrado «%prev:2»."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "El afijo «%aff:1» está corrupto."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "La condición «%cond:1» es inválida."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"La condición «%cond:1» no garantiza que «%strip:2» se pueda mostrar siempre."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"El archivo «%file:1» no está en el formato adecuado. Se esperaba que \n"
+"estuviera en «%exp:2» en lugar de en «%got:3»"
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Codificación «%encod:1» desconocida."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Codificación «%encod:1» no permitida."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "La conversión de «%encod:1» a «%encod2:2» no está permitida"
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "La cadena «%str:1» no es válida."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "La palabra «%word:1» no es válida."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "La bandera de afijo «%aff:1» no es válida para la palabra «%word:2»"
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+"La bandera de afijo «%aff:1» no tiene aplicación en la palabra «%word:2»."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "no es un número de versión"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen devolvió «%return:1»."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "El archivo «%file:1» no contiene ningún filtro."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "El archivo «%file:1» no existe."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Confundido por el control de versiones."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "La versión de Aspell no coincide con la requerida por el filtro."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "La opción de filtrado ya existe."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Usar modificadores de opción sólo dentro de opciones con nombre."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modificador de opción desconocido."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Error asignando descripción del filtro."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Especificador de opción vacío"
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "La opción «%option:1» se especificó posiblemente antes que el filtro."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Clave «%key:1» de descripción de modo desconocida."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Esperando la tecla «%modekey:1»"
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "El especificador de versión no contiene la clave: «aspell»."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "La versión de Aspell no concuerda con el requerimiento de modo."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Falta expresión en modo mágico"
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Extensión vacía en el carácter %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Error en «%mode:1»"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Modo desconocido: «%mode:1»."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"Error en «%mode:1» mientras se extendían los modos de Aspell (¿Memoria "
+"agotada?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no hay comienzo para la búsqueda mágica dada por el «%magic:2» "
+"mágico."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no hay rango para la búsqueda mágica dada por el «%magic:2» "
+"mágico."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"«%mode:1»: no hay ninguna expresión mágica disponible para el «%magic:2» "
+"mágico."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\":  expresión regular incorrecta después del "
+"parámetro de localización; regexp devolvió: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "«%expression:1» no es una expresión regular válida."
+
+# FUZZY
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Error no manejado: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Error: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Error: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entrar modo Email"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "entrar en modo HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entrar modo TeX"
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "entrar en modo Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opción inválida: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " no admite ningún parámetro"
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Debe especificar un parámetro para «%s»."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Tiene que especificar una acción"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Acción desconocida: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Error: Debe especificar al menos %d parámetros para \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Entrada inválida"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "AVISO: Incapaz de entrar en modo Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tiempo para cargar la lista de palabras: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Tiempo de la sugerencia: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Debe especificar un nombre de archivo."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Sólo se puede especificar un nombre de archivo."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "No se puede abrir «%s» para leer"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Mapa de teclado no válido: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "No se pudo abrir «%s» para escritura. El archivo no se guardó."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorar todos"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Sustituir"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Sustituir todos"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Añadir"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Añadir minúsculas"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abortar"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Salir"
+
+# FUZZY
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "¿Está seguro que quiere interrumpir la operación (s/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Ss"
+
+# sustituir ... a: ...
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "con: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Disculpe, ¡la selección no es válida!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Disculpe, pero «filter» no está implementado actualmente.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Lo siento. Todavía no se puede mezclar un vocabulario principal."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Lo siento «create/merge personal» está actualmente sin implementar.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Disculpe, no voy a sobreescribir «%s»"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Lo siento «create/merge repl» está actualmente sin implementar.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "«%s» no es una bandera válida para la orden «munch-list»"
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Uso: aspell [opciones] <orden>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<orden> es una de:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage muestra un mensaje sobre su uso"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help muestra un mensaje detallado de ayuda"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <archivo> para comprobar un archivo"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe modo de compatibilidad con «ispell -a»"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config vuelca la configuración actual a la salida estándar"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "congif<key>\timprime el valor actuald de una opción"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicc | filtros | modos"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    lista los diccionarios / filtros / modos de filtrado disponibles"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[options] es cualquiera de los siguientes:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list produce una lista de palabras mal escritas desde la entrada estándar"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike devuelve el equivalente fonético de cada palabra introducida"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch genera posibles raíces y afijos de palabras"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4] expande las banderas no fijas"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict] limpia una lista de palabras de forma que cada línea sea "
+"una palabra válida"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version imprime una línea de versión"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+"    reduce el tamaño de una lista de palabras via compresión de afijos."
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <origen> <destino> [<forma-norm>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    convierte de un código a otro"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+"  norm (<mapa de normalización> | <origen> <mapa-norm> <destino>)[<forma-"
+"norm>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    realizar normalización Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nombre>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    vuelca, crea o mezcla un diccionario maestro, personal o de reemplazo."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <forma-norm> forma de normalización a utilizar, ya sea none, internal o "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s. Copyright 2000-2011 por Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Diccionarios disponibles:\n"
+"    Los diccionarios pueden seleccionarse mediante las\n"
+" opciones «-d» o «master». También pueden seleccionarse indirectamente "
+"mediante las opciones «lang», «variety» y «size».\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtros disponibles (y opciones asociadas):\n"
+"    Los filtros pueden añadirse o quitarse a través de la opción «filter».\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  filtro %s: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Modos de filtro disponibles:\n"
+"    Los modos de filtro son combinaciones reconfiguradas de filtros "
+"optimizadas para\n"
+"    archivos de un tipo específico. Los modos se seleccionan a través de la "
+"opción \"mode\".\n"
+"    Esto sucederá implícitamente si Aspell es capaz de identificar el tipo "
+"del\n"
+"    archivo por su extensión, y posiblemente los contenidos, del archivo.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Error: Stdin no es un terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Intro"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Aceptar cambios"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Borrar"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control+H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Borrar el carácter anterior"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Izquierda"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Retrocede un espacio"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Derecha"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Moverse un espacio adelante"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Inicio"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Moverse al comienzo de la línea"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Fin"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Moverse al principio de la línea"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Borrar"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Borrar el siguiente carácter"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Borrar todos los caracteres hasta final de línea"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Abortar esta operación"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Esto es posiblemente porque: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Falta el campo requerido «nombre»."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Cadena vacía."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+"El carácter '%s' (U+%02X) no puede aparecer al principio de una palabra."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+"El carácter '%s' (U+%02X) debe tener a continuación un carácter alfabético."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "No contiene ningún carácter alfabético."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "El carácter '%s' (U+%02X) no puede aparecer en medio de una palabra."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"El carácter «\\r» (U+0D) no puede aparecer al final de una palabra. Eso "
+"probablemente signifique que el archivo está usando el fin de línea de MS-"
+"DOS en lugar del de Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "El carácter «%s» (U+%02X) no puede aparecer al final de una palabra."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Aviso: Quitando afijo incorrecto '%s' de la palabra %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Aviso: Borrando afijo inaplicable '%s' de la palabra %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Aviso: Omitiendo cadena %s.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "La longitud total es mayor de 240 caracteres."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Aviso: Omitiendo palabra %s.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Posible recuento incorrecto."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Orden endian equivocada."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Pronunciación incorrecta."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Versión de pronunciación incorrecta."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Se encontraron banderas de afijo en la palabra pero no se ha especificado "
+"archivo de afijos."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"La longitud total de la palabra, con los datos de pronunciación, es mayor de "
+"240 caracteres."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Debe haber al menos una línea añadida."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "uno entre ultra, fast, normal, slow y bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "no es uno de los tipos permitidos"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "La lista personal de palabras no está disponible."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "La lista de palabras de la sesión no está disponible."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "La lista principal de palabras no está disponible"
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "una cadena de 'o', 'O', 'p', o 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtro prueba para esconder contextos delimitados"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "delimitadores de contexto (separados por espacios)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "cambia entre texto visible e invisible"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtro para saltar texto citado en correos electrónicos"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "comillas email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "número de caracteres admitidos antes de la comilla email"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtro para trabajar con documentos HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atributos HTML para comprobar siempre"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "etiquetas HTML para saltar el contenido de"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtro para tratar con documentos Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtro para tratar con documentos SGML/XML genéricos"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "comprobar siempre estos atributos SGML"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "omitir siempre el contenido de las etiquetas SGML"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtro para tratar con documentos TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "verificar dentro de comentarios TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "órdenes TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtro para trabajar con documentos Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ignorar los parámetros de las órdenes Texinfo"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "ignorar entornos Texinfo"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtro para saltarse construcciones tipo URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "modo para comprobar comentarios en C++ y literales de cadenas"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "modo para comprobar líneas que comiencen por #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "modo para omitir texto citado en correos electrónicos"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "modo para comprobar documentos HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "modo para desactivar todos los filtros"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "modo para comprobar documentos Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "modo para comprobar comentarios en Perl y literales de cadenas"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "modo para comprobar documentos SGML/XML genéricos"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "modo para comprobar documentos TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "modo para comprobar documentos Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "modo para saltarse construcciones tipo URL (modo predeterminado)"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "eliminar acentos de las palabras en vocabulario"
+
+#, fuzzy
+#~ msgid "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+#~ msgstr "No se puede abrir archivo «%file:1» para leer"
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "entrar modo Htmp/Sgml"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  -l|list          produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or `all'\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s alpha. Copyright 2000, Kevin Atkinson.\n"
+#~ "\n"
+#~ "Modo de empleo: aspell [opciones] <orden>\n"
+#~ "\n"
+#~ "<orden> es uno de:\n"
+#~ "  -?|help          dar esta lista de ayuda\n"
+#~ "  -c|check <file>  averiguar ortografía de <file>\\n\"\n"
+#~ "  -a|pipe          modo de compatibilidad con «ispell -a»\n"
+#~ "  -l|list          generar una lista de palabras mal escritas de la "
+#~ "entrada\n"
+#~ "                   estándar.\n"
+#~ "  [dump] config    mostrar la configuración corriente en la salida "
+#~ "estándar.\n"
+#~ "  config <key>     mostrar el valor de la opción\n"
+#~ "  soundslike       para cada palabra de entrada producir su equivalente\n"
+#~ "                   «soundslike»\n"
+#~ "  filter           pasar la entrada estándar a través del filtro\n"
+#~ "  -v|version       mostrar la versión del programa\n"
+#~ "  dump|create|merge master|personal|repl [vocabulario]\\n\"\n"
+#~ "    mostrar, crear o juntar el vocabulario principal, personal o\n"
+#~ "    de sustituciones.\n"
+#~ "\n"
+#~ "[opciones] son:\n"
+
+#, fuzzy
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "comillas email"
+
+#~ msgid "sgml file extensions"
+#~ msgstr "sufijos de archivos SGML"
+
+#~ msgid "TeX file extensions"
+#~ msgstr "sufijos de archivos TeX"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644 (file)
index 0000000..da7adb6
Binary files /dev/null and b/po/fi.gmo differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644 (file)
index 0000000..0e7d659
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1421 @@
+# Finnish messages for aspell.
+# Copyright © 2010 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2011-03-06 09:03+0200\n"
+"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "numero 0:n ja 1:n välillä"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "muodossa \"<nimi> <arvo>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "merkkijono"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "kokonaisluku"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "luettelo"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "joko ”true” tai ”false”"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "positiivinen kokonaisluku"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# oletus: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Suodatin: %s\n"
+"#   %s\n"
+"#\n"
+"# aseteltu seuraavasti:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "pääasetustiedosto"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "pääasetustiedoston sijainti"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "kielidatatiedostojen sijainti"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "luo hakemistoaliaksia"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "pääsanaluettelon sijainti"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "koodaus, jolla tiedot oletettiin olevan koodattuja"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "lisää tai poistaa suodattimen"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "polut, joista aspell etsii suodattimia"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "suodatintila"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "ylimääräisiä käytettäviä sanakirjoja"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "henkilökohtaisten tiedostojen sijainti"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ohita sanat <= n merkkiä"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ohita aksenttimerkit tarkistettaessa sanoja -- NYKYISIN OHITETAAN"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ohita merkkikoko sanoja tarkistettaessa"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ohita komennot korvausparien tallentamiseksi"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "lisätietoa sanaluettelosta"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "kirjoitusvirheanalyysissa käytettävä näppäimistömäärittely"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "kielikoodi"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "vanhentunut, käytä sen sijaan lang-asetusta"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "paikallisen kielitietotiedoston sijainti"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "käytettävän pääsanakirjan perusnimi"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "aseta moduulinimi"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "moduulien etsintäjärjestys"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "ota käyttöön Unicode-normalisointi"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Nykyiselle lang-asetukselle vaadittu Unicode-normalisointi"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Unicode-normalisointimuoto: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "vältä häviölliset muunnokset normalisoitaessa"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "henkilökohtainen asetustiedosto"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "henkilökohtainen sanakirjatiedostonimi"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "etuliitehakemisto"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "tiedostonimi korvausluettelolle"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "pidä yhdessäsuoritettavia sanoja laillisina"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "enimmäismäärä, joka voidaan liittää yhteen"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "sisäisten sanojen minimipituus"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "tallenna korvausparit talletettaessa kaikki"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "aseta suoritettavaan sijaintiin perustuva etuliite"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "sanaluettelon koko"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "ei enää käytetty"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "suositustila"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "käytettävä muokkausetäisyys, korvaa sug-mode -oletus"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "käytä kirjoitusvirheanalyysia, korvaa sug-mode -oletus"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "käytä korvaustauluja, korvaa sug-mode -oletus"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "lisättävät merkit, kun sana jaetaan kahtia"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "käytä henkilökohtaisia, korvaus- ja istuntosanakirjoja"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "etsintäpolku sanaluettelotietotiedostoille"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "ota käyttöön varoitukset"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indikaattori liitelipuille sanaluetteloissa -- NYKYISIN OHITETAAN"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "käytä liitetiivistystä sanakirjoja luotaessa"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "poista virheelliset liiteliput"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "yritykset puhdistaa sanoja niin että ne ovat kelvollisia"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "laskea äänenkaltaisia pyynnöstä pikemmin kuin tallentaa niitä"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "osittain laajentaa liitteitä parempia suosituksia varten"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "ohita virheelliset sanat"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "tarkista, että liiteliput ovat kelvollisia"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "tarkista, että sanat ovat kelvollisia"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "luo varmuuskopiotiedosto liittämällä ”.bak”"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "käytä tavusiirrroksia eikä merkkisiirroksia"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "luo puuttuvat sanavartalo/liite-yhdistelmät"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "näppäinkartoitus tarkistustilalle: ”aspell” tai ”ispell”"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "käännä suositusluettelo päinvastaiseksi"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suosittele mahdollisia korvauksia"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "aikalatausaika ja suositusaika putkitilassa"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Tämä voisi myös tarkoittaa, että tiedostoa ”%s” ei voitu avata lukemista "
+"varten tai sitä ei ole olemassa."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Unicode-merkkiä U+%04X ei tueta."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Virheellinen UTF-8 -sekvenssi sijainnissa %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Toimintoa ei tueta: %What:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Methodi ”%what:1” on toteuttamaton kohteessa ”%where:2”."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Tiedostoa ”%file:1” ei voida avata"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Tiedostoa ”%file:1” ei voida avata lukemista varten."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Tiedostoa ”%file:1” ei voida avata kirjoittamista varten."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Tiedostonimi ”%file:1” on virheellinen."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Tiedosto ”%file:1” ei ole oikeaa muotoa."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Hakemistoa ”%dir:1” ei voida avata lukemista varten."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Valitsin ”%key:1” on tuntematon."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Valitsimen ”%key:1” arvoa ei voida muuttaa."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Valitsin ”%key:1” ei ole %accepted:2 ja se on siten virheellinen."
+
+#  Tämän lauseen suomennoksen jäsentäminen ei onnistu. Testattaessa vain %accepted:3-teksti näkyy suomenkielisenä.
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Arvo ”%value:2” ei ole %accepted:3 ja se on siten virheellinen valitsimelle "
+"”%key:1”."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Valitsin ”%key:1” ei ole merkkijono."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Valitsin ”%key:1” ei ole kokonaisluku."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Valitsin ”%key:1” ei ole boolean."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Valitsin ”%key:1” ei ole luettelo."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Valitsin ”%key:1” ei ota mitään parametreja kun sen etuliitteenä on ”reset-”."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Valitsin ”%key:1” ei ota mitään parametreja kun sen etuliitteenä on "
+"”enable-”."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Valitsin ”%key:1” ei ota mitään parametreja kun sen etuliitteenä on ”dont-” "
+"tai ”disable-”."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Valitsin ”%key:1” ei ota mitään parametreja kun sen etuliitteenä on ”clear-”."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Kieli ”%lang:1” on tuntematon."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Äänenkaltainen ”%sl:2” ei ole tunnettu."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Kieli ”%lang:1” on tukematon."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Kielelle ”%lang:1” ei löydetty sanaluetteloja."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Odotettiin kieltä ”%lang:1” mutta saatiin ”%prev:2”."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Liite '%aff:1' on rikkoutunut."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Ehto ”%cond:1” on virheellinen."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr "Ehto ”%cond:1” ei takaa, että ”%strip:2” voidaan aina riisua."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Tiedosto ”%file:1” ei ole oikeaa muotoa. Tiedoston odotettiin olevan ”%"
+"exp:2” ei ”%got:3”."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Koodaus ”%encod:1” on tuntematon."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Koodausta ”%encod:1” ei ole tuettu."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Muunnosta koodista ”%encod:1” koodiin ”%encod2:2” ei tueta."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Merkkijono ”%str:1” on virheellinen."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Sana ”%word:1” on virheellinen."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Liitelippu '%aff:1' on virheellinen sanalle ”%word:2”."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Liitelippu '%aff:1' ei voida liittää sanaan ”%word:2”."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "ei ole versionumero"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen palautti ”%return:1”."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Tiedosto ”%filter:1” ei sisällä suodattimia."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Suodatinta ”%filter:1” ei ole olemassa."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Versionhallinnan sekoittama."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspell-versio ei täsmää suodattimen vaatimukseen."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Suodatinvalitsin on jo olemassa."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Käytä valitsinmääreitä vain nimetyn valitsimen sisällä."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Valitsinmääre on tuntematon."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Virheasetussuodatinkuvaus."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Tyhjä valitsinmäärite."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Valitsin ”%option:1” on mahdollisesti määritelty ennen suodatinta."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Tuntematon tilakuvausvalitsin ”%key:1”."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Odotettiin ”%modekey:1”-valitsinta."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Versiomääritteen puuttuva valitsin: ”aspell”."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell-versio ei täsmää tilan vaatimukseen."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Puuttuva magiikkatilalauseke."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Tyhjä laajennus merkissä %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "”%mode:1”-virhe"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Tuntematon tila: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "”%mode:1”-virhe, kun laajennetaan Aspell-tiloja. (muisti loppui?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"”%mode:1”: annetulla ”%magic:2”-magiikalla ei ole alkua magiikkaetsinnälle."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"”%mode:1”: annetulla ”%magic:2”-magiikalla ei ole lukualuetta "
+"magiikkaetsintään."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "”%mode:1”: ”%magic:2”-magiikalla ei ole maagista lauseketta."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"”%mode:1”: Magiikka ”%magic:2”: väärä säännöllinen lauseke sijaintimääreen "
+"jälkeen; regexp ilmoittaa: ”%regerr:3”."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "”%expression:1” ei ole kelvollinen säännöllinen lauseke."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Käsittelemätön virhe: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Virhe: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Virhe: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "siirry sähköpostitilaan."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "siirry HTML-tilaan."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "siirry TeX-tilaan."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "siirry Nroff-tilaan."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Virheellinen valitsin: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " ei ota parametrejä."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Kohteelle ”%s” on määriteltävä parametri."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Toiminto on määriteltävä"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Tuntematon toiminto: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Virhe: On määriteltävä vähintään %d parametria kohteelle ”%s”.\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Virheellinen syöte"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "VAROITUS: Ei kyetä siirtymään Nroff-tilaan: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Aika ladata sanaluettelo: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Suositusaika: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Tiedostonimi on määriteltävä."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Saadaan määritellä vain yksi tiedostonimi."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Ei voitu avata tiedostoa ”%s” lukemista varten"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Virheellinen näppäinkartoitus: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Ei voitu avata tiedostoa ”%s” kirjoittamista varten. Tiedostoa ei "
+"tallennettu."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ohita"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ohita kaikki"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Korvaa"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Korvaa kaikki"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Lisää"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Lisää alempi"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Keskeytä"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Poistu"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Oletko varma, että haluat keskeyttää (y/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "YyKk"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr ": "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Tuo on virheellinen valinta!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Valitsin ”filter” on nykyisin toteuttamaton.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Ei voida vielä yhdistää pääsanaluetteloa."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Valitsin ”create/merge personal” on nykyisin toteuttamaton.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Ei korvata kohdetta ”%s”"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Valitsin ”create/merge repl” on nykyisin toteuttamaton.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "”%s” ei ole kelvollinen lippu ”munch-list”-komennolle."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Käyttö: aspell [valitsimet] <komento>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<komento> on yksi seuraavista:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage            näytä lyhyt käyttöviesti"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help                näytä yksityiskohtainen opasteviesti"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <tiedosto> tiedoston tarkistamiseen"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe             ”ispell -a”-yhteensopivuustila"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config       tulostaa nykyisen asetuksen vakiotulosteeseen"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <valitsin>   tulostaa valitsimen nykyisen arvon"
+
+#  sanat dicts, filters ja modes ovat literaaliparametreja, joita ei pidä suomentaa.
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+"    luettelee saatavilla olevat sanakirjat / suodattimet / suodatintilat"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[valitsimet] ovat mikä tahansa seuraavista:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list                tuottaa luettelon vakiosyötteeseen "
+"väärinkirjoitetuista sanoista"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike          palauttaa äänenkaltaisen yhtäläisyyden jokaiselle "
+"kirjoitetulle sanalle"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch               tuottaa mahdolliset sanavartalosanat ja liitteet"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]        laajentaa liitelippuja"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]      puhdistaa sanaluetteloa niin että jokainen rivi on "
+"kelvollinen sana"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version          tulostaa versiorivin"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    pienentää sanaluettelon kokoa liitteiden tiivistämisellä"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <lähde> <kohde> [<normalisointimuoto>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    muuntaa lähdekoodauksesta kohdekoodaukseen"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+"  norm (<normalisointikartta> | <lähde> <normalisointikartta> <kohde>) "
+"[<normalisointimuoto>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    suorittaa Unicode-normalisoinnin"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nimi>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    tulostaa, luo tai yhdistää pää-, henkilökohtaisen, tai korvaussanakirjan."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <normalisointimuoto> käytettävä normalisointimuoto on joko none, internal, "
+"tai strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2114, Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Käytettävissä olevat sanakirjat:\n"
+"    Sanakirjat voidaan valita suoraan valitsimilla ”-d” tai ”master”.\n"
+"    Ne voidaan valita myös epäsuorasti valitsimilla ”lang”, ”variety”,\n"
+"    ”size”.\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Käytettävissä olevat suodattimet (ja niihin liittyvät valitsimet):\n"
+"    Suodattimia voidaan lisätä tai poistaa ”filter”-valitsimen avulla.\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s-suodatin: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Käytettävissä olevat suodatintilat:\n"
+"    Suodatintilat ovat suodattimien optiomoinnin uudelleenasetuksen\n"
+"    yhdistelmiä tietyntyyppisille tiedostoille. Tila valitaan \"mode\"\n"
+"    -valitsimella. Tämä tapahtuu implisiittisesti jos Aspell kykenee\n"
+"    tunnistamaan tiedostotyypin tiedostotarkentimesta ja mahdollisesti\n"
+"    tiedoston sisällöstä.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Virhe: Vakiosyöte ei ole pääte."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Hyväksy muutokset"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Poista edellinen merkki"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Vasen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Siirry taaksepäin yksi välilyönti"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Oikea"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Siirry eteenpäin yksi välilyönti"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Siirry rivin alkuun"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Siirry rivin loppuun"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Poista seuraava kirjain"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Tuhoa kaikki kirjaimet rivin loppuun"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Keskeytä tämä toiminto"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Tämä on luultavasti koska: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Vaadittu kenttä ”name” puuttuu."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Tyhjä merkkijono."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Merkki '%s' (U+%02X) ei ehkä esiinny sanan alussa."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Merkkiä '%s' (U+%02X) on seurattava aakkosnumeerinen merkki."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Ei sisällä yhtään aakkosnumeerista merkkiä."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Merkki '%s' (U+%02X) ei ehkä esiinny sanan keskellä."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Merkki '\\r' (U+0D) ei ehkä esiinny sanan lopussa. Tämä luultavasti "
+"tarkoittaa, että tiedosto käyttää MS-DOS EOL -rivinloppumerkkiä eikä Unix "
+"EOL -rivinloppumerkkiä."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Merkki '%s' (U+%02X) ei ehkä esiinny sanan lopussa."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Varoitus: Virheellisen liitteen '%s' poistaminen sanasta %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Varoitus: Poistetaan sopimaton liite '%s' sanasta %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Varoitus: %s ohitetaan merkkijono.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Yhteispituus on suurempi kuin 240 merkkiä."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Varoitus: %s Ohitetaan sana.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Mahdollisesti väärä lukumäärä."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Väärä tavujärjestys."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Väärä äänenkaltainen."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Väärä äänenkaltainen versio."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Liiteliput löytyivät sanassa, mutta liitetiedostoa ei ole annettu."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Kokonaissanapituus, äänenkaltaisella tiedolla, on laajempi kuin 240 merkkiä."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "On oltava vähintään yksi ”add”-rivi."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "yksi seuraavista: ultra, fast, normal, slow tai bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "ei ole yksi sallituista tyypeistä"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Henkilökohtainen sanaluettelo ei ole saatavilla."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Istuntosanaluettelo ei ole saatavilla."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Pääsanaluettelo ei ole saatavilla."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "seuraavien merkkien merkkijono: 'o','O','p',tai 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "kokeilusuodatin rajoitetun sisällön piilottamiseen"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "sisältörajoittimet (väleillä erotettuna)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "vaihtaa näkyvää ja näkymätöntä tekstiä keskenään"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "suodatin sähköpostiviestien lainatun tekstin ohittamiseen"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "sähköpostilainausmerkit"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "kirjainten lukumäärä ennen lainausmerkkiä"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "suodatin HTML-asiakirjojen käsittelemiseen"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "Aina tarkistettavat HTML-attribuutit"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML-tunnisteet, jotka aina ohitetaan sisällössä"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "suodatin Nroff-asiakirjojen käsittelemiseen"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "suodatin yleisten SGML/XML -asiakirjojen käsittelemiseen"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "Aina tarkistettavat SGML-attribuutit"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML-tunnisteet, jotka aina ohitetaan sisällössä"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "suodatin TeX/LaTex-asiakirjojen käsittelemiseen"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "tarkista TeX-kommentit"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX-komennot"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "suodatin Texinfo-asiakirjojen käsittelemiseen"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Texinfo-komennot, jotka ohitetaan parametreissa"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Ohitettavat Texinfo-ympäristöt"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "suodatin verkko-osoitetyyppisten rakenteiden ohittamiseen"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "tila C++-kommenttien ja merkkijonoliteraalien tarkistamiseen"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "tila kaikkien #-merkillä alkavien rivien tarkistamiseen"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "tila lainatun tekstin ohittamiseen sähköpostiviesteissä"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "tila HTML-asiakirjojen tarkistamiseen"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "tila ottaa pois käytöstä kaikki suodattimet"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "tila Nroff-asiakirjojen tarkistamiseen"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "tila Perl-kommenttien ja merkkijonoliteraalien tarkistamiseen"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "tila yleisten SGML/XML -asiakirjojen tarkistamiseen"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "tila TeX/LaTex -asiakirjojen tarkistamiseen"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "tila Texinfo-asiakirjojen tarkistamiseen"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "tila ohittaa verkko-osoitetyyppiset rakennelmat (oletustila)"
+
+#~ msgid "filter for Debian packaging control files"
+#~ msgstr "suodatin Debian-pakettiohjaustiedostoja varten"
+
+#~ msgid "filter for Debian DDTP-emails"
+#~ msgstr "suodatin Debian DDTP -sähköposteja varten"
+
+#~ msgid "mode for Debian DDTP-emails"
+#~ msgstr "tila Debian DDTP -sähköposteja varten"
+
+#~ msgid "mode for Debian packaging control files"
+#~ msgstr "tila Debian-pakettiohjaustiedostoja varten"
+
+#~ msgid "enter Debctrl mode."
+#~ msgstr "siirry Debctrl-tilaan."
+
+#~ msgid ""
+#~ "The value \"%value:2\" is not \"%accepted:3\" and is thus invalid for the "
+#~ "key \"%key:1\"."
+#~ msgstr ""
+#~ "Arvo ”%value:2” ei ole ”%accepted:3” ja se on siten virheellinen "
+#~ "valitsimelle ”%key:1”."
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644 (file)
index 0000000..cac5f3e
Binary files /dev/null and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..85f2f1b
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1421 @@
+# -*- mode: po; buffer-file-coding-system: iso-8859-1; default-input-method: latin-1-prefix -*-
+#
+# French messages for GNU Aspell
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008 Th. Thomas
+# This file is distributed under the same license as the aspell package.
+# Note: this file was distributed under the modified BSD license, but the
+# Translation Project Robot does not accept it.
+#
+# Thierry Thomas <thierry@pompo.net>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-05-02 10:36+0200\n"
+"Last-Translator: Thierry Thomas <thierry@pompo.net>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un nombre entre 0 et 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "de la forme « <nom> <valeur> »"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "chaîne"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "entier"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booléen"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "liste"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "ou « true » (vrai) ou « false » (faux)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un entier positif"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# défaut : "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtre : %s\n"
+"#   %s\n"
+"#\n"
+"# configuré ainsi :\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "fichier de configuration principal"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "emplacement du fichier de configuration principal"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "emplacement des fichiers de données par langue"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "créer les alias des dictionnaires"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "emplacement du dictionnaire principal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "encodage attendu des données"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "ajouter ou supprimer un filtre"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "répertoire(s) dans lesquels aspell recherche des filtres"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mode filtre"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "dictionnaires complémentaires"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "emplacement des fichiers personnels"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorer les mots <= n caractères"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+"ignorer les accents lors de la vérification -- NON PRIS EN COMPTE "
+"ACTUELLEMENT"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorer la casse lors de la vérification"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorer les commandes d'enregistrement des paires de substitution"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "information supplémentaire pour le dictionnaire"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "type de clavier considéré pour l'analyse des fautes de frappe"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "code de la langue"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "obsolète, remplacé par lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "emplacement des fichiers de données de la langue locale"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "racine du nom du dictionnaire principal"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "affecter le nom du module"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ordre de recherche des modules"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "autoriser la normalisation Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "normalisation Unicode requise pour la langue courante"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "forme de normalisation Unicode : none (aucune), nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "éviter les conversions avec perte"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "fichier de configuration personnel"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nom de fichier du dictionnaire personnel"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "préfixe du répertoire"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nom du fichier des paires de substitution"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "accepter les mots accolés"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "nombre maximal de mots qui peuvent être accolés"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "longueur minimale des mots accolables"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "enregistrer les paires de subst. si enreg. global"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "affecter le préfixe selon l'emplacement de l'exéc."
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "taille du dictionnaire"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "n'est plus utilisé"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mode de suggestion"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "éditer la distance à utiliser, ignorer sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "utiliser analyseur typographique, ignorer sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "utiliser tables de remplacement, ignorer sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caractères à insérer lors d'une césure"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "utiliser dict. perso. de remplacement et de session"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "chemin de recherche pour infos sur listes de mots"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "autoriser les avertissements"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"indicateur des fanions affixes dans les listes de mots -- NON PRIS EN COMPTE "
+"ACTUELLEMENT"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "utiliser compression des affixes si nouveau dico."
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "enlever les fanions affixes invalides"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "essaye de nettoyer les mots pour les rendre valides"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "ne pas enregistrer les phonèmes mais les calculer"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "affixer partiellement pour meilleures suggestions"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "ignorer les mots invalides"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "vérifier la validité des fanions affixes"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "vérifier que les mots sont valides"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "créer un fichier de sauvegarde en ajoutant « .bak »"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "décaler par octets et non par caractères"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "créer les combinaisons racines/affixes absentes"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "table des touches en mode vérif.: aspell ou ispell"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "inverser l'ordre de la liste de suggestion"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suggérer des remplacements possibles"
+
+# TODO: traduction à reprendre...
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "durée, temps de chargement et de rech. en mode pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Cela peut aussi vouloir dire que le fichier « %s » peut être ouvert en "
+"lecture ou n'existe pas."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Le code Unicode U+%04X n'est pas supporté."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Séquence UTF-8 invalide à la position %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "L'opération n'est pas supportée : %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "La méthode \"%what:1\" n'est pas implantée dans \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1 :"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Impossible d'ouvrir le fichier « %file:1 »"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Impossible d'ouvrir le fichier « %file:1 » en lecture"
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Impossible d'ouvrir le fichier « %file:1 » en écriture"
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Le nom du fichier « %file:1 » est invalide."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Le fichier « %file:1 » n'est pas au format attendu."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Impossible d'ouvrir le répertoire « %dir:1 » en lecture"
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "La clef « %key:1 » est inconnue."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Impossible de modifier la valeur de l'option « %key:1 »."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "La clef « %key:1 » est invalide car différente de %accepted:2."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"La valeur « %value:2 » est différente de %accepted:3 ; elle est donc "
+"invalide pour la clef « %key:1 »."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "La clef « %key:1 » n'est pas une chaîne."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "La clef « %key:1 » n'est pas un entier."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "La clef « %key:1 » n'est pas un booléen."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "La clef « %key:1 » n'est pas une liste."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"La clef « %key:1 » n'a pas de paramètre si elle est préfixée par « reset- »."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"La clef « %key:1 » n'accepte pas de paramètre quand elle est préfixée par "
+"« enable- »."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"La clef « %key:1 » n'a pas de paramètre si elle est préfixée par « dont- » "
+"ou « disable- »."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"La clef « %key:1 » n'a pas de paramètre si elle est préfixée par « clear- »."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "La langue « %lang:1 » est inconnue."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Le phonème « %sl:2 » est inconnu."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "La langue « %lang:1 » n'est pas supportée."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Aucun dictionnaire n'a pu être trouvé pour la langue « %lang:1 »."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr ""
+"La langue attendue était « %lang:1 » mais « %prev:2 » a été rencontrée."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "L'affixe '%aff:1' est corrompu"
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "La condition « %cond:1 » est invalide."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"La condition « %cond:1 » ne garantit pas que « %strip:2 » soit toujours "
+"enlevé."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Le fichier « %file:1 » n'est pas au format attendu. Le fichier doit être en "
+"« %exp:2 », pas en « %got:3 »"
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "L'encodage « %encod:1 » est inconnu."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "L'encodage « %encod:1 » n'est pas supporté."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "La conversion de « %encod:1 » vers « %encod2:2 » n'est pas supportée."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "La chaîne \"%str:1\" est invalide."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Le mot « %word:1 » est invalide."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Le fanion d'affixe « %aff:1 » est invalide pour le mot « %word:2 »."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Le fanion affixe « %aff:1 » ne peut pas être appliqué à « %word:2 »."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "pas un numéro de version"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen a retourné « %return:1 »."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Le fichier « %filter:1 » ne contient aucun filtre."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Le filtre « %filter:1 » n'existe pas."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Erreur due au contrôle des versions."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "La version d'Aspell ne correspond pas à ce que demande le filtre."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "L'option du filtre existe déjà."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "N'utilisez les modificateurs d'option qu'avec les options nommées."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modificateur d'option inconnu."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Erreur dans la description du filtre."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Descripteur d'option vide."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Option « %option:1 » sans doute spécifiée avant le filtre."
+
+# TODO : à revoir.
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Mode de description inconnu « %key:1 »."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Attendu : « %modekey:1 »."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Descripteur de version absent : « aspell »."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "La version d'Aspell ne correspond pas à ce que demande le mode."
+
+# TODO : à revoir.
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Expression du mode magique absente."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Extension vide au caractère %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "erreur « %mode:1 »"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Mode inconnu : « %mode:1 »."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"erreur « %mode:1 » en étendant les modes d'Aspell. (manque de mémoire ?)"
+
+# TODO : à revoir.
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"« %mode:1 » : pas de début pour la recherche magique donnée pour « %"
+"magic:2 »."
+
+# TODO : à revoir.
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"« %mode:1 » : pas d'intervalle pour la recherche magique donnée pour « %"
+"magic:2 »."
+
+# TODO : à revoir.
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "« %mode:1 » : pas d'expression magique disponible pour « %magic:2 »."
+
+# TODO : à revoir.
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"« %mode:1 » : « %magic:2 » : mauvaise expression rationnelle après la "
+"position : « %regerr:3 »."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "« %expression:2 » n'est pas une expression rationnelle valide."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Erreur imprévue : "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Erreur : %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Erreur : "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entrer en mode courrier."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "entrer en mode HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entrer en mode TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "entrer en mode Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Option invalide : %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " n'accepte aucun paramètre."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Vous devez passer un paramètre à « %s »."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Vous devez indiquer une action"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Action inconnue : %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Erreur : vous devez passer au moins %d paramètres à « %s ».\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Entrée invalide"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "AVERTISSEMENT : impossible de passer en mode Nroff : %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Temps de chargement du dictionnaire :"
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Temps de suggestion : %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Vous devez indiquer un nom de fichier."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Un seul nom de fichier peut être passé."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Impossible d'ouvrir le fichier « %s » en lecture"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Correspondance de touches invalide : %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Impossible d'ouvrir le fichier « %s » en écriture. Fichier non enregistré."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorer tout"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Remplacer"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Remplacer tout"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Ajouter"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Ajouter minus."
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abandon"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Sortir"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Voulez-vous vraiment abandonner (o/n) ?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "OoYy"
+
+# remplacer ... par : ...
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "par : "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Désolé, choix invalide !"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "« filter » n'est pas encore implémenté.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+"Impossible de fusionner un dictionnaire principal pour l'instant. Désolé."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"La création et la fusion de dictionnaires personnels ne sont \n"
+"pas encore implémentées.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Désolé, je ne peux pas écraser « %s »"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+"La création et la fusion de listes de remplacement ne sont \n"
+"pas encore implémentées.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "« %s » n'est pas valide pour la commande « munch-list »."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Utilisation : aspell [options] <commande>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<commande> à choisir parmi :"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         affiche une brève notice"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             affiche un message d'aide détaillé"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fich>  vérifier un fichier"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          mode compatible avec « ispell -a »"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    affiche la config. en cours sur la sortie standard"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <clé>     affiche la valeur courante d'une option"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    liste les dictionnaires disponibles / les filtres / les modes"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[options] à prendre parmi :"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             liste les mots mal orthographiés à partir de l'entrée "
+"standard"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       retourne les phonèmes équivalents à chaque mot saisi"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            génère les racines et les affixes possibles"
+
+# TODO: à revoir
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     étend les fanions affixes"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr "  clean [strict]   nettoie une liste de mots des termes invalides"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       affiche la version"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    réduit la taille d'une liste de mots par compression des affixes"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <de> <vers> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    convertit d'un encodage vers un autre"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <de> <norm-map> <vers>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    effectuer la normalisation Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nom>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    affiche, crée ou fusionne un dico. ppal., personnel, ou une liste de "
+"rempl."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      normalisation à utiliser, soit none, internal, ou strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 par Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Dictionnaires disponibles :\n"
+"    Les dictionnaires peuvent être choisis par l'option « -d » ou "
+"« master »\n"
+"    Ils peuvent aussi être choisis indirectement par les options « lang »,\n"
+"    « variety », et « size ».\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtres disponibles (et options associées) :\n"
+"    Des filtres peuvent être ajoutés ou retirés par l'option « filter ».\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filtre : %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Modes de filtrage disponibles :\n"
+"    Les modes de filtrage sont des combinaisons de filtres optimisés pour\n"
+"    des fichiers d'un type donné. Un mode est sélectionné par l'option "
+"« mode ».\n"
+"    Ça se fera implicitement si Aspell est capable d'identifier le type du "
+"fichier\n"
+"    à partir de son extension, et éventuellement de son contenu.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Erreur : l'entrée n'est pas un terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Entrée"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accepter les modifications"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Eff. arrière"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Contrôle-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Supprime le caractère précèdent"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Flèche g."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Contrôle-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Retour d'une espace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Flèche d."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Contrôle-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Avance d'une espace"
+
+# TODO: à revoir
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Contrôle-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Aller au début de la ligne"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Fin"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Contrôle-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Aller à la fin de la ligne"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Suppr."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Contrôle-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Supprimer le caractère suivant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Contrôle-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Supprimer tous les car. jusqu'à la fin de la ligne"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Contrôle-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Arrêter cette opération"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Cela est la cause probable : "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Le champ requis \"name\" est manquant."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Chaîne vide."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Le caractère '%s' (U+%02X) ne peut pas apparaître au début d'un mot."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+"Le caractère '%s' (U+%02X) doit être suivi d'un caractère alphabétique."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Ne contient aucun caractère alphabétique."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Le caractère '%s' (U+%02X) ne peut pas apparaître au milieu d'un mot."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Le caractère '\\r' (U+0D) ne peut pas se trouver à la fin d'un mot. Cela "
+"signifie probablement que le fichier utilise des fins de ligne MS-DOS au "
+"lieu d'Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Le caractère '%s' (U+%02X) ne peut pas apparaître à la fin d'un mot."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Attention : suppression de l'affixe invalide « %s » du mot %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Attention : suppression de l'affixe inapplicable « %s » du mot %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Attention : %s chaîne ignorée.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "La longueur totale dépasse 240 caractères."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Attention : %s mot ignoré.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Décompte probablement incorrect."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Système de poids erroné (endian)."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Phonème erroné."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Version erronée de phonème."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Fanions affixes retrouvés dans le mot mais aucun fichier affixe fourni."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "La longueur totale du mot, phonèmes inclus, dépasse 240 caractères."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Il doit exister au moins une ligne « ajouter »."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "un parmi ultra, fast, normal, slow, ou bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "n'est pas un des types autorisés"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "La liste de mots personnelle est indisponible."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "La liste de mots de session est indisponible."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "La liste de mots principale est indisponible."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "une chaîne de « o », « O », « p », « P »"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtre expérimental cachant les contextes délimités"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "délimiteurs de contexte séparés par des espaces"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "permute le texte visible et invisible"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtre pour éliminer les citations des courriers"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caractères de citation du courrier"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "nbr de car. admissibles avant le car. de citation"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtre pour les documents HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "attributs HTML à vérifier systématiquement"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "balises HTML dont on ignore le contenu"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtre pour traiter les documents Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtre pour les documents SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "attributs SGML à vérifier systématiquement"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "balises SGML dont on ignore le contenu"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtre pour les instructions TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "vérifier les commentaires TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "instructions TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtre pour traiter les documents Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Commandes Texinfo dont on ignore les paramètres"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Environnements Texinfo à ignorer"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtre pour ignorer les URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mode de vérif. des commentaires et chaînes C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mode de vérif. des lignes débutant par un #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mode pour ignorer les passages cités du courrier"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mode de vérif. des pages HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mode sans aucun filtre"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mode de vérif. des pages Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mode de vérif. des commentaires et chaînes Perl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mode de vérif. des documents SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mode de vérif. des documents TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mode de vérif. des documents Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mode pour éliminer les URL (par défaut)"
diff --git a/po/ga.gmo b/po/ga.gmo
new file mode 100644 (file)
index 0000000..9c38015
Binary files /dev/null and b/po/ga.gmo differ
diff --git a/po/ga.po b/po/ga.po
new file mode 100644 (file)
index 0000000..ee31049
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,1400 @@
+# Irish translations for aspell.
+# Copyright (C) 2003 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2003, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.5\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2007-01-31 06:24-05:00\n"
+"Last-Translator: Kevin Patrick Scannell <kscanne@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "uimhir idir 0 agus 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "sa chruth \"<ainm> <luach>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "teaghrán"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "slánuimhir"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "slonn Boole"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "liosta"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" nó \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "slánuimhir dheimhneach"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# réamhshocrú: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Scagaire: %s\n"
+"#   %s\n"
+"#\n"
+"# cumraithe mar leanas:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF athróg thimp"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "príomhchomhad cumraíochta"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "suíomh an phríomhchomhaid cumraíochta"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "suíomh na gcomhad teanga"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "cruthaigh ailiasanna do na foclóirí"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "suíomh an phríomhliosta focal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "an t-ionchódú lena bhfuiltear ag súil"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "cuir scagaire ar obair, nó cuir as feidhm"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "conair(í) ina lorgaíonn aspell scagairí"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mód scagtha"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "foclóirí breise le húsáid"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "suíomh chomhaid phearsanta"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "déan neamhshuim ar fhocail <= n carachtar"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "déan neamhshuim ar síntí fada -- NACH IN ÚSÁID FAOI LÁTHAIR"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "déan neamhshuim ar ceannlitreacha/litreacha beaga"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ná stóráil athfhocail"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "eolas breise don liosta focal"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "méarchlár le húsáid d'anailís mílitrithe"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "cód teanga"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "dulta i léig, bain úsáid as `lang' ina áit"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "suíomh na gcomhad logánta teanga"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "bunainm an fhoclóra phríomha"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "ainmnigh modúl"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "rangú cuardaigh do mhodúil"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "cumasaigh normalú Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Tá gá le normalú Unicode leis an dteanga seo"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Foirm normalaithe Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "seachain tiontuithe neamhfhoirfe le linn normalú"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "comhad cumraíochta pearsanta"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "ainm comhaid d'fhoclóir pearsanta"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "comhadlann réimíre"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "ainm comhaid liosta athfhocal"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "ná taispeáin focail chomhtháite mar earráidí"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "líon uasta is féidir ceangal le chéile"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "fad íosta d'fhocail istigh i bhfocal comhtháite"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "sábháil athfhocail nuair a shábháiltear gach uile"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "socraigh réimír de réir suíomh an chomhaid inrite"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "méid an liosta focal"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "ní úsáidtear a thuilleadh"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mód na moltaí"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "fad eagair le húsáid, sáraigh luach sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "úsáid anailís mílitrithe, sáraigh luach sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "úsáid athfhocail, sáraigh luach sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "carachtar le hionsá agus focal scartha"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "úsáid foclóirí pearsanta, athfhocal, agus seisiún"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "conair chuardaigh d'eolas faoi liostaí focal"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "cumasaigh rabhaidh"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"táscaire do bhratacha foircinn i liostaí focal -- NACH IN ÚSÁID FAOI LÁTHAIR"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "úsáid comhbhrú foircinn agus foclóirí á gcruthú"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "cealaigh bratacha foircinn neamhbhailí"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "glan liosta focal ionas gur bailí iad"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "déan soundslike ar éileamh in ionad é a stóráil"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "leathnaigh foircinn le haghaidh moltaí níos fearr"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "gabh thar fhocail neamhbhailí"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "deimhnigh go bhfuil bratacha foircinn bailí"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "deimhnigh go bhfuil focail bailí"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "cruthaigh comhad cúltaca le hiarmhír \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "úsáid fritháirimh de réir beart vs carachtar"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "déan gach cuingir fréamh/foirceann atá ar iarraidh"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "eochairmhapáil do mhód seiceála: \"aspell\" nó \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "aisiompaigh liosta na moltaí"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "tabhair moltaí d'fhocail mílitrithe"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "tomhais fad ama luchtaithe/molta i mód phíopa"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Is féidir fosta nach bhfuil an comhad \"%s\" ar fáil le haghaidh léamh, nó "
+"níl sé ann ar chor ar bith."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Ní ghlactar leis an gcarachtar Unicode U+%04X."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Sraith UTF-8 neamhbhailí san ionad %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Níl an t-oibriú seo ar fáil: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Níl an fheidhm \"%what:1\" i ngníomh i \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Ní féidir an comhad \"%file:1\" a oscailt"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Ní féidir an comhad \"%file:1\" a oscailt chun é a léamh."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Ní féidir an comhad \"%file:1\" a oscailt chun scríobh air."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Níl an t-ainm comhaid \"%file:1\" bailí."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Níl an comhad \"%file:1\" san fhormáid chuí."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Ní féidir an chomhadlann \"%dir:1\" a oscailt chun é a léamh."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Tá eochair \"%key:1\" anaithnid."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Ní féidir an luach den rogha \"%key:1\" a athrú."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Ní ghlactar le heochair \"%key:1\" agus is neamhbhailí í mar sin."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Ní ghlactar leis an luach \"%value:2\"; mar sin, is neamhbhailí í don "
+"eochair \"%.key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Níl eochair \"%key:1\" ina theaghrán."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Níl eochair \"%key:1\" ina shlánuimhir."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Níl eochair \"%key:1\" ina hathróg Boole."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Níl eochair \"%key:1\" ina liosta."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Ní ghlacann eochair \"%key:1\" le haon pharaiméadar nuair atá réimír \"reset-"
+"\" uirthi."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Ní ghlacann eochair \"%key:1\" le haon pharaiméadar nuair atá réimír "
+"\"enable-\" uirthi."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Ní ghlacann eochair \"%key:1\" le haon pharaiméadar nuair atá réimír \"dont-"
+"\" nó \"disable-\" uirthi."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Ní ghlacann eochair \"%key:1\" le haon pharaiméadar nuair atá réimír \"clear-"
+"\" uirthi."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Níl an teanga \"%lang:1\" ar fáil."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Níl an comhad `soundslike' \"%sl:2\" ar fáil."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Níl an teanga \"%lang:1\" ar fáil."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Níl aon liosta focal le haghaidh na teanga \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Bhíothas ag súil leis an teanga \"%lang:1\" ach fuarthas \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Tá an foirceann '%aff:1' truaillithe."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Tá an coinníoll \"%cond:1\" neamhbhailí."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Ní ráthaíocht sa choinníoll \"%cond:1\" go bhfuil \"%strip:2\" inscriosta."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Níl an comhad \"%file:1\" san fhormáid chuí.  Rabhthas ag súil leis an "
+"bhformáid \"%exp:2\", ní \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Ionchódú anaithnid \"%encod:1\"."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Ní ghlactar leis an bprótacal \"%encod:1\"."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Níl aon fháil ar tiontú ón ionchódú \"%encod:1\" go \"%encod2:2\"."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Tá an teaghrán \"%str:1\" neamhbhailí."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Tá an focal \"%word:1\" neamhbhailí."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+"Tá an bratach fhoircinn '%aff:1' neamhbhailí leis an fhocal \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+"Ní féidir an bratach fhoircinn '%aff:1' a chur i bhfeidhm ar \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "ní uimhir leagain í"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "D'aisfhill dlopen \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Níl aon scagaire sa chomhad \"%filter:1\"."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Níl a leithéid de scagaire \"%filter:1\" ann."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Trína chéile roimh rialachán leaganacha."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Níl an leagan Aspell comhoiriúnach le riachtanas an scagaire."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Tá an rogha scagaire ann cheana."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Ná bain úsáid as mionathraitheoirí rogha ach le rogha cheaptha."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Mionathraitheoir rogha anaithnid."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Earráid agus an cur síos scagaire á shocrú."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Sonraitheoir rogha folamh."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Is féidir go bhfuil an rogha \"%option:1\" tugtha roimh an scagaire."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Eochair mhóid \"%key:1\" anaithnid."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Bhíothas ag súil le heochair \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Sonraitheoir leaganacha gan eochair: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Níl an leagan Aspell comhoiriúnach le riachtanas an mhóid."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Slonn mhóid draíochta ar iarraidh."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Iarmhír folamh ag carachtar %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Earráid \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "mód anaithnid: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "Earráid \"%mode:1\" móid Aspell á bhfadú. (cuimhne ídithe?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": níl aon tosach ar cuardach draíochta le draíocht \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": níl aon raon don chuardach draíochta le draíocht \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": níl aon fháil ar slonn draíochta le draíocht \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Draíocht \"%magic:2\": slonn ionadaíochta neamhbhailí i ndiaidh "
+"sonraitheoir suímh; teachtaireacht ón regexp: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "níl \"%expression:1\" ina slonn ionadaíochta bhailí."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Earráid Gan Réiteach: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Earráid: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Earráid: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "bain úsáid as an mhód R-phoist."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "bain úsáid as an mhód HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "bain úsáid as an mhód TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "bain úsáid as an mhód Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Rogha Neamhbhailí: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " -- ní ghlactar aon pharaiméadar."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Caithfidh tú paraiméadar a thabhairt do rogha \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Caithfidh tú gníomh a thabhairt"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Gníomh Anaithnid: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr ""
+"Earráid: Caithfidh tú %d paraiméadar a thabhairt do \"%s\" ar a laghad.\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Ionchur Neamhbhailí"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "RABHADH: Ní féidir mód Nroff a chur i bhfeidhm: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Fad ama chun an liosta focal a luchtú: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Fad ama chun na moltaí a ghineadh: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Is gá ainm comhaid ar a laghad a thabhairt."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Ní cheadaítear ach aon chomhad amháin."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Níorbh fhéidir an comhad \"%s\" a oscailt chun é a léamh"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Eochairmhapáil neamhbhailí: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Níorbh fhéidir an comhad \"%s\" a oscailt chun é a scríobh.  Ní shábháladh."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Déan neamhshuim"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Déan neamhshuim ar gach"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Ionadaigh"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Ionadaigh gach"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Coinnigh"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Coinnigh le litir bheag"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Tobscoir"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Scoir"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Ar mhaith leat an clár a thobscor (y/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "YySs"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Le: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Tá brón orm; is neamhbhailí an rogha sin!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Tá brón orm; níl \"filter\" ar fáil faoi láthair.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Tá brón orm; ní féidir máistirliosta focal a chumasc go fóill."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Tá brón orm; níl \"create/merge personal\" ar fáil faoi láthair.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Tá brón orm; ní féidir an comhad \"%s\" a fhorscríobh"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Tá brón orm; níl \"create/merge repl\" ar fáil faoi láthair.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "ní bailí é \"%s\" mar bhratach le haghaidh \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Úsáid: aspell [roghanna] <ordú>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "tá <ordú> ceann de:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         taispeáin achoimre den úsáid"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             taispeáin mioneolas maidir leis an úsáid"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <comhad> seiceáil comhad"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          mód comhoiriúnachta \"ispell -a\""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    taispeáin an chumraíocht reatha go stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <eochair> taispeáin an luach de rogha"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    taispeáin foclóirí / scagairí / móid atá ar fáil"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "is iad [roghanna] ceann amháin nó níos mó de:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             taispeáin focail mhílitrithe ón ionchur caighdeánach"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       aisfhill leagan `soundslike' do gach focal iontráilte"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            gin fréamhfhocail agus foircinn barúlacha"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     leathnaigh bratacha foircinn"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr "  clean [strict]   deimhnigh go bhfuil gach focal i liosta bailí"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       taispeáin eolas faoin leagan"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    laghdaigh liosta focal trí chomhbhrú foircinn"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <ó> <chuig>  [<foirm-norm>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    tiontaigh ó ionchódú go ceann eile"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<mapáil> | <ó> <mapáil> <chuig>) [<foirm-norm>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    déan normalú Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<ainm>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    dumpáil, cruthaigh, nó cumaisc foclóir máistir, pearsanta, nó athfhocal."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <foirm-norm>      foirm normalaithe le húsáid, none, internal, nó strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 le Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Foclóirí le fáil:\n"
+"    Is féidir foclóirí a roghnú go díreach leis an rogha \"-d\" nó \"master"
+"\"\n"
+"    Is féidir iad a roghnú fosta leis na roghanna \"lang\", \"variety\",\n"
+"    agus \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Scagairí le fáil (agus roghanna gaolmhara):\n"
+"    Is féidir scagairí a chur isteach nó baint amach leis an rogha \"filter"
+"\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Móid Scagtha le fáil:\n"
+"    Is iad seo cnuasaigh athchumraithe de scagairí atá optamaithe le "
+"haghaidh\n"
+"    comhaid ar leith.  Roghnaigh móid leis an rogha \"mode\".\n"
+"    Roghnaíonn Aspell an mód go huathoibríoch más féidir an comhad a "
+"aithint\n"
+"    óna iarmhír nó (b'fhéidir) óna ábhar.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Earráid: níl stdin ina theirminéal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Glac le hathruithe"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Scrios an carachtar roimhe seo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Left"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Cúlaigh aon spás"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Right"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Ar aghaidh aon spás"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Téigh go tosach na líne"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Téigh go deireadh na líne"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Scrios an carachtar seo chugainn"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Scrios gach carachtar go dtí an EOL"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Tobscoir an Oibríocht Seo"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Is dócha é seo de bharr: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Tá an réimse riachtanach \"name\" ar iarraidh."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Teaghrán folamh."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Ní cheadaítear an carachtar '%s' (U+%02X) ar dtús focail."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Ní foláir carachtar aibítreach a chur tar éis '%s' (U+%02X)."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Níl aon charachtar aibítreach ann."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Ní cheadaítear an carachtar '%s' (U+%02X) sa lár focail."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Ní cheadaítear '\\r' (U+0D) ag deireadh focail.  Is dócha go bhfuil EOL MS-"
+"DOS sa chomhad in ionad EOL Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Ní cheadaítear an carachtar '%s' (U+%02X) ag deireadh focail."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Rabhadh: Ag cealú foircinn neamhbhailí '%s' ón fhocal %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Rabhadh: Ag cealú foircinn '%s' gan úsáid ón fhocal %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Rabhadh: %s Ag gabháil thar theaghrán.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Tá an fad focail níos mó ná 240 carachtar ina iomláine."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Rabhadh: %s Ag gabháil thar fhocal.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "B'fhéidir líon mícheart."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Ord caolcheannach/mórcheannach mícheart."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Comhad `soundslike' mícheart."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Leagan `soundslike' mícheart."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Tá bratacha foircinn ann, ach níl aon chomhad foircinn ann."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Tá an fad focail, le sonraí soundslike san áireamh, níos mó ná 240 carachtar."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Caithfidh líne amháin \"add\" ar a laghad a bheith ann."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+"ceann de \"ultra\", \"fast\", \"normal\", \"slow\", nó \"bad-spellers\""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "ní ceann de na cineálacha ceadaithe é"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Níl an liosta focal pearsanta le fáil."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Níl liosta focal an tseisiúin le fáil."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Níl an príomhliosta focal le fáil."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "teaghrán déanta as 'o','O','p',nó 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "scagaire chun comhthéacs teorannaithe a chur i bhfolach"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "teormharcóirí comhthéacs (scartha le spás)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "babhtáil téacs infheicthe agus dofheicthe"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "scagaire chun gabháil thar théacs athfhriotail i r-phost"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "carachtair athfhriotail sa r-phost"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "líon carachtar roimh an charachtar athfhriotail"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "scagaire le haghaidh cáipéisí HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "aitreabúidí HTML le seiceáil i gcónaí"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "clibeanna HTML le scipeáil i gcónaí"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "scagaire le haghaidh cáipéisí Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "scagaire le haghaidh cáipéisí SGML/XML ginearálta"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "aitreabúidí SGML le seiceáil i gcónaí"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "clibeanna SGML le scipeáil i gcónaí"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Scagaire le haghaidh cáipéisí TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "seiceáil nótaí tráchta TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "orduithe TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "scagaire le haghaidh cáipéisí Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Déan neamhaird de na horduithe Texinfo seo:"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Déan neamhaird de na timpeallachtaí Texinfo seo:"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "scagaire chun teaghráin mar URLanna a scipeáil"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mód le haghaidh nótaí tráchta C++ agus teaghráin"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mód le haghaidh línte le # ar dtús"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "gabh thar théacs athfhriotail i dteachtaireachtaí r-phoist"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mód le haghaidh cáipéisí HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "díchumasaigh gach scagaire"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mód le haghaidh cáipéisí Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mód le haghaidh nótaí tráchta agus teaghráin i bPerl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mód le haghaidh cáipéisí ginearálta SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mód le haghaidh cáipéisí TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mód le haghaidh cáipéisí Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+"mód le haghaidh scipeáil thar theaghráin mar URLanna (mód réamhshocraithe)"
+
+#~ msgid "filter for processing Nroff documents"
+#~ msgstr "scagaire le haghaidh cáipéisí Nroff"
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644 (file)
index 0000000..e0bea08
Binary files /dev/null and b/po/id.gmo differ
diff --git a/po/id.po b/po/id.po
new file mode 100644 (file)
index 0000000..aeaf812
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,1400 @@
+# Pesan bahasa indonesia untuk aspell
+# Copyright (C) 2008 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-11-11 10:15+0700\n"
+"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "sebuah angka diantara 0 dan 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "dalam bentuk \"<nama> <nilai>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "string"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "integer"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "daftar"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "baik \"benar\" atau \"salah\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "sebuah integer positif"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# baku: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Saringan: %s\n"
+"#   %s\n"
+"#\n"
+"# dikonfigurasikan sebagai berikut:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "berkas konfigurasi utama"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "lokasi dari berkas konfigurasi utama"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "lokasi dari berkas data bahasa"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "buat alias kamus"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "lokasi dari daftar kata utama"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "pengkodean menduga data berada dalam"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "tambah atau hapus sebuah penyaring"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "jalur aspell yang digunakan untuk mencari penyaring"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mode penyaring"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "kamus ekstra untuk digunakan"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "lokasi dari berkas personal"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "abaikan kata <= n chars"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "abaikan aksen ketika memeriksa kata -- SAAT INI DIABAIKAN"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "abaikan besar huruf ketika memeriksa kata"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "abaikan perintah ketika menyimpan pasangan pengganti"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informasi ekstra dari daftar kata"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definisi keyboard untuk digunakan analisis typo"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "kode bahasa"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "ditinggalkan, lebih baik gunakan lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "lokasi dari bahasa lokal berkas data"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "nama basis dari kamus utama untuk digunakan"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "set nama modul"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "urutan pencarian untuk modul"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "aktifkan normalisasi Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Normalisasi unicode dibutuhkan untuk bahasa sekarang"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Unicode normalisasi bentuk: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "hindari konversi lossy ketika normalisasi"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "berkas konfigurasi personal"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "kamus nama berkas personal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "prefix directory"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "daftar pencarian nama berkas"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "pertimbangkan kata jalan-bersama legal"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "jumlah maksimal yang dapat di strung bersama"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "jumlah minimal dari kata interior"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "simpan pasangan pengganti di simpan semua"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "set awalan berbasis di lokasi eksekusi"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "ukuran dari daftar kata"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "tidak lagi digunakan"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mode saran"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "ubah jarak untuk digunakan, override mode-saran baku"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "gunakan analisis tipo, override mode-saran baku"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "gunakan tabel pengganti, override mode-saran baku"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "karakter untuk dimasukan ketika kata dipisahkan"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "gunakan personal, penggantian & kamus sesi"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "jalur pencarian untuk berkas daftar kata informasi"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "aktifkan peringatan"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indikator untuk opsi affix dalam daftar kata -- SAAT INI DIABAIKAN"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "gunakan kompresi affix ketika membuat kamus"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "hapus opsi affix tidak valid"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "mencoba untuk menghapus kata jadi mereka valid"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "hitung soundslike di permintaan daripada penyimpanan"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "secara terpisah ekspan affixes untuk saran yang lebih baik"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "lewati kata tidak valid"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "periksa jik opsi affix valid"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "periksa jika kata valid"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "buat sebuah berkas backup dengan menambahkan \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "gunakan byte ofset daripada karakter ofset"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "buat kombinasi yang hilang root/affix"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "pemetaan kunci untuk mode pemeriksaan: \"aspell\" atau \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "urutan terbali dari daftar saran"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "saran mungkin penggantian"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "waktu load waktu dan waktu saran dalam mode pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Ini dapat juga berarti kalau berkas \"%s\" tidak dapat dibuka untuk "
+"pembacaan atau juga tidak ada."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Kode unicode menunjuk ke U+%04X tidak didukung."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Urutan UTF-8 di posisi %ld tidak valid."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operasi Tidak DIdukung: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metode \"%what:1\" tidak diimplementasikan dalam \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Berkas \"%file:1\" tidak dapat dibuka"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Berkas \"%file:1\" tidak dapat dibuka untuk pembacaan."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Berkas \"%file:1\" tidak dapat dibuka untuk penulisan."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Nama berkas \"%file:1\" tidak valid."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Berkas \"%file:1\" tidak dalam format yang sesuai."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Direktori \"%dir:1\" tidak dapat dibuka untuk pembacaan."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Tombol \"%key:1\" tidak diketahui."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Nilai untuk opsi \"%key:1\" tidak dapat diubah."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Tombol \"%key:1\" tidak %accepted:2 dan ini juga tidak valid."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Nilai \"%value:2\" tidak %accepted:3 dan ini juga tidak valid untuk kunci \"%"
+"key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Tombol \"%key:1\" bukan sebuah string."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Tombol \"%key:1\" bukan sebuah integer."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Tombol \"%key:1\" bukan sebuah boolean."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Tombol \"%key:1\" tidak ada dalam daftar."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Tombol \"%key:1\" tidak mengambil parameter apapun ketika diawali oleh "
+"sebuah \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Tombol \"%key:1\" tidak mengambil parameter apapun ketika diawali dengan "
+"sebuah \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Tombol \"%key:1\" tidak mengambil parameter apapun ketika diawali dengan "
+"sebuah \"dont-\" atau \"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Tombol \"%key:1\" tidak mengambil parameter apapun ketika diawali dengan "
+"sebuah \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Bahasa \"%lang:1\" tidak diketahui."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Sounslike \"%sl:2\" tidak diketahui."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Bahasa \"%lang:1\" tidak didukung."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Tidak ada daftar kata yang dapat ditemukan untuk bahasa \"%lang:1\""
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Bahasa yang diduga \"%lang:1\" tetapi diperoleh \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Affix '%aff:1' terkorupsi."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Kondisi \"%cond:1\" tidak valid."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Kondisi \"%cond:1\" tidak menjamin jika \"%strip:2\" dapat selalu dihapus."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Berkas \"%file:1\" tidak dapat format yang baik. Diduga berkas berada dalam "
+"\"%exp:2\" bukan \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Pengkodean \"%encod:1\" tidak diketahui."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Pengkodean \"%encod:1\" tidak didukung."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Konversi dari \"%encod:1\" ke \"%encode2:2\" tidak didukung."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "String \"%str:1\" tidak valid."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Kata \"%word:1\" tidak valid."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Opsi affix '%aff:1' tidak valid untuk kata \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Opsi affix '%aff:1' tidak dapat diaplikasikan ke kata \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "bukan sebuah nomor versi"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen mengembalikan \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Berkas \"%filter:1\" tidak berisi penyaring apapun."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Saringan \"%filter:1\" tidak ada."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Dibuat bingung oleh pengontrol versi."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Versi aspell tidak cocok dengan persyaratan penyaring."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Opsi filter telah ada."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Gunakan hanya pemodifikasi opsi didalam opsi bernama."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Pemodifikasi opsi tidak diketahui."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Deskripsi konfigurasi penyaring error."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Opsi penspesifikasi kosong."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Opsi \"%option:1\" mungkin dispesifikasikan sebelum penyaring."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Tombol mode deskripsi \"%key:1\" tidak diketahui."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Menduga kunci \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Penspesifikasi versi hilang kunci: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Versi aspell tidak cocok dengan persyaratan mode."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Hilang mode ekspresi magik."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Ekstensi kosong di char %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\" error"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Mode tidak diketahui: \"%mode:1\""
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "\"%mode:1\" error ketika extend mode aspell. (kehabisan memori?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": tidak ada awal untuk magik pencarian diberikan oleh magik \"%"
+"magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": tidak dalam jangkauan untuk pencarian magik diberikan untuk "
+"magik \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": tidak ada ekspresi magik yang tersedia untuk magik \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": ekspresi regular buruk setelah "
+"penspesifikasi lokasi; regexp melaporkan: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" bukan sebuah ekspresi regular yang valid."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Error tidak tertangani: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Error: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Error: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "masuk mode Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "masuk mode HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "masuk mode TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "masuk mode Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opsi tidak valid: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " tidak mengambil parameter apapun."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Anda harus menspesifikasikan sebuah parameter untuk \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Anda harus menspesifikasikan sebuah aksi"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Aksi tidak diketahui: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr ""
+"Error: Anda harus menspesifikasikan paling tidak %d parameter untuk \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Masukan tidak valid"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "PERINGATAN: Tidak dapat memasuki mode Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Waktu untuk meload daftar kata: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Waktu Saran: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Anda harus menspesifikasikan sebuah nama berkas."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Hanya satu nama berkas yang boleh dispesifikasikan."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Tidak dapat membuka berkas \"%s\" untuk pembacaan"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Pemetaan kunci tidak valid: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Tidak dapat membuka berkas \"%s\" untuk penulisan. Berkas tidak disimpan."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Diabaikan"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Abaikan semua"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Ganti"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Ganti semua"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Tambah"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Tambah Lebih kecil"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Batalkan"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Keluar"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Apakah anda yakin untuk membatalkan (y/t)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Yy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Dengan: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Maaf itu adalah sebuah pilihan yang tidak valid!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Maaf \"filter\" saat ini tidak terimplementasi.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Tidak dapat menggabungkan daftar kata master. Maaf."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Maaf \"create/merge personal\" saat ini belum diimplementasikan.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Maaf Saya tidak akan overwrite \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Maaf \"create/merge repl\" saat ini belum diimplementasikan.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" bukan sebuah opsi valid untuk perintah \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Penggunaan: aspell [opsi] <perintah>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<perintah> salah satu dari:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         tampilkan pesan penggunaan singkat"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             tampilkan sebuah pesan bantuan lengkap"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <file>  untuk memeriksa sebuah berkas"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" mode kompabilitas"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    dump konfigurasi sekarang di stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <kunci>   tampilkan nilai sekaran dari sebuah opsi"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    daftar kamus yang tersedia / filters / filter modes"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[opsi] adalah salah satu dari berikut:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             menghasilkan sebuah daftar dari kata yang salah sebut\n"
+"                   dari standar masukan"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       mengembalikan sound like ekuivalen untuk setiap kata\n"
+"                   yang dimasukan"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            hasilkan kemungkinan akar kata dan affixes"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     ekspan affix flags"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   bersihkan sebuah daftar kata jadi setiap baris adalah\n"
+"                   sebuah kata valid"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       tampilkan sebuah baris versi"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    kurangi ukuran dari sebuah daftar kata melalui kompresi affix"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <dari> <ke> [<bentuk-normal>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    ubah dari satu pengkodean ke yang lain"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <dari> <norm-map> <ke>) [<bentuk-normal>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    lakuan normalisasi Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nama>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    dumps, buat atau gabungkan sebuah master, personal, atau kamus pengganti."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <bentuk-normal>  normalisasi dari bentuk untuk menggunakan baik, none, "
+"internal, atau strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Hak Cipta 2000-2011 oleh Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Kamus yang tersedia:\n"
+"    Kamus bisaa dipilih secara langsung melalui opsi \"-d\" atau \"master\"\n"
+"    . Mereka juga dapat dipilih secara tidak langsung melalui opsi \"lang"
+"\",\n"
+"    \"variety\", dan \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Saringan yang tersedia (dan opsi yang berasosiasi):\n"
+"    Saringan dapat ditambahkan atau dihapus melalui opsi \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s penyaring: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Mode Penyaring yang tersedia:\n"
+"    Mode penyaring adalah kombinasi rekonfigurasi dari filter yang \n"
+"    dioptimasi untuk berkas dari tipe yang dispesifikasikan. Sebuah mode\n"
+"    dipilih melalui opsi \"mode\".\n"
+"    Ini akan terjadi secara implisit jika Aspell mampu untuk\n"
+"    mengidentifikasikan tipe berkas dari ekstensi, dan kemungkinan isinya, "
+"dari berkas\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Error: Stdin bukan sebuah terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Terima Perubahan"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Bacspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "CTRL-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Hapus karakter sebelumnya"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Kiri"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "CTLR-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Pindah kembali satu spasi"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Kanan"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "CTRL-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Pindah kedepan satu spasi"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "CTRL-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Pindah ke awal dari baris"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "CTRL-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Pindah ke akhir dari baris"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "CTRL-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Delete ke karakter selanjutnya"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "CTRL-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Bunuh semua karakter sampai EOL"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "CTRL-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Batalkan Operasi Ini"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Ini mungkin disebabkan oleh: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Field yang dibutuhkan \"name\" hilang."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "String kosong."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Karakter '%s' (U+%02X) tidak boleh muncul diawal dari sebuah kata."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Karakter '%s' (U+%02X) harus diikuti oleh sebuah karakter alphabet."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Tidak berisi karakter alphabet apapun."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Karakter '%s' (U+%02X) tidak boleh muncul ditengah dari sebuah kata."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Karakter '\\r' (U+0D) tidak boleh muncul diakhir dari sebuah kata. Ini "
+"mungkin berarti bahwa berkas tersebut menggunakan MS-DOS EOL daripada Unix "
+"EOL."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Karakter '%s' (U+%02X) tidak boleh muncul diakhir dari sebuah kata."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Peringatan: Menghapus affix '%s' tidak valid dari kata %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Peringatan: Menghapus affix '%s' tidak teraplikasi dari kata %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Peringatan: %s Melewatkan string.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Panjang total lebih besar dari 240 karakter."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Peringatan: %s Melewatkan kata.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Mungkin jumlah tidak benar."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Pengurutan endian salah."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Soundslike salah."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Versi soundslike salah."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Opsi affix ditemukan dalam kata tetapi tidak ada berkas affix yang diberikan."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Panjang total kata, dengan data soundslike, lebih besar dari 240 karakter."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Disana harus ada paling tidak satu baris \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "salah satu dari ultra, fast, normal, slow, atau bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "adalah bukan dari salah satu tipe yang diijinkan"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Daftar kata personal tidak tersedia."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Daftar kata sesi tidak tersedia."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Daftar kata utama tidak tersedia."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "sebuah string dari 'o', 'O', 'p', atau 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "penyaring experimental untuk menyembunyikan konteks pembatas"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "pembatas konteks (dipisahkan oleh spasi)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "tukar dapat dilihat dan teks tidak terlihat"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "penyaring untuk melewatkan teks terquote dalam pesan email"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "karakter quote email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "jumlah karakter yang dapat muncul sebelum karakter quote"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "penyaring untuk menghadapi dengan dokumen HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atribut HTML untuk selalu diperiksa"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "tags HTML untuk selalu dilewatkan isi dari"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "penyaring untuk menghadapi dengan dokumen Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "penyaring untuk menghadapi dengan dokumen generik SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atribut SGML ke selalu periksa"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "tag SGML untuk selalu melewatkan isi dari"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "penyaring untuk menghadapi dengan dokumen TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "periksa komentar TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "perintah TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "penyaring untuk menghadapi dengan dokumen Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Perintah texinfo untuk mengabaikan parameter dari"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "lingkungan texinfo untuk diabaikan"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "penyaring untuk melewatkan URL seperti konstruk"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mode untuk pemeriksaan komentar C++ dan string literals"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mode untuk pemeriksaan baris apapun diawali dengan sebuah #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mode untuk melewatkan quoted teks dalam pesan email"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mode untuk pemeriksaan dokumen HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mode untuk menonaktifkan semua filter"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mode untuk pemeriksaan dokumen Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mode untuk pemeriksaan komentar Perl dan string literals"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mode untuk pemeriksaan generik dokumen SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mode untuk pemeriksaan dokumen TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mode untuk pemeriksaan dokumen Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mode untuk melewatkan URL seperti konstruk (mode baku)"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644 (file)
index 0000000..b26de01
--- /dev/null
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644 (file)
index 0000000..b3a5876
Binary files /dev/null and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..caa7dfe
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1410 @@
+# Italian messages for GNU Aspell
+# Copyright (C) 2004 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Cristian Rigamonti <cri@linux.it>, 2006.
+# Thanks to Marco Colombo for initial work and suggestions.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-05-01 21:36+0200\n"
+"Last-Translator: Cristian Rigamonti <cri@linux.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un numero tra 0 e 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "nella forma \"<nome> <valore>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "stringa"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "intero"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleano"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "lista"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" oppure \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un intero positivo"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# predefinito: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtro: %s\n"
+"#   %s\n"
+"#\n"
+"# configurato nel modo seguente:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "var. di ambiente ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "file di configurazione principale"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "posizione del file di configurazione principale"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "posizione dei file di dati delle lingue"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "crea gli alias del dizionario"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "posizione della lista di parole principale"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codifica attesa dei dati"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "aggiunge o rimuove un filtro"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "percorsi in cui aspell cerca i filtri"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "modalità di filtro"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "dizionari aggiuntivi da usare"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "posizione dei file personali"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignora le parole <= n caratteri"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+"ignora gli accenti durante il controllo ortografico -- AL MOMENTO IGNORATO"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignora maiuscole e minuscole durante il controllo ortografico"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignora i comandi che salvano coppie di sostituzione"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informazioni addizionali per la lista delle parole"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "tipo di tastiera da usare per l'analisi degli errori di digitazione"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "codice della lingua"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "deprecato, si usi lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "posizione dei file locali di dati delle lingue"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "basename del dizionario principale da usare"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "imposta il nome del modulo"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ordine di ricerca per i moduli"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "abilita la normalizzazione Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "normalizzazione Unicode richiesta per la lingua"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Forma di normalizzazione: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "normalizzazione: evita conversioni con perdite"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "file di configurazione personale"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nome del file del dizionario personale"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "directory base predefinita"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nome del file della lista sostituzioni"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considera legali le parole composte"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "numero massimo di parole componibili"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "lunghezza minima delle parole componibili"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "salva le coppie di sostituzione se si salva tutto"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "il prefisso seguirà la posizione dell'eseguibile"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "dimensione della lista di parole"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "non più usato"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "modalità di suggerimento"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "modifica la distanza da usare, prevale su sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "usa analisi dei refusi, prevale su sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "usa tabelle di sostituzione, prevale su sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caratteri da inserire se una parola è suddivisa"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "usa dizionari personali, di sostituzione e di sessione"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "percorso per i file informativi delle liste"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "abilita avvisi"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"indicatore per i flag degli affissi nelle liste di parole -- AL MOMENTO "
+"IGNORATO"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "usa la compressione degli affissi"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "rimuovi flag degli affissi non validi"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "cerca di correggere le parole non valide"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "calcola il soundslike solo su richiesta"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "espande parzialmente gli affissi per suggerimenti"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "salta le parole non valide"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "controlla la validità dei flag degli affissi"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "controlla la validità delle parole"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "crea un file di backup aggiungendo \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "usa gli offset in byte invece che in caratteri"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "crea le combinazioni mancanti radice/affisso"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "tasti in modalità controllo: \"aspell\" o \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "inverti l'ordine della lista suggerimenti"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "suggerisci possibili sostituti"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "misura i tempi in modalità pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Questo potrebbe anche significare che il file \"%s\" non può essere aperto "
+"in lettura o che non esiste."
+
+#  code point?
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Il code point Unicode U+%04X non è supportato."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Sequenza UTF-8 non valida alla posizione %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operazione non consentita: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Il metodo \"%what:1\" non è implementato in \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Il file \"%file:1\" non può essere aperto"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Il file \"%file:1\" non può essere aperto in lettura."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Il file \"%file:1\" non può essere aperto in scrittura."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Il nome di file \"%file:1\" non è valido."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Il file \"%file:1\" non è nel formato corretto."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "La directory \"%dir:1\" non può essere aperta in lettura."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "L'opzione \"%key:1\" è sconosciuta."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Il valore dell'opzione \"%key:1\" non può essere modificato."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "L'opzione \"%key:1\" non è %accepted:2 e quindi non è valida."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Il valore \"%value:2\" non è %accepted:3 e quindi non è valido per l'opzione "
+"\"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "L'opzione \"%key:1\" non è una stringa."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "L'opzione \"%key:1\" non è un intero."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "L'opzione \"%key:1\" non è un valore booleano."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "L'opzione \"%key:1\" non è una lista."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"L'opzione \"%key:1\" non accetta parametri quando è prefissata da \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"L'opzione \"%key:1\" non accetta parametri quando è prefissata da \"enable-"
+"\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"L'opzione \"%key:1\" non accetta parametri quando è prefissata da \"dont-\" "
+"o \"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"L'opzione \"%key:1\" non accetta parametri quando è prefissata da \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "La lingua \"%lang:1\" è sconosciuta."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Il soundslike \"%sl:2\" è sconosciuto."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "La lingua \"%lang:1\" non è supportata."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr ""
+"Non è possibile trovare alcuna lista di parole per la lingua \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Invece della lingua \"%lang:1\" trovato \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "L'affisso '%aff:1' è danneggiato."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "La condizione \"%cond:1\" non è valida."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"La condizione \"%cond:1\" non garantisce che \"%strip:2\" possa sempre "
+"essere rimosso."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Il file \"%file:1\" non è nel formato richiesto. Il file dev'essere in \"%"
+"exp:2\" non \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "La codifica \"%encod:1\" è sconosciuta."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "La codifica \"%encod:1\" non è supportata."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "La conversione da \"%encod:1\" a \"%encod2:2\" non è supportata."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "La stringa \"%str:1\" non è valida."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "La parola \"%word:1\" non è valida."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Il flag dell'affisso '%aff:1' non è valido per la parola \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+"Il flag dell'affisso '%aff:1' non può essere applicato alla parola \"%word:2"
+"\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "non è un numero di versione"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen ha restituito \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Il file \"%filter:1\" non contiene alcun filtro."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Il filtro \"%filter:1\" non esiste."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Confusione nel controllo di versione."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "La versione di Aspell non coincide con la richiesta del filtro."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "L'opzione del filtro esiste già."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+"I modificatori di opzioni vanno usati solo all'interno dell'opzione "
+"specificata."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modificatore di opzione sconosciuto."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Errore nell'impostare la descrizione del filtro."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Specificatore di opzione vuoto."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Opzione \"%option:1\" specificata prima del filtro."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Descrizione di modalità sconosciuta \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Opzione attesa: \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Opzione mancante per la versione: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+"La versione di aspell non corrisponde a quella richiesta dalla modalità."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Espressione magic mode mancante."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Estensione vuota al carattere %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\" errore"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Modalità sconosciuta: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"\"%mode:1\" errore nell'estensione modalità di Aspell (memoria esaurita?)."
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": non è stato indicato un inizio per la ricerca magic \"%magic:2"
+"\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": non è stato indicato un intervallo per la ricerca magic \"%"
+"magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": non è disponibile alcuna espressione per la ricerca magic \"%"
+"magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": espressione regolare scorretta dopo lo "
+"specificatore di locazione; regexp restituisce: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" non è un'espressione regolare valida."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Errore non riconosciuto: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Errore: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Errore: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entra in modalità Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "entra in modalità HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entra in modalità TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "entra in modalità Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opzione non valida: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr "non accetta alcun parametro."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Occorre specificare un parametro per \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Occorre specificare un'azione"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Azione sconosciuta: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Errore: occorre specificare almeno %d parametri per \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Input non valido"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "ATTENZIONE: impossibile entrare in modalità Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tempo di caricamento della lista di parole: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Tempo di suggerimento: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Occorre specificare un nome di file."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Può essere specificato solo un nome di file."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Impossibile aprire il file \"%s\" per la lettura"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Combinazione di tasti non valida: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Impossibile aprire il file \"%s\" per la scrittura. File non salvato."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignora"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignora tutti"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Rimpiazza"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Rimpiazza tutti"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Aggiungi"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Aggiungi minuscolo"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abbandona"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Esci"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Abbandonare davvero (s/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "YySs"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Con: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "La scelta non è valida!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Attenzione: \"filter\" non è ancora implementato.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Non è ancora possibile unire una lista di parole master."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Attenzione: \"create/merge personal\" non è ancora implementato.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Attenzione: \"%s\" non verrà sovrascritto"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Attenzione: \"create/merge repl\" non è ancora implementato.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" non è un flag valido per il comando \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Uso: aspell [opzioni] <comando>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "Il <comando> può essere uno dei seguenti:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         mostra un breve messaggio di aiuto"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             mostra un messaggio di aiuto dettagliato"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <file>  controlla un file"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          modalità compatibile con \"ispell -a\""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    mostra l'intera configurazione attuale"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <opzione> mostra il valore attuale di un'opzione"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    elenca i dizionari / filtri / modalità di filtro disponibili"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "Le [opzioni] possono essere le seguenti:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             produce un elenco delle parole errate dallo standard input"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       mostra l'equivalente soundslike per ogni parola immessa"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            genera le radici e gli affissi possibili"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     espande i flag degli affissi"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   corregge una lista di parole in modo che ogni riga sia "
+"una parola valida"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       mostra la versione"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+"    riduce la dimensione di una lista di parole comprimendo gli affissi"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    converte da una codifica a un'altra"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    esegue normalizzazione Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nome>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    mostra, crea o unisce un dizionario \"master\", \"personal\", o "
+"\"replacement\"."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      normalizzazione da usare: essere \"none\", \"internal\", "
+"o \"strict\""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Dizionari disponibili:\n"
+"    I dizionari possono essere scelti direttamente con le opzioni \"-d\"\n"
+"    o \"master\". Possono essere scelti anche in modo indiretto con le\n"
+"    opzioni \"lang\", \"variety\" e \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtri disponibili (e opzioni associate):\n"
+"    I filtri possono essere aggiunti o rimossi con l'opzione \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filtro: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Modalità di filtro disponibili:\n"
+"    Le modalità di filtro sono combinazioni di filtri riconfigurate e "
+"ottimizzate\n"
+"    per file di tipo particolare. È possibile scegliere una modalità con\n"
+"    l'opzione \"mode\". Se Aspell riesce a identificare il tipo di file\n"
+"    dall'estensione o dal contenuto, la scelta avviene automaticamente.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Errore: lo stdin non è un terminale."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Invio"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accetta le correzioni"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Cancella il carattere precedente"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Sinistra"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Arretra di un carattere"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Destra"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Avanza di un carattere"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Inizio"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Va all'inizio della riga"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Fine"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Va alla fine della riga"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Canc"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Cancella il carattere seguente"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Cancella tutti i caratteri fino alla fine della riga"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Abbandona questa operazione"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Probabilmente il motivo è: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Manca il campo \"name\" richiesto."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Stringa vuota."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Il carattere '%s' (U+%02X) non può comparire all'inizio di una parola."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+"Il carattere '%s' (U+%02X) deve essere seguito da un carattere alfabetico."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Non contiene alcun carattere alfabetico."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Il carattere '%s' (U+%02X) non può comparire in mezzo a una parola."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Il carattere '\\r' (U+0D) non può comparire alla fine di una parola. "
+"Probabilmente il file usa terminatori di riga MS-DOS invece che Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Il carattere '%s' (U+%02X) non può comparire alla fine di una parola."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Attenzione: rimosso affix non valido '%s' dalla parola %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Attenzione: rimosso affix non applicabile '%s' dalla parola %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Attenzione: %s stringa saltata.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "La lunghezza totale supera i 240 caratteri."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Attenzione: %s parola saltata.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Possibile conteggio errato."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Ordine endian sbagliato."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Soundslike sbagliato."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Versione sbagliata di soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Trovati dei flag affix nella parola, ma non è stato indicato alcun file "
+"affix."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"La lunghezza totale della parola, con i dati soundslike, supera i 240 "
+"caratteri."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Deve esserci almeno una riga \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "ultra, fast, normal, slow, o bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "non è di nessuno dei tipi permessi"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "La lista di parole personale non è disponibile."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "La lista di parole di sessione non è disponibile."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "La lista di parole principale non è disponibile."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "una stringa 'o','O','p',o 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtro sperimentale: nasconde contesti delimitati"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "delimitatori di contesto (separati da virgola)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "scambia testo visibile e invisibile"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtro per saltare testo citato nelle email"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caratteri di citazione nelle email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "numero di caratteri prima del car. di citazione"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtro per i documenti HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "attributi HTML da controllare sempre"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "tag HTML di cui ignorare il contenuto"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtro per i documenti Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtro per i documenti SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "attributi SGML da controllare sempre"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "tag SGML di cui ignorare il contenuto"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filtro per i documenti TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "controlla i commenti TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "comandi TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtro per i documenti Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "comandi Texinfo di cui ignorare i parametri"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "ambienti Texinfo da ignorare"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtro per saltare URL e costrutti simili"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "modalità per controllare i commenti C++ e le stringhe letterali"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "modalità per controllare tutte le righe inizianti per #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "modalità per ignorare il testo citato nei messaggi email"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "modalità per controllare i documenti HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "modalità per disabilitare tutti i filtri"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "modalità per controllare i documenti Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "modalità per controllare i commenti Perl e le stringhe letterali"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "modalità per controllare i documenti SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "modalità per controllare i documenti TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "modalità per controllare i documenti Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "modalità per saltare URL e costrutti simili"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644 (file)
index 0000000..196e956
Binary files /dev/null and b/po/ja.gmo differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..b03f2c4
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,1386 @@
+# Japanese translation for aspell
+# Copyright (C) 2011 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2011-04-11 22:43+0900\n"
+"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"X-Poedit-Language: Japanese\n"
+"X-Poedit-Country: JAPAN\n"
+"X-Poedit-Basepath: /factory/ja-po/aspell/aspell-0.60.6\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "0 と 1 の間の数"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "\"<name> <value>\" の形式"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "文字列"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "整数"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "論理値"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "リスト"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" または \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "正の整数"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# デフォルト:"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# フィルタ: %s\n"
+"#   %s\n"
+"#\n"
+"# 以下のように設定されています:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF 環境変数"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "メイン設定ファイル"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "メイン設定ファイルの場所"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "言語データファイルの場所"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "辞書の別名を作成"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "メイン単語リストの場所"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "予測されるデータのエンコーディング"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "フィルタを追加または削除"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "aspell がフィルタを探すパス(複数可)"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "フィルタモード"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "追加で使用する辞書"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "個人用ファイルの場所"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "n文字以下の単語を無視する"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "単語をチェックする時にアクセントを無視する -- 現在は無効です"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "大文字・小文字を区別しない"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "置換ペアを格納するコマンドを無視する"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "単語リストの追加情報"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "入力間違い(typo)の解析に使用するキーボード定義"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "言語のコード"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "非推奨、代わりに lang を使用してください"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "現地語データファイルを格納してある場所"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "使用する主辞書のベース名"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "モジュール名を設定"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "モジュールの検索順"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "Unicode正規化を有効にする"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "現在の言語にはユニコード正規化が必要です"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "ユニコード正規化フォーム: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "正規化する時に非可逆変換を避ける"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "個人用設定ファイル"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "個人用辞書ファイル名"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "ディレクトリの接頭辞"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "置換リストの入ったファイル名"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "単語がくっついていても誤りとしない"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "くっついていてもいい単語の個数(最大)"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "含まれる単語の最小文字数"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "すべて保存 で置換ペアを保存する"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "実行ファイルの位置を基準にしてプレフィックスを設定する"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "単語リストの大きさ"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "もう使われていない"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "提案モード"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "使用する距離を編集し、sug-mode のデフォルトを置き換える"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "ミスタイプ解析を使用し、sug-mode のデフォルトを置き換える"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "置換テーブルを使用し、sug-mode のデフォルトを置き換える"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "単語を分割するときに挿入する文字"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "個人、置換、セッションの各辞書を使用する"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "単語リスト情報ファイルを検索するパス"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "警告を有効にする"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "単語リスト中で affix フラグを示す文字 -- 現在は無視されます"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "辞書を作成する時に接辞圧縮を使用する"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "無効な接辞フラグを除去します"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "単語を「掃除」して有効なものにすることを試みる"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "必要に応じて soundslike を計算することにし、あらかじめ格納はしない"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "よりよい提案を試みるために部分的に接辞を拡張する"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "無効な単語をスキップする"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "接辞フラグが有効かチェックする"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "単語が有効かチェックする"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "\".bak\" を追加してバックアップファイルを作成する"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "文字オフセットの代わりにバイトオフセットを使用する"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "欠けている語幹/接辞の組み合わせを作成する"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "チェックモードのためのキー割り当て: \"aspell\" or \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "提案リストを逆順に並べ替える"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "置換を提案する"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "パイプモードで負荷時間と提案時間を計測する"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"ファイル \"%s\" は読み込みのために開けない、または存在しないのかもしれませ"
+"ん。"
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "ユニコードのコードポイント U+%04X はサポートされていません."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "位置 %ld で不正なUTF-8シーケンスがありました。"
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "サポートされていない操作: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "メソッド \"%what:1\" は \"where:2\" の中で実装されていません."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "ファイル \"%file:1\" を開けませんでした"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "ファイル \"%file:1\" を読み込みのために開くことができません。"
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "ファイル \"%file:1\" を書き込みのために開くことができません。"
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "ファイル名 \"%file:1\" が無効です。"
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "ファイル \"%file:1\" は適切な形式ではありません。"
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "ディレクトリ \"%dir:1\" を読み込みのために開くことができません."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "キー \"%key:1\" は未知です。"
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "オプション \"%key:1\" の値は変更できません."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "キー \"%key:1\" は %accepted:2 ではないので無効です。"
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"値 \"%value:2\" は %accepted:3 ではないのでキー \"%key:1\" に対しては無効で"
+"す。"
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "キー \"%key:1\" は文字列ではありません。"
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "キー \"%key:1\" は整数ではありません。"
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "キー \"%key:1\" は論理値ではありません。"
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "キー \"%key:1\" はリストではありません。"
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"キー \"%key:1\" は \"reset-\" が前に付いている時にはパラメータを取りません。"
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"キー \"%key:1\" は \"enable-\" が前に付いている時にはパラメータを取りません。"
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"キー \"%key:1\" は \"boot-\" または \"disable-\"が前に付いている時にはパラ"
+"メータを取りません。"
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"キー \"%key:1\" は \"clear-\" が前に付いている時にはパラメータを取りません。"
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "言語 \"%lang:1\" は未知です。"
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "疑似音声 \"%sl:2\" は未知です。"
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "言語 \"%lang:1\" をサポートしていません。"
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "言語 \"%lang:1\" の単語リストが見つかりません."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "言語 \"%lang:1\" を予期していましたが、 \"%prev:2\" でした."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "接辞 '%aff:1' が壊れています。"
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "条件 \"%cond:1\" が無効です。"
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"条件 \"%cond:1\" では常に \"%strip:2\" の語幹の抜き出しができるとは限りませ"
+"ん。"
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"ファイル \"%file:1\" は適切な形式ではありません。ファイルは \"%exp:2\" である"
+"はずです(\"%got:3\" ではなく)。"
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "エンコーディング \"%encod:1\" は未知です。"
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "エンコーディング \"%encod:1\" はサポートしていません。"
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "\"%encod:1\" から \"%encod2:2\" への変換はサポートしていません。"
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "文字列 \"%str:1\" は無効です。"
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "単語 \"%word:1\" は無効です。"
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "接辞フラグ '%aff:1' は単語 \"%word:2\" に対しては無効です."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "接辞フラグ '%aff:1' は単語 \"%word:2\" に適用できません."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "バージョン番号ではない"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen が \"%return:1\" を返した。"
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "ファイル \"%filter:1\" はフィルタを含んでいません。"
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "フィルタ \"%filter:1\" は存在しません。"
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "バージョン管理によって混乱しています。"
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspell のバージョンがフィルタの要求と合っていません。"
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "フィルタオプションは既に存在します。"
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "オプション修飾子は決められたオプションのみで使用してください。"
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "未知のオプション修飾語です。"
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "フィルタ記述の設定でエラーが発生しました。"
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "空のオプション指定子です。"
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "オプション \"%option:1\" はフィルタの前に指定されたのかもしれません。"
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "未知のモード記述キーです。\"%key:1\""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "\"%modekey:1\" キーを予期していました。"
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "バージョン指定にキー \"aspell\" が欠けています。"
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell のバージョンがモードの要求と合っていません。"
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "マジック(識別鍵)モード式が欠けています"
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "文字 %char:1 の場所に空の拡張子。"
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\" エラー"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "未知のモード: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"\"%mode:1\"  Aspell のモードを拡張する時にエラーが発生しました。(メモリ不足?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": マジック(識別鍵) \"%magic:2\" を検索するための開始点が与えられ"
+"ていません。"
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": マジック(識別鍵) \"%magic:2\" を検索するための範囲が与えられて"
+"いません。"
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": マジック(識別鍵) \"%magic:2\" の式がありません。"
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": マジック(識別鍵) \"%magic:2\": 間違った正規表現  場所指定子の"
+"後に; 正規表現報告: \"%regerr:3\"。"
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" は有効な正規表現ではありません。"
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "処理できないエラー:"
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "エラー: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "エラー: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "Eメールモードに入ります。"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "HTMLモードに入ります。"
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "TeXモードに入ります。"
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "Nroffモードに入ります。"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "間違ったオプション: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr "引数をとりません。"
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "\"%s\" にパラメータを1つ指定する必要があります。"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "処理を指定して下さい"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "未知の処理: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "エラー: 少なくとも %d 個の引数を \"%s\" に対して指定してください。\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "間違った入力"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "警告: Nroff モードに入ることができません: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "単語リスト読み込みにかかった時間:"
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "提案時間: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "ファイル名を1つ指定してください。"
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "ファイル名は1つだけ指定できます。"
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "読み込み用にファイル \"%s\" を開くことができません"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "無効なキーマップです: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"\"%s\" を書き込みモードで開けませんでした。ファイルは保存されていません。"
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "無視"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "すべて無視"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "置換"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "すべて置換"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "追加"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "小文字にして追加"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "中断"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "終了"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "本当に中断してよろしいですか (y/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Yy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "置換文字列: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "残念、無効な選択です!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "残念、\"filter\" は現在実装されていません。\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "マスター単語リストをマージできません。すみません。"
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "残念、\"create/merge personal\" は現在実装されていません。\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "すみません、 \"%s\" を上書きしません"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "残念、\"create/merge repl\" は現在実装されていません。\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" は \"munch-list\" コマンドに対する有効なフラグではありません。"
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "使い方: aspell [オプション] <コマンド>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<コマンド> は次のうちの1つです:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         短い使用方法の表示"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             詳しい使用方法の表示"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <ファイル>  ファイルをチェック"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" 互換モード"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    現在のすべての設定を標準出力に表示する"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <key>     指定したオプションの現在の値を表示する"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    利用可能な辞書/フィルタ/フィルタモード の一覧を表示する"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[オプション] には以下のものがあります:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr "  list             標準入力からスペルの間違った単語のリストを作成する"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr "  soundslike       入力したそれぞれの単語に対する疑似音声を返す"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            語幹と接辞の候補を生成する"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     接辞フラグを拡張する"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr "  clean [strict]   単語リストを掃除し、すべての行の単語を有効にする"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       バージョンを表示"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    接辞を圧縮して単語リストのサイズを減らす"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    エンコーディングを他のものに変換する"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    Unicode 正規化を行う"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<名前>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr "    マスター/個人用/置換用の辞書を、表示/生成/マージする。"
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr "  <norm-form>      正規化の形式 none, internal, strict のいずれか"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"利用可能な辞書:\n"
+"  辞書を直接指定するには \"-d\" または \"master\" オプション\n"
+"  を使用します。\"lang\", \"variety\", \"size\" オプションを使用して\n"
+"  間接的に指定することもできます。\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"利用可能なフィルタ (と関連するオプション)\n"
+"  フィルタは \"filter\" オプションで追加/除去できます。\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s フィルタ: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"利用可能なフィルタモード:\n"
+"  フィルタモードはある種類のファイルに合わせて再設定されたフィルタの\n"
+"  組み合わせです。モードは \"mode\" オプションで指定します。Aspell が\n"
+"  ファイルのタイプを拡張子、または内容から特定することが可能な場合には\n"
+"  指定しなくても使用されることがあります。\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "エラー: 標準入力が端末ではありません。"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "変更を受け入れる"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "前の文字を削除"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "←"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "1文字分戻る"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "→"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "1文字分進む"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "行頭に移動"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "行末に移動"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "次の文字を削除"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "行末までのすべての文字を削除"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "この操作を中断"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "この理由はおそらく:"
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "必要なフィールド \"name\" がありません。"
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "空の文字列です。"
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "文字 '%s' (U+%02X) は単語の先頭には現れません。"
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "文字 '%s' (U+%02X) の後にはアルファベットが続かなければなりません。"
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "アルファベットを含んでいません。"
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "文字 '%s' (U+%02X) は単語の中間には現れません。"
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"文字 '\\r' (U+0D) は単語の末尾には現れません。恐らく、ファイルが Unix ではな"
+"く MS-DOS の EOL を使用しているのでしょう。"
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "文字 '%s' (U+%02X) は単語の末尾には現れません。"
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "警告: 無効な接辞 '%s' を単語 %s から除去しています。\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "警告: 不適切な接辞 '%s' を単語 %s から除去しています。\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "警告: %s 文字列をスキップします。\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "長さの合計が240文字を超えています。"
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "警告: %s 単語をスキップします。\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "多分、カウントが間違っています。"
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "誤ったバイト順"
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "誤った疑似音声です。"
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "疑似音声のバージョンが違います。"
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "接辞フラグが単語の中に見つかりましたが接辞ファイルがありません。"
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "単語等の長さの合計が240文字を超えています。"
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "一つ以上\"add\" 行がなくてはなりません。"
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "次のうちの1つ: ultra, fast, normal, slow, or bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "は許された型ではありません"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "個人用単語リストが利用できません。"
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "セッション単語リストが利用できません。"
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "メイン単語リストが利用できません。"
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "'o','O','p','P' のいずれかのつながり"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "区切られた内容を隠すための実験的なフィルタ"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "区切り記号(複数ある場合はスペースで区切って指定)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "表示するテキストと表示しないテキストとを入れ換える"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "Eメール本文中の引用されたテキストをスキップするためのモード"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "Eメールの引用を示す文字列"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "引用を示す文字の前にあってもいい文字数"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "HTML文書のためのフィルタ"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "常にチェックするHTMLの属性"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "常に中身のチェックをスキップするHTMLタグ"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "Nroff文書のためのフィルタ"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "一般のSGML/XML文書のためのフィルタ"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "常にチェックするSGMLの属性"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "常に中身のチェックをスキップするSGMLタグ"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "TeX/LaTeX文書のためのフィルタ"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "TeXのコメントを確認する"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeXのコマンド"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "Texinfo文書のためのフィルタ"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "引数を無視するTexinfo のコマンド"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "無視する Texinfo の環境"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "URLのような構造をスキップするためのフィルタ"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "C++のコメントと文字列をチェックするためのモード"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "# で始まる行をチェックするためのモード"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "Eメール本文中の引用されたテキストをスキップするためのモード"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "HTML文書をチェックするためのモード"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "すべてのフィルタを無効にするモード"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "Nroff文書をチェックするためのモード"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "Perlのコメントと文字列をチェックするためのモード"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "一般のSGML/XML文書をチェックするためのモード"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Tex/LaTeX文書をチェックするためのモード"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "Texinfo文書をチェックするためのモード"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "URLのような構造をスキップするためのモード(デフォルトのモード)"
diff --git a/po/mn.gmo b/po/mn.gmo
new file mode 100644 (file)
index 0000000..72a2433
Binary files /dev/null and b/po/mn.gmo differ
diff --git a/po/mn.po b/po/mn.po
new file mode 100644 (file)
index 0000000..8d435dd
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,1436 @@
+# Mongolian translations for aspell.
+# Copyright (C) 2004 Kevin Atkinson
+# This file is distributed under the same license as the Aspell package.
+# Sanlig Badral <badral@users.sourceforge.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60-pre1\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-07-24 11:18+0100\n"
+"Last-Translator: Sanlig Badral <badral@users.sourceforge.net>\n"
+"Language-Team: Mongolian <openmn-translation@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "0 ба 1 хооронд тоо"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "\"<нэр> <утга>\" гэсэн хэлбэрт"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "стринг"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "бүхэл тоо"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "бүүл"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "Жагсаалт"
+
+#  TRANSLATORS: "true" and "false" are literal
+#  * values and should not be translated.
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" эсвэл \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "Эерэг бүхэл тоо"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# стандарт: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Шүүлтүүр: %s\n"
+"#   %s\n"
+"#\n"
+"# дараахаар тохируулагдана:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#  TRANSLATORS: The remaing strings in config.cpp should be kept
+#  under 50 characters, begin with a lower case character and not
+#  include any trailing punctuation marks.
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "үндсэн тохируулгын файл"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "үндсэн тохируулгын файлын байрлал"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "хэлний өгөгдлийн файлын байрлал"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "толь бичгийн алиас үүсгэх"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "үндсэн үгийн жагсаалтын байрлал"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "өгөгдлийн кодчилол"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "шүүлтүүр нэмэх эсвэл устгах"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "Аспеллын шүүлтүүр хайх зам(ууд)"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "шүүлтүүрийн горим"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "хэрэглэгдэх тусгай толь бичгүүд"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "Хувийн файлуудын байрлал"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "үл хэрэгсэх үгс <= n тэмдэгт"
+
+#  TRANSLATORS: It is OK if this is longer than 50 chars
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "үг шалгаж байхад дуудлагыг үл хэрэгсэх -- ОДООГООР ҮЛ ХЭРЭГСЭХ"
+
+#  TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1390
+#, fuzzy
+msgid "ignore case when checking words"
+msgstr "үг шалгаж байхад том жижгийг үл хэрэгсэх -- ОДООГООР ҮЛ ХЭРЭГСЭХ"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "орлуулгын хосуудыг хадгалах тушаалуудыг үл хэрэгсэх"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "үгийн жагсаалтын тусгай мэдээлэл"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "Цохиж оруулах анализид хэрэглэгдэх гарын тодорхойлолт"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "хэлний код"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "хэрэгссэнгүй, оронд нь lang хэрэглэ"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "дотоод хэлний өгөгдлийн файлын байрлал"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "хэрэглэгдэх үндсэн тольны язгуур нэр"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "модулын нэр тогтоох"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "модул хайх дараалал"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "ЮНИКОД нормалчилал хэрэглэх"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Энэ хэлэнд ЮНИКОД нормалчилал шаардлагатай"
+
+#  TRANSLATORS: the values after the ':' are literal
+#  values and should not be translated.
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Юникод нормалчилалын хэлбэр: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "Нормалчилалын үед алдагдалтай хөрвүүлэлтээс зайлсхийх"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "хувийн тохиргооны файлын нэр"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "хувийн толь файлын нэр"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "prefix лавлах"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "жагсаалт файлын нэрийн орлуулга"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "run-together үгсийн хууль ёсны эсэхийг анхаар"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "хамт байж болох стрингийн хамгийн их тоо"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "язгуур үгийн хамгийн бага урт"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "бүгдийг хадгалахад орлуулгын хосуудыг хадгалах"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "Програмын нэрэн дээр суурилсан угтвар тогтоох"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "үгийн жагсаалтын хэмжээ"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "хэрэглэгдэхээ болисон"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "санал болгох горим"
+
+#  TRANSLATORS: "sug-mode" is a literal value and should not be
+#  translated.
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+"Зай тогтоох ба үүгээр санал болгогч горимын стандарт утга дарж бичигдэнэ."
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+"Цохих анализ хэрэглэх ба үүгээр санал болгогч горимын стандарт утга дарж "
+"бичигдэнэ."
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+"Орлуулга хүснэгт хэрэглэх ба үүгээр санал болгогч горимын стандарт утга дарж "
+"бичигдэнэ."
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "үг таслах үед оруулах тэмдэгтүүд"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "хувийн, орлуулга & суултын тольнууд хэрэглэх"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "үгийн жагсаалтын мэдээллийн файлыг хайх зам"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "сануулга харуулах"
+
+#  TRANSLATORS: It is OK if this is longer than 50 chars
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "Үгийн жагсаалт дахь аффикс флаг заагч -- ОДООГООР ҮЛ ХЭРЭГСЭХ"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "толь үүсгэхдээ аффикс шахалт хэрэглэх "
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "хүчингүй аффикс флагуудыг устгах"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "Үгсийг хүчинтэй байлгахын тулд цэвэрлэгээ хийхийг оролдох"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "Хадгалахын оронд төсөөтэй авиат тэмдэгтээр тооцоолох"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "Илүү сайн өргөтгөл санал болгогч хавсаргах"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "хүчингүй үгсийг алгасах"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "хэрэв аффикс флаг хүчинтэй бол шалга"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "хэрэв үгс хүчинтэй бол шалга"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "\".bak\" өргөтгөлтэй нөөц файл үүсгэх"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "тэмдэгт оффсетын оронд байт оффсет хэрэглэх"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "орхигдсон root/affix хослол үүсгэх"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "шалгах горимын түлхүүр сонголт: \"aspell\" эсвэл \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "санал болгосон жагсаалтын дарааллыг урвуулах"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "боломжит орлуулгуудыг санал болгох"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "Ачаалах хугацаа ба Pipe-Горимын Санал болгох хугацаа "
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Энэ нь »%s« файл уншигдахаар нээгдээгүй эсвэл байхгүй байхыг зааж байж болно."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Юникодын U+%04X муж дэмжигдээгүй."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "%ld байрлалт хүчингүй UTF-8 дараалал."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Үйлдэл Дэмжигдээгүй: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "\"%where:2\" -т \"%what:1\" арга дэмжигдээгүй."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "\"%file:1\" файл нээгдэх боломжгүй"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "\"%file:1\" файл уншигдахаар нээгдэхгүй байна."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "\"%file:1\" файл бичихээр нээгдэхгүй байна."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "\"%file:1\" файлын нэр хүчингүй."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "\"%file:1\" файл тохирох хэлбэрт биш байна."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "\"%dir:1\" лавлах уншигдахаар нээгдсэнгүй."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "\"%key:1\" үл мэдэгдэх түлхүүр."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "\"%key:1\" сонголтын утга өөрчилөгдөх боломжгүй."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "\"%key:1\" түлхүүр %accepted:2 -т зөвшөөрөгдөхгүй тул хүчингүй."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"\"%value:2\" утга %accepted:3 ют зөвшөөрөгдөхгүй тул \"%key:1\" түлхүүрийн "
+"хувьд хүчингүй."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "\"%key:1\" түлхүүр стринг биш."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "\"%key:1\" түлхүүр бүхэл тоо биш."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "\"%key:1\" түлхүүр бүүл төрөл биш."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "\"%key:1\" түлхүүр жагсаалт биш."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "\"%key:1\" түлхүүр \"reset-\"-ээр эхэлсэн бол ямарч параметер авахгүй."
+
+#: common/errors.cpp:203
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"\"%key:1\" түлхүүр \"enable--\"-аар эхэлсэн бол ямарч параметер авахгүй."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"\"%key:1\" түлхүүр \"dont-\" эсвэл \"disable-\" -аар эхэлсэн бол ямарч "
+"параметер авахгүй."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"\"%key:1\" түлхүүр \"clear-\" -ээр эхэлсэн бол ямарч параметер авахгүй."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "\"%lang:1\" хэл мэдэгдсэнгүй."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Үл мэдэгдэх \"%sl:2\" авиа."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "\"%lang:1\" хэл дэмжигдээгүй."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "\"%lang:1\" хэлний хувьд үгийн жагсаалт олдсонгүй."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Хүлээгдсэн хэл \"%lang:1\" харин \"%prev:2\" -г авчээ."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "'%aff:1' аффикс эвдэрчээ."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "\"%cond:1\" нөхцөл хүчингүй."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"\"%cond:1\" нөхцөл \"%strip:2\" үргэлж таслагдахад баталгаа өгч чадахгүй."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"\"%file:1\" файл зөв хэлбэрт биш байна. Файл \"%got:3\" биш \"%exp:2\"-т "
+"хүлээгдэж байна."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "\"%encod:1\" кодчилол танигдсангүй."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "\"%encod:1\" кодчилол дэмжигдээгүй."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "\"%encod:1\" ээс \"%encod2:2\" кодчилол руу хөрвүүлэх дэмжигдээгүй."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "\"%str:1\" стринг хүчингүй."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "\"%word:1\" үг хүчингүй."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "'%aff:1' аффикс флаг \"%word:2\"  үгийн хувьд хүчингүй."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "'%aff:1' аффикс флаг \"%word:2\"  үгийн хувьд хэрэглэгдэх боломжгүй."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "хувилбарын дугаар биш"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen \"%return:1\" буцаалаа."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "\"%filter:1\" файл ямарч шүүлтүүр агуулаагүй байна."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "\"%filter:1\" шүүлтүүр алга."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "хувилбарын удирдлагаар будлиантлаа."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Аспеллын хувилбар шүүлтүүрийн шаардлагатай тохирохгүй байна."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Шүүлтүүр сонголт хэдийнээ байна."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+"Та Үйлдэл өөрчилөгчийг зөвхөн дурьдагдсан Сонголтууд дотор хэрэглэнэ үү."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Мэдэгдэхгүй үйлдэл өөрчилөгч"
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Шүүлтүүрийн тодорхойлолт тохируулахад алдаа."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Хоосон сонголт тодорхойлогч."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "\"%option:1\" сонголт өмнөх шүүлтүүрт тодорхойлогдох боломж."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "\"%key:1\" - танигдахгүй тодорхойлогч түлхүүрийн горим."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "\"%modekey:1\" түлхүүр хүлээгдэж байна."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Хувилбар сонголт дутуу байна: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell хувилбар шүүлтүүрийн шаардлагад нийцсэнгүй."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "»Magic Modus«-томъёолол дутуу."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "%char:1 тэмдэгтийн өргөтгөл хоосон."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\" алдаа"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Үл мэдэгдэх горим: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "Аспеллын горимыг өргөтгөж байхад \"%mode:1\" алдаа. (ойгоос халив уу?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": өгөгдсөн magic \"%magic:2\" -н хувьд magic хайлтын эхлэл алга."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": өгөгдсөн magic \"%magic:2\" -н хувьд magic хайлтын муж алга."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": боломжит magic \"%magic:2\" -н хувьд magic илэрхийлэл алга."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": байрлал заагчийн ард буруу энгийн "
+"илэрхийлэл; regexp тайлан: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" хүчингүй энгийн илэрхийлэл."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Авч үзээгүй алдаа: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Алдаа: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Алдаа: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "Э-шуудан оруулах горим."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "TML горим оруулах."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "TeX горим оруулах."
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "TeX горим оруулах."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Хүчингий сонголт: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " ясарч параметр авахгүй."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Та %s -н хувьд параметр тодорхойлох ёстой"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Та ямар нэг үйлдэл тодорхойлох ёстой"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Мэдэгдэхгүй үйлдэл: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Та %s -н хувьд параметр тодорхойлох ёстой"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Хүчингүй оролт"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Үгийн жагсаалт ачаалах хугацаа: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Санал болгох хугацаа: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Та файлын нэрийг оруулах ёстой."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "\"%s\" файлыг уншихаар нээж чадсангүй"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Хүчингүй түлхүүр сонголт: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "\"%s\" файлыг бичихээр нээж чадсангүй. Файл хадгалагдсангүй."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Үл хэрэгс"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Бүгдийг үл хэрэгс"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Орлуул"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Бүгдийг орлуул"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Нэм"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Жижиг үсгээр нэмэх"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Тасал"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Гарах"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Та таслахыг үнэхээр хүсэж байна уу (y/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Хамт:"
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Уучилаарай энэ хүчингүй сонголт!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Уучилаарай \"filter\" одоогоор хийгдээгүй байна.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Мастер үгийн жагсаалтыг хараахан нэгтгэх боломжгүй. Уучил."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Уучилаарай \"create/merge personal\" одоогоор хийгдээгүй байна.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Уучилаарай би \"%s\" -г дарж бичмээргүй байна"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Уучилаарай \"create/merge repl\" одоогоор хийгдээгүй.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#  TRANSLATORS: These should all be formated to fit in 80 column or
+#  less
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Хэрэглээ: aspell [сонголт] <тушаал>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<тушаал> дараахын аль нэг нь байна:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         товч хэрэглээний зурвас харуулна"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             нарийвчилсан тусламж мэдээ үзүүлнэ"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <файл>  шалгах файл"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" тохиромжтой горим"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    идэвхитэй тохиргоог стандарт гаралт руу буулгах"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <key>     сонголтын идэвхитэй утгыг хэвлэх"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    боломжит тольнууд / шүүлтүүр / шүүлтүүрийн горимууд жагсаах "
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[сонголт] дараахаас авна:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             стандарт оролтоос буруу бичигдсэн үгсийг жагсаах процедур"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       оруулсан үг бүрийн хувьд зохих дуудлага авиаг буцаах"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+"  munch            боломжит язгуур үгс ба аффикс (дагавар/угтвар) үүсгэх"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     аффикс флаг задлах"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   мөр бүр хүчинтэй үг байхаар үгийн жагсаалтыг цэвэрлэх"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       хувилбарыг хэвлэн үзүүлнэ"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    from кодчилолоос өөр кодчилол руу хөрвүүлнэ"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    ЮНИКОД нормалчилал гүйцэтгэх"
+
+#: prog/aspell.cpp:2839
+#, fuzzy
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [үгийн жагсаалт]"
+
+#: prog/aspell.cpp:2840
+#, fuzzy
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    үгийн жагсаалт гаргах, мастер үүсгэх эсвэл нэгтгэх, итгэх эсвэл орлуулах."
+
+#  TRANSLATORS: "none", "internal" and "strict" are literal values
+#  and should not be translated.
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      хэрэглэх нормалчилах хэлбэр, эсвэл none, internal, эсвэл "
+"strict байж болно"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Аспелл %s.  Зохиогчийн эрх (Copyright) 2000-2011 Кэвин Аткинсон (Kevin "
+"Atkinson).\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Байгаа тольнууд:\n"
+"    Тольнууд шууд \"-d\" эсвэл \"master\" сонголтоор\n"
+"    сонгогдох боломжтой.  Тэд мөн шууд бусаар \"lang\",\n"
+"    \"variety\", ба \"size\" сонголтоор сонгогдох ч боломжтой.\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Байгаа шүүлтүүрүүд (ба холбоотой сонголтууд):\n"
+"    Шүүлтүүрүүд \"filter\" сонголтоор нэмэгдэж, устгагдаж болно.\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s шүүлтүүр: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Боломжит Горим Шүүлтүүр:\n"
+"    Горим Шүүлтүүрүүд файлын өгөгдсөн төрлийн хувьд\n"
+"    сайжруулагдсан шүүлтүүрүүдийн хослолуудаар дахин\n"
+"    тохируулагдсан. Горим \"mode\" сонголтоор сонгогдоно.\n"
+"    Хэрэв Aspell файлын өргөтгөлөөр боломжтой бол агуулгаар\n"
+"    нь төрлийг нь тогтоосон тохиолдолд боломжтой.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Алдаа: Стандарт оролт терминал биш байна."
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Энтэр"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Зөвшөөрөгдсөн өөрчилөлтүүд"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Бакспейс"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Контрол-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Өмнөх тэмдэгтийг устгах"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Зүүн"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Контол-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Нэг зай хойш шилжих"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Баруун"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Контрол-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Нэг зай урагш шилжих"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Гэр"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Контрол-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Мөрийн эхлэлд шилжих"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Төгсгөл"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Контрол-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Мөрийн төгсгөлд шилжих"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Устгах"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Контрол-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Дараагийн тэмдэгтийг устгах"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Контрол-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "EOL дахь бүх тэмдэгтийг устгах"
+
+#  TRANSLATORS: This is a literal Key.
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Контрол-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Энэ Үйлдлийг Таслах"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Энэ бол магад: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Шаардлагатай талбар \"name\" дутуу байна."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Хоосон стринг."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "'%s' (U+%02X) тэмдэгт үгийн эхэнд байж болохгүй."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "'%s' (U+%02X) тэмдэгт өмнөө заавал нэг үсэг авна."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Ямар нэг цагаан толгойн үсэг агуулаагүй."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "'%s' тэмдэгт (U+%02X) үгийн дунд байх ёсгүй."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"'\\r' (U+0D) тэмдэгт үгийн төгсгөлтд байх ёсгүй. Магад энэ файл Юникс EOL -н "
+"оронд MS-DOS EOLхэрэглэж байна."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "'%s' тэмдэгт (U+%02X) үгийн төгсгөлд байх ёсгүй."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Сануулга: '%s' хүчингүй аффиксыг %s үгээс устгаж байна.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Сануулга: '%s' хэрэггүй аффиксыг %s үгээс устгаж байна.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Сануулга: %s стринг алгасав.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Нийт урт 240 тэмдэгтээс хэтэрлээ."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Сануулга: %s үгийг алгасав.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Магад буруу тоо."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Буруу төгсгөлийн дараалал."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Буруу авиа."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Буруу авианы хувилбар."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Үгэнд аффикс флаг олдсон боловч аффикс файл өгөгдөөгүй байна."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Үгийн нийт урт авианы өгөгдлийн хамт 240 тэмдэгтээс их байна."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "'o','O','p',эсвэл 'P' стринг"
+
+#  TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#  should be under 50 characters, begin with a lower case character and 
+#  not include any trailing punctuation marks.
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Хязгаарласан хэсгийг Аспеллээс нуух туршилтын шүүлтүүр"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "Хам текст хязгаарлагч (хоосон зайгаар тусгаарлагдана)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "харагдах үл харагдах текстүүдийг зөөх"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "Э-шуудан дахь хашилттай текстийг алгасах"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "э-шуудангийн хашилтат тэмдэгтүүд"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "Хашилт тэмдэгтийн өмнө орж болох тэмдэгтийн тоо"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "HTML баримтуудтай холбоотой шүүлтүүр"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML аттрибутыг үргэлж шалгах"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML тагуудын агуулгыг үргэлж алгасах "
+
+#: modules/filter/nroff-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Nroff documents"
+msgstr "HTML баримтуудтай холбоотой шүүлтүүр"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "ерөнхий SGML/XML баримтуудтай холбоотой шүүлтүүр"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML аттрибут үргэлж шалгах"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML тагуудын агуулгыг үргэлж алгасах"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "TeX/LaTeX баримтуудтай холбоотой шүүлтүүр"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "TeX тайлбар шалгах"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX тушаалууд"
+
+#: modules/filter/texinfo-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Texinfo documents"
+msgstr "HTML баримтуудтай холбоотой шүүлтүүр"
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "орлуулгын хосуудыг хадгалах тушаалуудыг үл хэрэгсэх"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "URL хэлбэрийн бүтэцүүдийг алгасах шүүлтүүр"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "C++ тайлбар ба стринг литериалуудыг шалгах горим"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "# -р эхэлсэн бүх мөрүүдийг шалгах горим"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "э-шуудан дахь хашилтат текстүүдийг алгасах горим"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "HTML баримтуудыг алгасах горим"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "бүх шүүлтүүрийг хаах горим"
+
+#: modules/filter/modes/nroff.amf:7
+#, fuzzy
+msgid "mode for checking Nroff documents"
+msgstr "HTML баримтуудыг алгасах горим"
+
+#: modules/filter/modes/perl.amf:8
+#, fuzzy
+msgid "mode for checking Perl comments and string literals"
+msgstr "perl тайлбар ба стринг литериалуудыг шалгах горим"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "ерөнхий SGML/XML баримтуудыг шалгах горим"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "TeX/LaTeX баримтуудыг шалгах горим"
+
+#: modules/filter/modes/texinfo.amf:7
+#, fuzzy
+msgid "mode for checking Texinfo documents"
+msgstr "HTML баримтуудыг алгасах горим"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "URL хэлбэрийн бүтцүүдийг (стандарт горим) алгасах горим"
diff --git a/po/ms.gmo b/po/ms.gmo
new file mode 100644 (file)
index 0000000..952dfc6
Binary files /dev/null and b/po/ms.gmo differ
diff --git a/po/ms.po b/po/ms.po
new file mode 100644 (file)
index 0000000..e2aa5a9
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,1345 @@
+# translation of aspell-0.60.6.ms.po to Malay
+# Copyright (C) 2009 Muhammad Najmi bin Ahmad Zabidi
+# This file is distributed under the same license as the aspell package.
+#
+# Muhammad Najmi Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell-0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2009-07-05 20:27+0800\n"
+"Last-Translator: Muhammad Najmi Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "nombor di antara 0 dan 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "dalam bentuk \"<name> <value>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "Rentetan"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "integer"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "senarai"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "samada \"benar\" atau \"salah\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "integer positive"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# default: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Penyaring: %s\n"
+"#   %s\n"
+"#\n"
+"# dikonfigurasi seperti berikut:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "fail konfigurasi utama"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "lokasi fail konfigurasi utama"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "lokasi fail data bahasa"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "cipta alias kamus"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "lokasi senarai perkataan utama"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "enkod yang diharapkan berada di dalam"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "tambah atau buang penyaring"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "laluan untuk aspell carikan penyaring"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mod penyaring"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "kamus ekstra untuk digunakan"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "lokasi untuk fail peribadi"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "abai perkataan <= aksara n"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "abai 'case' apabila memeriksa perkataan"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr ""
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "maklumat ekstra untuk senarai perkataan"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr ""
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr ""
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr ""
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr ""
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr ""
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr ""
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr ""
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr ""
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr ""
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr ""
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr ""
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr ""
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr ""
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr ""
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr ""
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr ""
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr ""
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr ""
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr ""
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr ""
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr ""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr ""
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr ""
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr ""
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr ""
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr ""
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr ""
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr ""
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr ""
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr ""
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr ""
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr ""
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr ""
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr ""
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr ""
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr ""
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr ""
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr ""
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr ""
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr ""
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr ""
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr ""
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr ""
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr ""
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr ""
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr ""
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr ""
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr ""
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr ""
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr ""
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr ""
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr ""
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr ""
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr ""
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr ""
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr ""
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr ""
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr ""
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr ""
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr ""
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr ""
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr ""
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr ""
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr ""
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr ""
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr ""
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr ""
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr ""
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr ""
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr ""
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr ""
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr ""
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr ""
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr ""
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr ""
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr ""
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr ""
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr ""
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr ""
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr ""
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr ""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr ""
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr ""
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr ""
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr ""
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr ""
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr ""
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr ""
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr ""
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644 (file)
index 0000000..62cdd68
Binary files /dev/null and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..9adae1e
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1408 @@
+# Dutch translations for aspell.
+# Copyright (C) 2008 Kevin Atkinson (msgids)
+# This file is distributed under the same license as the aspell package.
+#
+# Elros Cyriatan <cyriatan@fastmail.fm>, 2004.
+# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell-0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2010-09-26 20:30+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "een getal tussen 0 en 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "in de vorm \"<naam> <waarde>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "tekenreeks"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "geheel getal"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleaan"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "lijst"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" (waar) of \"false\" (onwaar)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "een positief geheel getal"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# standaard: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# als volgt ingesteld:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF-omgevingsvariabele"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "hoofdconfiguratiebestand"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "locatie van hoofdconfiguratiebestand"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "locatie van taalgegevensbestanden"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "woordenboek-aliassen aanmaken"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "locatie van hoofdwoordenlijst"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codering waarin gegevens worden verwacht"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "een filter toevoegen of verwijderen"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "pad(en) waarin 'aspell' zoekt naar filters"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "filtermodus"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "te gebruiken extra woordenboeken"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "locatie van persoonlijke bestanden"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "woorden van deze lengte (of korter) negeren"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "accenten negeren bij controleren van woorden -- WERKT MOMENTEEL NIET"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "woorden niet-hoofdlettergevoelig controleren"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "opdrachten om vervangingsparen op te slaan negeren"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "extra informatie voor de woordenlijst"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "toetsenbord-definitie voor typfout-analyse"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "taalcode"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "ontraden; gebruik 'lang' ervoor in de plaats"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "locatie van lokale taalgegevensbestanden"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "basisnaam van te gebruiken hoofdwoordenboek"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "modulenaam instellen"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "zoekvolgorde voor modules"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "Unicode-normalisatie aanzetten"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Unicode-normalisatie is vereist voor huidige taal"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "normalisatievorm: 'none', 'nfd', 'nfc', 'comp'"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "verliesgevende normalisatie-omzettingen vermijden"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "persoonlijk configuratiebestand"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "bestandsnaam van persoonlijk woordenboek"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "voor te voegen pad"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "bestandsnaam van lijst met vervangingen"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "aan elkaar geschreven woorden goedkeuren"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "maximum aantal aan elkaar te schrijven woorden"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "minimum lengte van inwendige woorden"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "vervangingsparen opslaan bij 'alles opslaan'"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "pad instellen aan hand van locatie van 'aspell'"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "grootte van woordenlijst"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "niet meer gebruikt"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "suggestiemodus"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "te gebruiken bewerkafstand (sug-modus negeren)"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "typfout-analyse gebruiken (sug-modus negeren)"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "vervangingstabellen gebruiken (sug-modus negeren)"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "in te voegen tekens als woord wordt gesplitst"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "persoonlijke, vervangings- en sessiewoordenboeken gebruiken"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "zoekpad voor woordenlijst-informatiebestanden"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "waarschuwingen aanzetten"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "label voor affixopties in woordenlijsten -- WERKT MOMENTEEL NIET"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "affixen comprimeren bij aanmaken van woordenboeken"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "ongeldige affixopties verwijderen"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "pogen woorden op te schonen zodat ze geldig zijn"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "de \"klinkt-als\" niet opslaan maar berekenen"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "affixen deels uitschrijven voor betere suggesties"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "ongeldige woorden overslaan"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "controleren of affixopties geldig zijn"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "controleren of woorden geldig zijn"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "reservekopie maken (\".bak\" achter bestandsnaam)"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "byteposities gebruiken in plaats van tekenposities"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "ontbrekende stam/affix-combinaties aanmaken"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "toetsbindingen voor controle: 'aspell' of 'ispell'"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "volgorde van de lijst met suggesties omdraaien"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "mogelijke vervangingen suggereren"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "opstart- en suggestietijd bijhouden in pijpmodus"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Dit kan ook betekenen dat het bestand \"%s\" niet kan worden geopend om te "
+"lezen, of niet bestaat."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Unicode-codepunt U+%04X wordt niet ondersteund."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Ongeldige UTF-8-reeks op positie %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Bewerking wordt niet ondersteund: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "De methode \"%what:1\" is niet geïmplementeerd in \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Het bestand \"%file:1\" kan niet worden geopend."
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Het bestand \"%file:1\" kan niet worden geopend om te lezen."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Het bestand \"%file:1\" kan niet worden geopend om te schrijven."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Bestandsnaam \"%file:1\" is ongeldig."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Het bestand \"%file:1\" is niet in de juiste indeling."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "De map \"%dir:1\" kan niet worden geopend om te lezen."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Sleutel \"%key:1\" is onbekend."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "De waarde voor optie \"%key:1\" kan niet worden gewijzigd."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Sleutel \"%key:1\" is niet %accepted:2 en is dus ongeldig."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"De waarde \"%value:2\" is niet %accepted:3, en is dus ongeldig voor sleutel "
+"\"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Sleutel \"%key:1\" is geen tekenreeks."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Sleutel \"%key:1\" is geen geheel getal."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Sleutel \"%key:1\" is geen booleaan."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Sleutel \"%key:1\" is geen lijst."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Sleutel \"%key:1\" neemt geen parameters als deze begint met \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Sleutel \"%key:1\" neemt geen parameters als deze begint met \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Sleutel \"%key:1\" neemt geen parameters als deze begint met \"dont-\" of "
+"\"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Sleutel \"%key:1\" neemt geen parameters als deze begint met \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Taal \"%lang:1\" is onbekend."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "De \"klinkt-als\" \"%sl:2\" is onbekend."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "De taal \"%lang:1\" wordt niet ondersteund."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Voor de taal \"%lang:1\" zijn geen woordenlijsten gevonden."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Taal \"%lang:1\" verwacht, maar \"%prev:2\" gekregen."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Affix '%aff:1' is beschadigd."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "De voorwaarde \"%cond:1\" is ongeldig."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"De voorwaarde \"%cond:1\" garandeert niet dat \"%strip:2\" altijd kan worden "
+"verwijderd."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Het bestand \"%file:1\" is niet in de juiste indeling.  Indeling \"%exp:2\" "
+"werd verwacht, niet \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Codering \"%encod:1\" is onbekend."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "De codering \"%encod:1\" wordt niet ondersteund."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Conversie van \"%encod:1\" naar \"%encod2:2\" wordt niet ondersteund."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "De tekenreeks \"%str:1\" is ongeldig."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Het woord \"%word:1\" is ongeldig."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "De affixoptie '%aff:1' is ongeldig voor woord \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "De affixoptie '%aff:1' kan niet worden toegepast op woord \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "is geen versienummer"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen() gaf \"%return:1\" terug."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Het bestand \"%filter:1\" bevat geen enkel filter."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filter \"%filter:1\" bestaat niet."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Verward door versiebeheer."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Versie van 'aspell' komt niet overeen met wat filter verlangt."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Filteroptie bestaat al."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Gebruik optieveranderaars alleen binnen genoemde optie."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Optieveranderaar is onbekend."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Fout bij instellen van filteromschrijving."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Lege optie-parameter."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Optie \"%option:1\" is misschien vóór filter opgegeven."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Onbekende omschrijvingssleutel \"%key:1\" voor modus."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Sleutel \"%modekey:1\" werd verwacht."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Versie-opgave mist sleutel: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Versie van 'aspell' komt niet overeen met wat modus verlangt."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Ontbrekende magische modusuitdrukking."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Lege uitbreiding bij teken %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\"-fout"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Onbekende modus: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"\"%mode:1\"-fout bij uitbreiden van 'aspell'-modi -- onvoldoende geheugen?"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": geen begin voor magische zoekactie gegeven voor \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": geen bereik voor magische zoekactie gegeven voor \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": geen magische uitdrukking beschikbaar voor \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": \"%magic:2\": ongeldige reguliere expressie na locatie-opgave;\n"
+"regexp() rapporteert: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" is geen geldige reguliere expressie."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Onbehandelde fout: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fout: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Fout: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "op e-mailmodus overgaan"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "op HTML-modus overgaan"
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "op TeX-modus overgaan"
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "op Nroff-modus overgaan"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Ongeldige optie: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " neemt geen parameters aan."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "U dient een parameter op te geven voor \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "U dient een actie op te geven."
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Onbekende actie: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Fout: u dient minstens %d parameters op te geven voor \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Ongeldige invoer"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "Waarschuwing: kan niet op Nroff-modus overgaan: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tijd gebruikt voor laden van woordenlijst: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Tijd gebruikt voor suggesties: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "U dient een bestandsnaam op te geven."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Er mag slechts één bestandsnaam opgegeven worden."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Kan bestand \"%s\" niet openen om te lezen."
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Ongeldige toets-toekenning: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Kan bestand \"%s\" niet openen om te schrijven -- bestand is niet opgeslagen."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Negeren"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Alle negeren"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Vervangen"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Alle vervangen"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Toevoegen"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Lager toevoegen"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Afbreken"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Afsluiten"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Wilt u het programma afbreken (j/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "JjYy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Met: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Sorry, die keuze is ongeldig!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Sorry, 'filter' is nog niet geïmplementeerd.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Kan hoofdwoordenlijst nog niet samenvoegen.  Sorry."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Sorry, \"aanmaken/samenvoegen van persoonlijk woordenboek\" is nog niet "
+"geïmplementeerd.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Sorry, '%s' wordt NIET overschreven."
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+"Sorry, \"aanmaken/samenvoegen van vervangingen\" is nog niet "
+"geïmplementeerd.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "'%s' is geen geldige optie voor de opdracht 'munch-list'."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Gebruik:  aspell [opties] <opdracht>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<opdracht> is één van:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage            een korte gebruikssamenvatting tonen"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help                deze uitgebreide hulptekst tonen"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <bestand>  dit bestand controleren"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe             compatibiliteitsmodus (met 'ispell -a')"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config       huidige configuratie tonen"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <sleutel>    huidige waarde van een optie tonen"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+"                      beschikbare woordenboeken, filters en filtermodi "
+"opsommen"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[opties] kunnen de volgende zijn:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr "  list                een lijst van verkeerd gespelde woorden tonen"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike          een \"klinkt-als\"-equivalent voor elk gegeven woord "
+"geven"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch               mogelijke stamwoorden en affixen genereren"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-3]        resultaten van affixopties uitschrijven"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]      woordenlijst opschonen, alleen geldige woorden toestaan"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version          programmaversie tonen"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+"                      grootte van woordenlijst door affixcompressie "
+"verkleinen"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <van> <naar> [<normalisatievorm>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "                      naar een andere codering converteren"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+"  norm (<norm.afbeelding> | <van> <norm.afbeelding> <naar>) [<norm.vorm>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "                      Unicode-normalisatie uitvoeren"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<naam van woordenlijst>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"                      weergeven, aanmaken of samenvoegen van\n"
+"                      hoofd-, persoonlijke of vervangingswoordenlijst"
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <normalisatievorm>  te gebruiken normalisatievorm: 'none' (geen),\n"
+"                      'internal' (intern), of 'strict' (strikt)"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Beschikbare woordenboeken:\n"
+"    (Woordenboeken kunnen gekozen worden met de optie '-d' of 'master';\n"
+"    of indirect via de opties 'lang', 'variety' en 'size'.)\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Beschikbare filters (en bijbehorende opties):\n"
+"    (Filters kunnen worden toegevoegd of verwijderd met de optie 'filter'.)\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Beschikbare filtermodi:\n"
+"    (Filtermodi zijn gewone filters, of combinaties van filters toegesneden\n"
+"    op een bepaald soort bestand.  De filtermodus wordt impliciet gekozen\n"
+"    als 'aspell' uit de bestandsextensie of uit de inhoud van het bestand\n"
+"    de bestandssoort kan afleiden.  Met de optie 'mode' kan de filtermodus\n"
+"    expliciet gekozen worden.  Hieronder staan de beschikbare modi.)\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Fout: standaardinvoer is geen terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Wijzigingen accepteren"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Ctrl-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Het vorige teken verwijderen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Links"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Ctrl-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Eén positie terug"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Rechts"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Ctrl-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Eén positie vooruit"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Ctrl-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Naar het begin van de regel"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Ctrl-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Naar het einde van de regel"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Ctrl-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Het volgende teken verwijderen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Ctrl-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Alle tekens tot einde-regel verwijderen"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Ctrl-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Deze bewerking afbreken"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Dit komt vermoedelijk omdat: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Het vereiste naamveld \"name\" ontbreekt."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Lege tekst."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+"Het teken '%s' (U+%02X) mag niet aan het begin van een woord voorkomen."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Het teken '%s' (U+%02X) moet door een letterteken gevolgd worden."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Bevat geen enkel letterteken."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+"Het teken '%s' (U+%02X) mag niet in het midden van een woord voorkomen."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Het teken '\\r' (U+0D) mag niet aan het einde van een woord voorkomen.\n"
+"Dit betekent waarschijnlijk dat het bestand het regeleindeteken van MS-DOS\n"
+"gebruikt en niet dat van Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+"Het teken '%s' (U+%02X) mag niet aan het einde van een woord voorkomen."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+"Waarschuwing: ongeldige affix '%s' wordt uit woord \"%s\" verwijderd.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+"Waarschuwing: ontoepasselijke affix '%s' wordt uit woord \"%s\" verwijderd.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Waarschuwing: %s -- tekenreeks wordt overgeslagen.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "De totale lengte is groter dan 240 tekens."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Waarschuwing: %s -- woord wordt overgeslagen.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Misschien een onjuist aantal."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Verkeerde bytevolgorde ('endianness')."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Onjuiste \"klinkt-als\"."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Onjuiste versie van \"klinkt-als\"."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Affixopties gevonden in woord, maar er is geen affixbestand opgegeven."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"De totale woordlengte, inclusief \"klinkt-als\"-gegevens, is meer dan 240 "
+"tekens."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Er moet minstens één 'add'-regel zijn."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+"één van 'ultra' (bliksemsnel), 'fast' (snel), 'normal' (normaal),\n"
+"'slow' (langzaam), of 'bad-spellers' (voor slechte spellers)"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "is geen toegestane soort"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "De persoonlijke woordenlijst is niet beschikbaar."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "De sessiewoordenlijst is niet beschikbaar."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "De hoofdwoordenlijst is niet beschikbaar."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "een tekenreeks bestaand uit 'o','O','p', of 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "experimenteel filter voor verbergen van afgebakende contexten"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr " contextbakens (gescheiden door spaties)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr " tekst omschakelen tussen zichtbaar/onzichtbaar"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "overslaan van aangehaalde tekst in e-mail"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "aanhaaltekens (meestal \">\" en \"|\") in e-mail"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "aantal tekens dat vóór aanhaalteken kan staan"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "voor behandeling van HTML-documenten"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML-attributen die gecontroleerd moeten worden"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML-tags waarvan inhoud moet worden overgeslagen"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "voor behandeling van Nroff-documenten"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "voor behandeling van algemene SGML/XML-documenten"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML-attributen die gecontroleerd moeten worden"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML-tags waarvan inhoud moet worden overgeslagen"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "voor behandeling van TeX/LaTeX-documenten"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr " TeX-commentaren controleren"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr " te controleren TeX-opdrachten"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "voor behandeling van Texinfo-documenten"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr " parameters van deze opdrachten controleren"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr " te negeren Texinfo-omgevingen"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "slaat URL-achtige constructies over"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "voor het controleren van C++-commentaren/tekenreeksen"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "voor het controleren van regels die beginnen met een #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "voor het overslaan van aangehaalde tekst in e-mail"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "voor het controleren van HTML-documenten"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "schakelt alle filters uit"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "voor het controleren van Nroff-documenten"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "voor het controleren van Perl-commentaren/tekenreeksen"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "voor het controleren van algemene SGML/XML-documenten"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "voor het controleren van TeX/LaTeX-documenten"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "voor het controleren van Texinfo-documenten"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "voor het overslaan van URL-achtige constructies (standaard)"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644 (file)
index 0000000..5fa0189
Binary files /dev/null and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..e85f175
--- /dev/null
@@ -0,0 +1,1475 @@
+# Translation to Brazilian Portuguese (pt_BR)
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Marcus Moreira de Souza <marcus@frb.br>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.51-b20040219\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-03-15 12:10-0300\n"
+"Last-Translator: Marcus Moreira de Souza <marcus@frb.br>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr ""
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr ""
+
+#: common/config.cpp:74
+#, fuzzy
+msgid "string"
+msgstr "String vazia."
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr ""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr ""
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr ""
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr ""
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "arquivo de configuração principal"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "local do arquivo de configuração principal"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "local dos arquivos de idiomas"
+
+#: common/config.cpp:1367
+#, fuzzy
+msgid "create dictionary aliases"
+msgstr "arquivo de dicionário pessoal"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "local do vocabulário principal"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "codificação de entrada"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "adiciona ou remove um filtro"
+
+#: common/config.cpp:1375
+#, fuzzy
+msgid "path(s) aspell looks for filters"
+msgstr "caminho(s) de busca por filtros"
+
+#: common/config.cpp:1379
+#, fuzzy
+msgid "filter mode"
+msgstr "entrar no modo TeX."
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "dicionários adicionais"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "local dos arquivos pessoais"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorar palavras com menos de n caracteres"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+#, fuzzy
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignorar acentuação ao verificar palavras"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorar case ao verificar palavras"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorar comandos de substituição"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informação extra para o vocabulário"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definição de teclado para uso em analise tipográfica"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "codificação do idioma"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "defasado, use lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "localização do "
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "nome do dicionário principal"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "definir nome do módulo"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ordem de busca por módulos"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "arquivo de configuração pessoal"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "arquivo de dicionário pessoal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "prefixo do diretório"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "arquivos de substituição"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considerar palavras aglutindas como válidas"
+
+#: common/config.cpp:1435
+#, fuzzy
+msgid "maximum number that can be strung together"
+msgstr "número máximo quem podem ser aglutinadas"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "tamanho mínimo de palavras interior"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "salvar substituições no comando «save all»"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "definir o prefixo baseado na localização do executável"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "tamanho do vocabulário"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "não mais usado"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "modo de sugestão"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "caracteres a inserir quando a palavra é dividida"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "caminho de busca pelos arquivos de informação"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "criar arquivo de backup com extensão «.bak»"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "inverter ordem da lista de sugestões"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "sugerir substituições possíveis"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, fuzzy, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Codificação \"%encod:1\" não suportada."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr ""
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr ""
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr ""
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "O arquivo \"%file:1\" não pode ser aberto"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "O arquivo \"%file:1\" não pode ser aberto para leitura."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "O arquivo \"%file:1\" não pode ser aberto para escrita."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "O nome de arquivo \"%file:1\" é inválido."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "O arquivo \"%file:1\" não está no formato apropriado."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "O diretório \"%dir:1\" não pode ser aberto para leitura."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "A chave \"%key:1\" é desconhecida."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "O valor para opção \"%key:1\" não pode ser aberto."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "A chave \"%key:1\" não é %accepted:2 e não é válida."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"O valor \"%value:2\" não é %accepted:3 e não é válido para a chave \"%key:1"
+"\"."
+
+#: common/errors.cpp:163
+#, fuzzy
+msgid "The key \"%key:1\" is not a string."
+msgstr "A chave \"%key:1\" é desconhecida."
+
+#: common/errors.cpp:171
+#, fuzzy
+msgid "The key \"%key:1\" is not an integer."
+msgstr "A chave \"%key:1\" é desconhecida."
+
+#: common/errors.cpp:179
+#, fuzzy
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "A chave \"%key:1\" é desconhecida."
+
+#: common/errors.cpp:187
+#, fuzzy
+msgid "The key \"%key:1\" is not a list."
+msgstr "A chave \"%key:1\" é desconhecida."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "O idioma \"%lang:1\" é desconhecido."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "O código \"%sl:2\" é desconhecido"
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "O idioma \"%lang:1\" não é suportado."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Nenhum vocabulário foi localizado para o idioma \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Idioma \"%lang:1\" esperado, mas \"%prev:2\" obtido."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, fuzzy, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "A palavra \"%word:1\" é inválida."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, fuzzy, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr "O arquivo \"%file:1\" não está no formato apropriado."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Codificação \"%encod:1\" desconhecida."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Codificação \"%encod:1\" não suportada."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Conversão de \"%encod:1\" para \"%encod2:2\" não suportada."
+
+#: common/errors.cpp:379
+#, fuzzy, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "A palavra \"%word:1\" é inválida."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "A palavra \"%word:1\" é inválida."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+#, fuzzy
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "O arquivo \"%file:1\" não pode ser aberto para leitura."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+#, fuzzy
+msgid "dlopen returned \"%return:1\"."
+msgstr "%where:1: \"%filter:2\" dlopen retornou \"%return:3\"."
+
+#: common/errors.cpp:475
+#, fuzzy, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "%where:1: O arquivo \"%filter:2\" não contém filtros."
+
+#: common/errors.cpp:483
+#, fuzzy, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "O arquivo \"%file:1\" não pode ser aberto"
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+#, fuzzy
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Linha %line:3 A versão do Aspell não atende às "
+"necessidades do filtro."
+
+#: common/errors.cpp:507
+#, fuzzy
+msgid "Filter option already exists."
+msgstr "%where:1: \"%filter:2\" Line %line:3 Opção do filtro já existe."
+
+#: common/errors.cpp:515
+#, fuzzy
+msgid "Use option modifiers only within named option."
+msgstr ""
+"%where:1: \"%filter:2\" %line:3 Use modificadores de opções apenas em opções "
+"nomeadas."
+
+#: common/errors.cpp:523
+#, fuzzy
+msgid "Option modifier unknown."
+msgstr "%where:1: \"%filter:2\" %line:3 Modificador de opção desconhecido."
+
+#: common/errors.cpp:531
+#, fuzzy
+msgid "Error setting filter description."
+msgstr "%where:1: \"%filter:2\" erro configurando descrição do filtro."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+#, fuzzy
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Linha %line:3 A versão do Aspell não atende às "
+"necessidades do filtro."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+#: common/errors.cpp:635
+#, fuzzy, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"%where:1: \"%filter:2\" erro ao estender opções do Aspell. (out of memory?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, fuzzy, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "%action:1: `%expression:2' não é uma expressão válida."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Erro não previsto: "
+
+#: prog/aspell.cpp:97
+#, fuzzy, c-format
+msgid "Error: %s\n"
+msgstr "Erro: "
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Erro: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "entrar no modo Email."
+
+#: prog/aspell.cpp:204
+#, fuzzy
+msgid "enter HTML mode."
+msgstr "entrar no modo TeX."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "entrar no modo TeX."
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "entrar no modo TeX."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opção Inválida: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " não recebe nenhum parametro."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "É necessário especificar um parêmtro para %s"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "É necessário especificar um ação"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Ação Desconhecida: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "É necessário especificar um parêmtro para %s"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Entrada Inválida"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Carregar vocabulário"
+
+#: prog/aspell.cpp:929
+#, fuzzy, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Sugestão:"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Especifique o nome do arquivo."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Impossível abrir o arquivo \"%s\" para leitura"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Mapa de teclado inválido: %s"
+
+#: prog/aspell.cpp:1020
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Impossível abrir o arquivo \"%s\" para escrita. Arquivo não foi salvo."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorar todos"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Substituir"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Substituir todos"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Adicionar"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Adicionar minúsculas"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Abortar"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Sair"
+
+#: prog/aspell.cpp:1116
+#, fuzzy
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Tem certeza que deseja abortar? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Com: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "A seleção não é válida!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Filtro não implementado.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Impossível meclar um vocabulário principal."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr ""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+#, fuzzy
+msgid "End"
+msgstr "fim"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+#, fuzzy
+msgid "Delete the next character"
+msgstr "caracteres de citações de e-mail"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Isto provavelmente é porque:"
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "O campo requerido está faltando"
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "String vazia."
+
+#: modules/speller/default/language.cpp:492
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "O caracter '%s' pode não aparecer no %s da palavra."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+#, fuzzy
+msgid "Does not contain any alphabetic characters."
+msgstr "Não contém nenhuma letra."
+
+#: modules/speller/default/language.cpp:501
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "O caracter '%s' pode não aparecer no %s da palavra."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "O caracter '%s' pode não aparecer no %s da palavra."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+#, fuzzy
+msgid "Wrong soundslike."
+msgstr "Expressão sonora errada"
+
+#: modules/speller/default/readonly_ws.cpp:391
+#, fuzzy
+msgid "Wrong soundslike version."
+msgstr "Versão da expressão sonora errada"
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+#, fuzzy
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Filtro para omitir contextos delimitados do Aspell"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "trocar texto visível e invisível"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caracteres de citações de e-mail"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "númeto de caracteres que podem aparecer antes da citação"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+#, fuzzy
+msgid "HTML attributes to always check"
+msgstr "atributos SGML para verificar sempre"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+#, fuzzy
+msgid "SGML attributes to always check"
+msgstr "atributos SGML para verificar sempre"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+#, fuzzy
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Filtros para reconhecer comandos TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "verificar comentários TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "comandos TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ignorar comandos de substituição"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+#, fuzzy
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Filtros para reconhecer comandos TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+
+#~ msgid "configured as follows"
+#~ msgstr "configurado como a seguir"
+
+#~ msgid "path(es) aspell looks for options descriptions"
+#~ msgstr "caminho(s) de busca por descrições de opções"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "eliminar acentos das palavras do vocabulário"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+#~ msgstr ""
+#~ "%where:1: Filtro \"%filter:2\" não foi encontrado no caminho dos filtros."
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: descrição da opção não localizada."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr ""
+#~ "%where:1: \"%filter:2\" Linha %line:3 confundida pelo controle de versões"
+
+#~ msgid "%action:1: invalid regular expression."
+#~ msgstr "%action:1: expressão regular inválida."
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "entrar no modo HTML/SGML."
+
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  -l|list          produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Uso: aspell [opções] <comando>\n"
+#~ "\n"
+#~ "<comando> pode ser um dos seguintes:\n"
+#~ "  -?|help [<expr>] mostrar essa mensagem de ajuda\n"
+#~ "                   ou apresentar ajuda para filtros se <expr> estiver "
+#~ "disponível\n"
+#~ "  -c|check <file>  para verificar um arquivo\n"
+#~ "  -a|pipe          \"ispell -a\" modo de compatibilidade\n"
+#~ "  -l|list          produz uma lista de palavras escritas erradas na saída "
+#~ "padrão\n"
+#~ "  [dump] config [-e <expr>]  mostra a configuração atual na saída padrão\n"
+#~ "  config [+e <expr>] <key>   imprime o valor atual de uma opção\n"
+#~ "  soundslike       retorna a expressão sonora equivalente a cada palavra\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  filter           filtra o conteúdo da entrada padrão\n"
+#~ "  -v|version       mostra a versão do programa\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    mostrar, criar ou mesclar o vocabulário principal ou pessoal.\n"
+#~ "\n"
+#~ "  <expr>           expressão regular combinando com o(s) filtro(s) or "
+#~ "\"all\"\n"
+#~ "\n"
+#~ "[options] pode ser uma das seguintes:\n"
+#~ "\n"
+
+#~ msgid "beginning"
+#~ msgstr "início"
+
+#~ msgid "middle"
+#~ msgstr "meio"
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Filtro para eliminar caracteres de citações de e-mail"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Filtros para codificar, filtrar e decodificar caracteres SGML"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644 (file)
index 0000000..0122c46
--- /dev/null
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644 (file)
index 0000000..2436c49
--- /dev/null
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644 (file)
index 0000000..3c2fa5d
Binary files /dev/null and b/po/ro.gmo differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644 (file)
index 0000000..3aa92c8
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,1558 @@
+# Mesajele în limba românã pentru aspell.
+# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+# Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul aspell.
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2003, 2006.
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.5-pre1\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2006-12-11 12:00-0500\n"
+"Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && (n%"
+"100) < 20)) ? 1 : 2);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "un numãr între 0 ºi 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "în forma \"<nume> <valoare>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "ºir"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "întreg"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "listã"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "fie \"true\" fie \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "un întreg pozitiv"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# implicit: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filtru: %s\n"
+"#   %s\n"
+"#\n"
+"# configurat astfel:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "variabila de mediu ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "fiºier principal de configurare"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "locaþia fiºierului principal de configurare"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "locaþia fiºierelor de date pentru limbi"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "creazã director alias-uri"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "locaþia listei de cuvinte principalã"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "encoding în care se aºteaptã datele"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "adaugã sau ºterge un filtru"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "cale/cãi unde aspell cautã filtre"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "mod filtru"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "extra dicþionare de folosit"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "locaþia fiºierelor personale"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorã cuvinte <= n litere"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignorã accente la verificarea cuvintelor -- DEOCAMDATàIGNORAT"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorã litere mari/mici la verificarea cuvintelor"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorã comenzi de pãstrare a perechilor de înlocuiri"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informaþie suplimentarã pentru lista de cuvinte"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definiþia tastaturii de folosit pentru analiza tastãrii"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "cod limbã"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "depãsit, folosiþi lang în schimb"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "locaþia fiºierelor locale de date pentru limbi"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "numele de bazã al dicþionarului principal de folosit"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "seteazã nume modul"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "aautã ordinea pentru module"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "permite normalizarea Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Normalizare Unicode necesarã pentru limba curentã"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Tipuri de normalizare Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "evitã conversii cu pierderi la normalizare"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "fiºiere de configurare personal"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "nume fiºier dicþionar personal"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "director prefix"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "nume fiºier cu lista de înlocuiri"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "considerã cuvintele puse într-un cuvânt legale"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "numãr maxim care pot fi legate împreunã"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "lungime minimã a cuvintelor interioare"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "salveazã perechile de înlocuiri la salveazã tot"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "seteazã prefixul bazat pe locaþia executabilului"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "dimensiunea listei de cuvinte"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "nu mai este folosit"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "mod suggestie"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "editeazã distanþa de folosit, ignorã sug-mode implicit"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "foloseºte analiza tastãrii, ignorã sug-mode implicit"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "foloseºte tabele de înlocuiri, ignorã sug-mode implicit"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "literele de inserat când un cuvânt este despãrþit"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "foloseºte dicþionarele personale, de înlocuire ºi de sesiune"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "cale cãutare pentru fisierele cu informaþii despre listele de cuvinte"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "permite avertismente"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+"indicator pentru marcajele de affix în listele de cuvinte -- DEOCAMDATà"
+"IGNORAT"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "foloseºte compresia affix-elor la crearea dicþionarelor"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "îndepãrteazã marcajele affix invalide"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "încarcã sã cureþe cuvintele astfel încât acestea sã fie valide"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "calculeazã variantele \"sunã ca\" la nevoie, nu le stoca"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "expandeazã parþial affix-ele pentru sugestii mai bune"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "sãri peste cuvintele invalide"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "verificã dacã marcajele affix sunt valide "
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "verificã dacã cuvintele sunt valide"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "creazã un fiºier de rezervã adãugând \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "Foloseºte offset-uri în octeþi în loc de offset-uri în caractere"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "creazã combinaþiile rãdãcinã/affix ce lipsesc"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapare tastaturã pentru modul verificare: \"aspell\" sau \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "schimbã ordinea listei de sugestii"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "sugereazã înlocuiri posibile"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "cronometreazã timpul de încãrcare ºi sugereazã timpul în modul pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Aceasta ar putea de asemenea însemna cã fiºierul \"%s\" nu a putut fi "
+"deschis pentru citire sau cã nu existã."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Codul Unicode punct U+%04X nu este suportat."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Secvenþã UTF-8 invalidã la poziþia %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operaþie Nesuportatã: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metoda \"%what:1\" nu este implementatã în \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%fiºier:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Fiºierul \"%file:1\" nu poate fi deschis"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Fiºierul \"%file:1\" nu poate fi deschis pentru citire."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Fiºierul \"%file:1\" nu poate fi deschis pentru scriere."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Numele fiºierului \"%file:1\" este invalid."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Fiºierul \"%file:1\" nu este în formatul potrivit."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Directorul \"%dir:1\" nu poate fi deschis pentru citire."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Cheia \"%key:1\" este necunoscutã."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Valoarea pentru opþiunea \"%key:1\" nu poate fi schimbatã."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Cheia \"%key:1\" nu este %accepted:2 ºi de aceea este invalidã."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Valoarea \"%value:2\" nu este %accepted:3 ºi de aceea este invalidã pentru "
+"\"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Cheia \"%key:1\" nu este un ºir."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Cheia \"%key:1\" nu este un întreg."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Cheia \"%key:1\" nu este un boolean."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Cheia \"%key:1\" nu este o listã."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Cheia \"%key:1\" nu ia nici un parametru când este prefixatã de un \"reset-"
+"\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Cheia \"%key:1\" nu ia nici un parametru când este prefixatã de un \"enable-"
+"\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Cheia \"%key:1\" nu ia nici un parametru când este prefixatã de un \"dont-\" "
+"or \"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Cheia \"%key:1\" nu ia nici un parametru când este prefixatã de un \"clear-"
+"\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Limba \"%lang:1\" nu este cunoscutã."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Sunã-ca \"%sl:2\" nu este cunoscut."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Limba \"%lang:1\" nu este suportatã."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Nu poate fi gãsitã nici o listã de cuvinte pentru limba \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Limba aºteptatã \"%lang:1\" dat am primit \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Affix-ul '%aff:1' este corupt"
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Condiþia \"%cond:1\" este invalidã."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Condiþia \"%cond:1\" nu garanteazã cã \"%strip:2\" poate fi întotdeauna "
+"redusã (stripped)."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Fiºierul \"%file:1\" nu este în formatul potrivit. Aºteptam ca fiºierul sã "
+"fie în \"%exp:2\" nu în \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Encoding-ul \"%encod:1\" nu este cunoscut."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Encoding-ul \"%encod:1\" nu este suportat."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Conversia de la \"%encod:1\" la \"%encod2:2\" nu este suportat."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "ªirul \"%str:1\" este invalid."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Cuvântul \"%word:1\" este invalid."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Marcaju affix %aff:1' este invalid pentru cuvântul \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Marcajul affix '%aff:1' nu poate fi aplicat cuvântului \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "nu este un numãr de versiune"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen a returnat \"%return:2\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Fiºierul \"%filter:1\" nu conþine nici un filtru."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filtrul \"%filter:1\" nu existã."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Confuzat de controlul versiunilor."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Versiunea Aspell nu se potriveºte cu cerinþele filtrului."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Opþiunea fitru existã deja."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Foloseºte modificatori opþiune numai în opþiunea numitã."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Modificator opþiune necunoscut."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Eroare la setarea descrierii filtrului."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Opþiune specificator goalã."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Opþiunea \"%option:1\" probabil specificatã înainte de filtru."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Cheie de descriere a modului necunoscutã \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Aºteptam cheia \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Specificator de versiune cu cheie lipsã : \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Versiunea Aspell nu se potriveºte cu cerinþele modului."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Lipseºte expresia de mod magic"
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Extensie goalã la caracterul %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "eroare \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Mod necunoscut: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"Eroare \"%mode:1\" la extinderea opþiunilor Aspell. (nu mai e memorie?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": nici un început pentru cãutarea magicã datã pentru magic \"%"
+"magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": nici un interval pentru cãutarea magicã datã pentru magic \"%"
+"magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": nici o expresie magicã disponibilã pentru magic \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": expresie regularã greºitã dupã "
+"specificatorul de locaþie; regexp raporteazã: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expresia:1\": nu este o expresie regularã validã."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Eroare neprelucratã: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Eroare: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Eroare: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "intrã mod Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "intrã mod HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "intrã mod TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "intrã mod Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Opþiune Invalidã: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " nu ia nici un parametru."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Trebuie sã specificaþi un parametru pentru \"%s\""
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Trebuie sã specificaþi o acþiune"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Acþiune necunoscutã: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Eroare: Trebuie sã specificaþi cel puþin %d parametri pentru \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Intrare Invalidã"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "AVERTISMENT: Nu pot intra în modul Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Timp de încãrcare a listei de cuvinte: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Timp sugerat: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Trebuie sã specificaþi un nume de fiºier."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Nu am putut deschide fiºierul \"%s\" pentru citire."
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Mapare tastaturã invalidã: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Nu am putut deschide fiºierul \"%s\" pentru scriere. Fiºier nesalvat."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorã"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorã tot"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Înlocuieºte"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Înlocuieºte tot"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Adaugã"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Adaugã mai jos"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Renunþã"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Terminã"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Sunteþi sigur(ã) cã doriþi sã renunþaþi (d/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Dd"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Cu: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Îmi pare rãu, aceasta este o alegere invalidã!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Îmi pare rãu, \"filter\" nu este încã implementat.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Încã nu pot combina o listã de cuvinte principalã. Îmi pare rãu."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Îmi pare rãu, \"create/merge personal\" nu este încã implementat.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Îmi pare rãu, nu pot suprascrie \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Îmi pare rãu, \"create/merge repl\" nu este încã implementat.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" nu este o opþiune validã pentru comanda \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Folosire: aspell [opþiuni] <comandã>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<comandã> este una dintre urmãtoarele:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+"  -?|folosire         afiºeazã un scurt mesaj cu instrucþiuni de folosire"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+"  help                afiºeazã un mesaj detaliat cu instrucþiuni de folosire"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fiºier>   pentru a verifica un fiºier"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe             \"ispell -a\" mod compatibilitate"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config       afiºeazã configuraþia curentã la stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <cheie>      afiºeazã valoarea curentã a unei opþiuni"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicþionare | filtre | moduri"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    afiºeazã dicþionare / filtre / moduri de filtrare disponibile"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[opþiuni] este oricare dintre urmãtoarele:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list                produce o listã de cuvinte scrise greºit de la "
+"intrarea standard"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike          returneazã cuvintele care sunã echivalent cu fiecare "
+"cuvânt introdus"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+"  munch               genereazã toate cuvintele rãdãcinã ºi afixele posibile"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]        genereazã marcajele afix"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]      curãþã o listã de cuvinte astfel încât fiecare linie "
+"este un cuvânt valid"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version          afiºeazã o linie cu versiunea"
+
+#: prog/aspell.cpp:2831
+#, fuzzy
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]\n"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    reduce dimensiunea unei liste de cuvinte prin comprimarea afixelor"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <din> <în> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    converteºte dintr-un encoding în altul"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <din> <norm-map> <în>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    realizeazã normalizarea Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<nume>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    afiºeazã, creazã sau combinã un dicþionar principal, personal sau "
+"înlocuitor."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>         forma normalizatã de folosit, fie none, internal sau "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 de Kevin Atkinson.\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Dicþionare disponibile:\n"
+"    Dicþionarele pot fi selectate direct folosind opþiunile \"-d\" sau "
+"\"master\".\n"
+"    Ele mai pot fi selectate indirect folosind opþiunile \"lang\", \"variety"
+"\",\n"
+"    ºi \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtre disponibile (ºi opþiunile asociate):\n"
+"    Filtrele pot fi adãugate ºi îndepãrtate folosind opþiunea \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filtru: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Moduri filtru disponibile:\n"
+"    Modurile filtru subt combinaþii reconfigurate de filtre optimizate "
+"pentru\n"
+"    fiºiere de un anumit tip. Un mod este selectat folosind opþiunea \"mode"
+"\".\n"
+"    Aceasta va avea loc implicit dacã Aspell poate identifica tipul "
+"fiºierului\n"
+"    în funcþie de extensia ºi probabil conþinutul fiºierului.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Eroare: Stdin nu un terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accept schimbãrile"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "ªterge caracterul precedent"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Stânga"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Mutã înapoi un spaþiu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Dreapta"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Mutã înainte un spaþiu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Acasã"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Mutã la începutul liniei"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Sfârºit"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Mutã la sfârºitul liniei"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "ªterge"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "ªterge urmãtorul caracter"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "ªterge toate caracterele pânã la EOL (sfârºit de linie)"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Terminã aceastã operaþie"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Aceasta probabil deoarece: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Câmpul necesar \"name\" lipseºte."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "ªir de caractere gol."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Caracterul '%s' (U+%02X) nu poate apare la începutul unui cuvânt."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Caracterul '%s' (U+%02X) trebuie urmat de o literã din alfabet."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Nu conþine nici o literã din alfabet"
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Caracterul '%s' (U+%02X) nu poate apare la mijlocul unui cuvânt."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Caracterul '\\r' (U+0D) nu poate apare la sfârºitul unui cuvânt. Aceasta "
+"înseamnã probabil cã fiºierul foloseºte EOL din MS-DOS în loc de EOL din "
+"Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Caracterul '%s' (U+%02X) nu poate apare la sfârºitul unui cuvânt."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Avertisment: Îndepãrtez affix-ul incorect '%s' din cuvântul %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Avertisment: Îndepãrtez affix-ul incorect '%s' din cuvântul %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Avertisment: %s Sãr peste ºir.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Lungimea totalã e mai mare de 240 caractere."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Avertisment: %s sare cuvânt.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Mumãrãtoare posibil incorectã."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Ordine endian-ã greºitã."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "\"Sunã ca\" greºit."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Versiune \"Sunã ca\" greºitã."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Marcaje affix gãsie în cuvânt dar nici un fiºier de affix-e dat."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Lungimea totalã a cuvântului, cu datele \"sunã ca\", e mai mare de 240 "
+"caractere."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Trebuie sã existe cel puþin o linie \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "una dintre ultra, fast, normal, slow sau bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "nu este unul dintre tipurile permise"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Lista de cuvinte personalã nu este disponibilã."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Lista de cuvinte de sesiune nu este disponibilã."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Lista de cuvinte principalã nu este disponibilã."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "un ºir de 'o','O','p' sau 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "filtru experimental pentru ascunderea contexte delimitate"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "delimitator(i) de context (separaþi de spaþii)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "schimbã între ele textele vizibile ºi invizibile"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filtru pentru ignorarea textelor din citate din mesajele de email"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caracter citare în email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "num caractere ce pot apare înainte de caracterul citare"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filtru de procesare a documentelor HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atribute HTML de verificat întotdeauna"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "marcaje HTML ale cãror conþinut sã fie ignorat"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filtru pentru procesarea documentelor Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filtru pentru procesarea documentelor SGML/XML generice"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atribute SGML de verificat întotdeauna"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "marcaje SGML ale cãror conþinut sã fie ignorat"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Filtru pentru procesarea documentelor TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "verificã comentariile TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "Comenzi TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filtru pentru procesarea documentelor Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Comenzi Texinfo pentru care sunt ignoraþi parametrii"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Medii Texinfo de ignorat"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filtru pentru ignorarea construcþiilor gen URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "mod pentru verificarea comentariilor C++ ºi ºirurilor literare"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "mod pentru verificarea liniilor ce încep cu un #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "mod pentru ignorarea textelor citate în mesaje email"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "mod pentru verificarea documentelor HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "mod pentru deactivarea tuturor filtrelor"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "mod pentru verificarea documentelor Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "mod pentru verificarea comentariilor Perl ºi a ºirurilor literare"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "mod pentru verificare documentelor SGML/XML generice"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "mod pentru verificarea documentelor TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "mod pentru verificarea documentelor Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "mod de ignorat construcþii de tip URL (mod implicit)"
+
+#~ msgid "configured as follows"
+#~ msgstr "configurat astfel"
+
+#~ msgid "path(es) aspell looks for options descriptions"
+#~ msgstr "cale/cãi unde aspell cautã descrieri de opþiuni"
+
+#~ msgid "lis key `\"%key:1\"' requires one of [add|rem|rem-all]-"
+#~ msgstr "Cheia `\"%key:1\"' necesitã una dintre [add|rem|rem-all]-"
+
+#~ msgid "\"%filter:1\":"
+#~ msgstr "\"%filter:1\":"
+
+#~ msgid "Filter \"%filter:1\" could not be found in filter paths."
+#~ msgstr "Filtrul \"%filter:1\" nu a putut fi gãsit în calea de filtre."
+
+#~ msgid "Can't find the option file \"%option:2\"."
+#~ msgstr "Nu pot gãsi fiºierul de opþiuni \"%option:2\"."
+
+#~ msgid "Empty value; only bool type option and \"rem-all\" list prefix."
+#~ msgstr ""
+#~ "Valoare goalã; numai opþiune de tip boolean ºi listã prefixe \"rem-all\""
+
+#~ msgid "\"%action:1\": invalid regular expression."
+#~ msgstr "\"%action:1\": expresie regularã invalidã."
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "intrã mod Html/Sgml."
+
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  list             produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  clean [strict]   cleans a word list so that every line is a valid word\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  conv <from> <to> [<norm-form>]\n"
+#~ "    converts from one encoding to another\n"
+#~ "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]\n"
+#~ "    perform unicode normlization\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "  <norm-form>      normalization form to use, either none, internal, or "
+#~ "strict\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 de Kevin Atkinson.\n"
+#~ "\n"
+#~ "Folosire: aspell [opþiuni] <comandã>\n"
+#~ "\n"
+#~ "<comandã> este una dintre:\n"
+#~ "  -?|help [<expr>]  afiºeazã acest mesaj de ajutor\n"
+#~ "                     ºi ajutor pentru filtrele ce se potrivesc cu <expr>\n"
+#~ "                     dacã acestea sunt instalate\n"
+#~ "  -c|check <fiºier> pentru a verifica un fiºier\n"
+#~ "  -a|pipe           mod compatibilitate \"ispell -a\"\n"
+#~ "  list              genereazã o listã de cuvinte scrise greºit de la "
+#~ "intrarea standard\n"
+#~ "  [dump] config [-e <expr>]  scrie configuraþia curentã la stdout\n"
+#~ "  config [+e <expr>] <key>   afiºeazã valoarea curentã pentru o opþiune\n"
+#~ "  soundslike        întoarce echivalentul \"sunã ca\" pentru fiecare "
+#~ "cuvânt introdus\n"
+#~ "  munch             genereazã cuvintele rãdãcinã posibile ºi affix-ele\n"
+#~ "  expand [1-4]      expandeazã marcajele affix\n"
+#~ "  clean [strict]    curãþã o listã de cuvinte pentru ca fiecare linie sã "
+#~ "fie\n"
+#~ "                     un cuvânt valid\n"
+#~ "  filter            paseazã intrarea standard prin filtre\n"
+#~ "  -v|version        afiºeazã o linie de versiune\n"
+#~ "  conv <din> <în> [<norm-form>]\n"
+#~ "    converteºte dintr-un encodin într-altul\n"
+#~ "  norm (<norm-map> | <din> <norm-map> <în>) [<norm-form>]\n"
+#~ "    realizeazã normalizare unicode\n"
+#~ "  dump|create|merge master|personal|repl [listã cuvinte]\n"
+#~ "    scrie, creazã sau combinã o listã de cuvinte principalã, personalã, \n"
+#~ "    sau de înlocuiri.\n"
+#~ "\n"
+#~ "  <expr>           expresii regulare ce se potrivesc cu numefiltre sau "
+#~ "\"all\"\n"
+#~ "  <norm-form>      forma de normalizare de folosit, fie none, internal \n"
+#~ "                    sau strict\n"
+#~ "\n"
+#~ "[opþiuni] este oricare dintre urmãtoarele:\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "  %s filter: %s\n"
+#~ "    NOTE: in ambiguous case prefix following options by \"filter-\"\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  %s filtru: %s\n"
+#~ "    NOTÃ: în cazurile ambigue puneþi prefixul \"filter-\" pentru "
+#~ "urmãtoarele opþiuni\n"
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Filtru penntru eliminarea citãrii în email"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Filtre pentru encodare, aplicabile caracterelor sgml"
+
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "litere codate multi-caracter (<char>:<rep>[:<rep>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "caractere folosite pentru a encoda locaþii de despãrþire în silabe"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "Filtru pentru ascundere cãilor/url-urilor ºi similar din Aspell"
+
+#~ msgid "indicator for additional flags in word lists"
+#~ msgstr "indicator pentru marcaje adiþionale în listele de cuvinte"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: nu pot gãsi descrierea opþiunii."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr ""
+#~ "%where:1: \"%filter:2\" Linia %line:3 confuzatã de controlul versiunii"
+
+#~ msgid "Expected the file to be in \"%s\" not \"%s\"."
+#~ msgstr "M-am aºteptat ca fiºierul sã fie în \"%s\" nu în \"%s\"."
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644 (file)
index 0000000..cd32e0d
Binary files /dev/null and b/po/ru.gmo differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..be81c82
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1384 @@
+# Translation of aspell-0.60.5.po to Russian
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the aspell package.
+# Copyright (C) 2004 Kevin Atkinson.
+#
+# Pavel Maryanov <acid_jack@ukr.net>, 2004, 2005, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell-0.60.5\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2010-12-11 20:27+0600\n"
+"Last-Translator: áÌÅËÓ <davian818@gmail.com>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=KOI8-R\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "ÞÉÓÌÏ ÍÅÖÄÕ 0 É 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "× ×ÉÄÅ \"<ÉÍÑ> <ÚÎÁÞÅÎÉÅ>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "string"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "integer"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "ÓÐÉÓÏË"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "\"true\" ÌÉÂÏ \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "ÐÏÌÏÖÉÔÅÌØÎÏÅ ÃÅÌÏÅ ÞÉÓÌÏ"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# ÐÏ ÕÍÏÌÞÁÎÉÀ: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# æÉÌØÔÒ: %s\n"
+"#   %s\n"
+"#\n"
+"# ÎÁÓÔÒÏÅΠÓÌÅÄÕÀÝÉÍ ÏÂÒÁÚÏÍ:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ÐÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "ÇÌÁ×ÎÙÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÇÌÁ×ÎÏÇÏ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÆÁÊÌÏ× ÑÚÙËÏ×ÙÈ ÄÁÎÎÙÈ"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "ÓÏÚÄÁÎÉÅ ÐÓÅ×ÄÏÎÉÍÏ× ÓÌÏ×ÁÒÑ"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÇÌÁ×ÎÏÇÏ ÓÐÉÓËÁ ÓÌÏ×"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "ÏÖÉÄÁÅÍÁÑ ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "ÄÏÂÁ×ÌÅÎÉÅ ÉÌÉ ÕÄÁÌÅÎÉÅ ÆÉÌØÔÒÁ"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "ÐÕÔÉ ÄÌÑ ÐÏÉÓËÁ ÆÉÌØÔÒÏ× aspell"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "ÒÅÖÉÍ ÆÉÌØÔÒÁ"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ÉÓÐÏÌØÚÕÅÍÙÅ ÓÌÏ×ÁÒÉ"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÌÉÞÎÙÈ ÆÁÊÌÏ×"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÎÉÅ ÓÌÏ× ËÏÒÏÞÅ n ÓÉÍ×ÏÌÏ×"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÎÉÅ ÕÄÁÒÅÎÉÊ ÐÒÉ ÐÒÏ×ÅÒËÅ ÓÌÏ× -- óåêþáó éçîïòéòõåôóñ"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÎÉÅ ÒÅÇÉÓÔÒÁ ÐÒÉ ÐÒÏ×ÅÒËÅ ÓÌÏ×"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÎÉÅ ËÏÍÁÎÄ ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ ÐÁÒ ÚÁÍÅÎÙ"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "ÄÏÐ. ÉÎÆÏÒÍÁÃÉÑ ÄÌÑ ÓÐÉÓËÁ ÓÌÏ×"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "ÏÐÒÅÄÅÌÅÎÉÅ ËÌÁ×ÉÁÔÕÒÙ ÄÌÑ ÁÎÁÌÉÚÁ ÏÐÅÞÁÔÏË"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "ËÏÄ ÑÚÙËÁ"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "ÕÓÔÁÒÅÌ, ÉÓÐÏÌØÚÕÊÔÅ lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÆÁÊÌÏ× ÌÏËÁÌØÎÙÈ ÑÚÙËÏ×ÙÈ ÄÁÎÎÙÈ"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "ÂÁÚÏ×ÏÅ ÉÍÑ ÇÌÁ×ÎÏÇÏ ÓÌÏ×ÁÒÑ"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "ÕÓÔÁÎÏ×ËÁ ÉÍÅÎÉ ÍÏÄÕÌÑ"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ÐÏÒÑÄÏË ÐÏÉÓËÁ ÍÏÄÕÌÑ"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "×ËÌÀÞÅÎÉÅ ÎÏÒÍÁÌÉÚÁÃÉÉ àÎÉËÏÄÁ"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "ÄÌÑ ÔÅËÕÝÅÇÏ ÑÚÙËÁ ÔÒÅÂÕÅÔÓÑ ÎÏÒÍÁÌÉÚÁÃÉÑ àÎÉËÏÄÁ"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "ÔÉРÎÏÒÍÁÌÉÚÁÃÉÉ àÎÉËÏÄÁ: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "ÎÅ ÄÏÐÕÓËÁÔØ ÐÏÔÅÒØ ÐÒÉ ÎÏÒÍÁÌÉÚÁÃÉÉ"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "ÌÉÞÎÙÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "ÉÍÑ ÆÁÊÌÁ ÌÉÞÎÏÇÏ ÓÌÏ×ÁÒÑ"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "ËÁÔÁÌÏÇ-ÐÒÅÆÉËÓ"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "ÉÍÑ ÆÁÊÌÁ ÓÐÉÓËÁ ÚÁÍÅÎ"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "ÒÁÚÒÅÛÁÔØ ÎÁÐÉÓÁÎÎÙÅ ÓÌÉÔÎÏ ÓÌÏ×Á"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÎÁÐÉÓÁÎÎÙÈ ÓÌÉÔÎÏ ÓÌÏ×"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "ÍÉÎÉÍÁÌØÎÁÑ ÄÌÉÎÁ ×ÎÕÔÒÅÎÎÉÈ ÓÌÏ×"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "ÓÏÈÒÁÎÅÎÉÅ ÚÁÍÅÎÅÎÎÙÈ ÐÁÒ ÐÒÉ ÓÏÈÒÁÎÅÎÉÉ ×ÓÅÇÏ"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "ÕÓÔ. ÐÒÅÆÉËÓÁ ÓÏÇÌÁÓÎÏ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÀ ÉÓÐ. ÆÁÊÌÁ"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "ÒÁÚÍÅÒ ÓÐÉÓËÁ ÓÌÏ×"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "ÂÏÌØÛÅ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "ÒÅÖÉÍ ÐÒÅÄÌÏÖÅÎÉÑ"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "ÉÚÍÅÎÅÎÉÅ ÉÓÐ. ÒÁÓÓÔÏÑÎÉÑ, ÐÅÒÅËÒÙ×ÁÅÔ sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "ÉÓÐÏÌØÚÏ×. ÁÎÁÌÉÚÁ ÏÐÅÞÁÔÏË, ÐÅÒÅËÒÙ×ÁÅÔ sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "ÉÓÐÏÌØÚÏ×. ÔÁÂÌÉàÚÁÍÅÎÙ, ÐÅÒÅËÒÙ×ÁÅÔ sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "ÓÉÍ×ÏÌÙ, ×ÓÔÁ×ÌÑÅÍÙÅ ÐÒÉ ÒÁÚÄÅÌÅÎÉÉ ÓÌÏ×Á"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÌÉÞÎ., Ó ÚÁÍÅÎ. É ÓÅÓÓÉÏÎ. ÓÌÏ×ÁÒÅÊ"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "ÐÕÔØ ÐÏÉÓËÁ ÆÁÊÌÏ× Ó ÉÎÆÏÒÍÁÃÉÅÊ ÓÐÉÓËÁ ÓÌÏ×"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "×ËÌÀÞÅÎÉÅ ÐÒÅÄÕÐÒÅÖÄÅÎÉÊ"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "ÉÎÄÉËÁÔÏÒ ÆÌÁÇÏ× ÁÆÆÉËÓÏ× × ÓÐÉÓËÁÈ ÓÌÏ× - óåêþáó éçîïòéòõåôóñ"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÖÁÔÉÑ ÁÆÆÉËÓÏ× ÐÒÉ ÓÏÚÄÁÎÉÉ ÓÌÏ×ÁÒÅÊ"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "ÕÄÁÌÅÎÉÅ ÎÅ×ÅÒÎÙÈ ÆÌÁÇÏ× ÁÆÆÉËÓÏ×"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "ÐÏÐÙÔËÁ ÏÞÉÓÔÉÔØ ÓÌÏ×Á, ÞÔÏÂÙ ÏÎÉ ÓÔÁÌÉ ×ÅÒÎÙÍÉ"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "×ÙÞÉÓÌÅÎÉÅ soundslike ÐÏ ÔÒÅÂÏ×ÁÎÉÀ ×ÍÅÓÔÏ ÈÒÁÎÅÎÉÑ"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "ÞÁÓÔÉÞÎÏÅ ÒÁÓÛÉÒ. ÁÆÆÉËÓÏ× ÄÌÑ ÕÌÕÞÛ. ÐÒÅÄÌÏÖÅÎÉÊ"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "ÐÒÏÐÕÓË ÎÅ×ÅÒÎÙÈ ÓÌÏ×"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "ÐÒÏ×ÅÒËÁ ÐÒÁ×ÉÌØÎÏÓÔÉ ÆÌÁÇÏ× ÁÆÆÉËÓÏ×"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "ÐÒÏ×ÅÒËÁ ÐÒÁ×ÉÌØÎÏÓÔÉ ÓÌÏ×"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "ÓÏÚÄÁÎÉÅ ÒÅÚÅÒ×ÎÏÇÏ ÆÁÊÌÁ ÄÏÂÁ×ÌÅÎÉÅÍ \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "ÓÍÅÝÅÎÉÑ × ÂÁÊÔÁÈ ×ÍÅÓÔÏ ÓÍÅÝÅÎÉÊ × ÓÉÍ×ÏÌÁÈ"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "ÓÏÚÄÁÎÉÅ ÏÔÓÕÔÓÔ×ÕÀÝÉÈ ËÏÍÂÉÎÁÃÉÊ ËÏÒÅÎØ/ÁÆÆÉËÓ"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "ËÌÁ×ÉÛÉ ÒÅÖÉÍÁ ÐÒÏ×ÅÒËÉ: \"aspell\" ÉÌÉ \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "ÏÂÒÁÔÎÙÊ ÐÏÒÑÄÏË ÓÐÉÓËÁ ÐÒÅÄÌÏÖÅÎÉÊ"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "ÐÒÅÄÌÏÖÅÎÉÅ ×ÏÚÍÏÖÎÙÈ ÚÁÍÅÎ"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "×ÒÅÍÑ ÚÁÇÒÕÚËÉ É ×ÒÅÍÑ ÐÒÅÄÌÏÖÅÎÉÑ × pipe-ÒÅÖÉÍÅ"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"üÔÏ ÔÁËÖÅ ÍÏÖÅÔ ÏÚÎÁÞÁÔØ, ÞÔÏ ÆÁÊÌ  \"%s\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔËÒÙÔ ÄÌÑ ÞÔÅÎÉÑ "
+"ÉÌÉ ÏΠÎÅ ÓÕÝÅÓÔ×ÕÅÔ."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "óÉÍ×ÏÌ àÎÉËÏÄÁ U+%04X ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "îÅ×ÅÒÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ UTF-8 ÐÏ ÁÄÒÅÓÕ %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "íÅÔÏÄ \"%what:1\" ÎÅ ÒÅÁÌÉÚÏ×ÁΠנ\"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "æÁÊÌ \"%file:1\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔËÒÙÔ"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "æÁÊÌ \"%file:1\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔËÒÙÔ ÄÌÑ ÞÔÅÎÉÑ."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "æÁÊÌ \"%file:1\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔËÒÙÔ ÄÌÑ ÚÁÐÉÓÉ."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "îÅ×ÅÒÎÏÅ ÉÍÑ ÆÁÊÌÁ \"%file:1\"."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "æÁÊÌ \"%file:1\" × ÎÅÐÏÄÈÏÄÑÝÅÍ ÆÏÒÍÁÔÅ."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "ëÁÔÁÌÏÇ \"%dir:1\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔËÒÙÔ ÄÌÑ ÞÔÅÎÉÑ."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ ÉÚ×ÅÓÔÅÎ."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "úÎÁÞÅÎÉÅ ÄÌÑ ÏÐÃÉÉ \"%key:1\" ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÏ."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ %accepted:2, É ÐÏÜÔÏÍÕ Ñ×ÌÑÅÔÓÑ ÎÅ×ÅÒÎÙÍ."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"úÎÁÞÅÎÉÅ \"%value:2\" ÎÅ %accepted:3, É ÐÏÜÔÏÍÕ Ñ×ÌÑÅÔÓÑ ÎÅ×ÅÒÎÙÍ ÄÌÑ ËÌÀÞÁ "
+"\"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ Ñ×ÌÑÅÔÓÑ ÓÔÒÏËÏÊ."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ Ñ×ÌÑÅÔÓÑ ÃÅÌÙÍ ÞÉÓÌÏÍ."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ Ñ×ÌÑÅÔÓÑ ÌÏÇÉÞÅÓËÉÍ ÚÎÁÞÅÎÉÅÍ."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "ëÌÀÞ \"%key:1\" ÎÅ Ñ×ÌÑÅÔÓÑ ÓÐÉÓËÏÍ."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "ëÌÀÞ \"%key:1\" Ó ÐÒÅÆÉËÓÏÍ \"reset-\" ÎÅ ÉÓÐÏÌØÚÕÅÔ ÐÁÒÁÍÅÔÒÙ."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "ëÌÀÞ \"%key:1\" Ó ÐÒÅÆÉËÓÏÍ \"enable-\" ÎÅ ÉÓÐÏÌØÚÕÅÔ ÐÁÒÁÍÅÔÒÙ."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"ëÌÀÞ \"%key:1\" Ó ÐÒÅÆÉËÓÁÍÉ \"dont-\" ÉÌÉ \"disable-\" ÎÅ ÉÓÐÏÌØÚÕÅÔ "
+"ÐÁÒÁÍÅÔÒÙ."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "ëÌÀÞ \"%key:1\" Ó ÐÒÅÆÉËÓÏÍ \"clear-\" ÎÅ ÉÓÐÏÌØÚÕÅÔ ÐÁÒÁÍÅÔÒÙ."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "ñÚÙË \"%lang:1\" ÎÅ ÉÚ×ÅÓÔÅÎ."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Soundslike \"%sl:2\" ÎÅ ÉÚ×ÅÓÔÅÎ."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "ñÚÙË \"%lang:1\" ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "îÅ ÎÁÊÄÅÎÙ ÓÐÉÓËÉ ÓÌÏ× ÄÌÑ ÑÚÙËÁ \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "ïÖÉÄÁÌÓÑ ÑÚÙË \"%lang:1\", Á ÐÏÌÕÞÅΠ\"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "áÆÆÉËÓ '%aff:1' ÐÏ×ÒÅÖÄÅÎ."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "îÅ×ÅÒÎÏÅ ÕÓÌÏ×ÉÅ \"%cond:1\"."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"õÓÌÏ×ÉÅ \"%cond:1\" ÎÅ ÇÁÒÁÎÔÉÒÕÅÔ, ÞÔÏ \"%strip:2\" ×ÓÅÇÄÁ ÍÏÖÎÏ ÏÔÄÅÌÉÔØ."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"æÁÊÌ \"%file:1\" × ÎÅÐÏÄÈÏÄÑÝÅÍ ÆÏÒÍÁÔÅ. ïÖÉÄÁÌÏÓØ, ÞÔÏ ÆÁÊÌ ÂÕÄÅÔ \"%exp:2"
+"\", Á ÎÅ \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "ëÏÄÉÒÏ×ËÁ \"%encod:1\" ÎÅ ÉÚ×ÅÓÔÎÁ."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "ëÏÄÉÒÏ×ËÁ \"%encod:1\" ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ \"%encod:1\" × \"%encod2:2\" ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "îÅ×ÅÒÎÁÑ ÓÔÒÏËÁ \"%str:1\"."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "îÅ×ÅÒÎÏÅ ÓÌÏ×Ï \"%word:1\"."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "æÌÁÇ ÁÆÆÉËÓÁ '%aff:1' Ñ×ÌÑÅÔÓÑ ÎÅ×ÅÒÎÙÍ ÄÌÑ ÓÌÏ×Á \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "æÌÁÇ ÁÆÆÉËÓÁ '%aff:1' ÎÅ ÍÏÖÅÔ ÂÙÔØ ÐÒÉÍÅÎÅΠˠÓÌÏ×Õ \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "ÎÅ ÎÏÍÅÒ ×ÅÒÓÉÉ"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen ×ÏÚ×ÒÁÔÉÌ \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "æÁÊÌ \"%filter:1\" ÎÅ ÓÏÄÅÒÖÉÔ ÎÉËÁËÉÈ ÆÉÌØÔÒÏ×."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "æÉÌØÔÒ \"%filter:1\" ÎÅ ÓÕÝÅÓÔ×ÕÅÔ."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "óÂÉÔ Ó ÔÏÌËÕ ÕÐÒÁ×ÌÅÎÉÅÍ ×ÅÒÓÉÑÍÉ."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "÷ÅÒÓÉÑ Aspell ÎÅ ÕÄÏ×ÌÅÔ×ÏÒÑÔ ÔÒÅÂÏ×ÁÎÉÑÍ ÆÉÌØÔÒÁ."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "ïÐÃÉÑ ÆÉÌØÔÒÁ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "éÓÐÏÌØÚÕÊÔÅ ÍÏÄÉÆÉËÁÔÏÒÙ ÏÐÃÉÊ ÔÏÌØËÏ Ó ÉÍÅÎÏ×ÁÎÎÙÍÉ ÏÐÃÉÑÍÉ."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÍÏÄÉÆÉËÁÔÏÒ ÏÐÃÉÉ."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "ïÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÏÐÉÓÁÎÉÑ ÆÉÌØÔÒÁ."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "ðÕÓÔÏÊ ÕËÁÚÁÔÅÌØ ÏÐÃÉÉ."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "÷ÏÚÍÏÖÎÏ, ÏÐÃÉÑ \"%option:1\" ÕËÁÚÁÎÁ ÐÅÒÅÄ ÆÉÌØÔÒÏÍ."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ ÏÐÉÓÁÎÉÑ ÒÅÖÉÍÁ \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "ïÖÉÄÁÅÔÓÑ ËÌÀÞ \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ËÌÀÞ ÕËÁÚÁÔÅÌÑ ×ÅÒÓÉÉ: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "÷ÅÒÓÉÑ Aspell ÎÅ ÕÄÏ×ÌÅÔ×ÏÒÑÅÔ ÔÒÅÂÏ×ÁÎÉÑÍ ÒÅÖÉÍÁ."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ×ÙÒÁÖÅÎÉÅ ÒÅÖÉÍÁ magic."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "ðÕÓÔÏÅ ÒÁÓÛÉÒÅÎÉÅ × ÓÉÍ×ÏÌÅ %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "ïÛÉÂËÁ \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÒÅÖÉÍ: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "ïÛÉÂËÁ \"%mode:1\" ÐÒÉ ÒÁÓÛÉÒÅÎÉÉ ÒÅÖÉÍÏ× Aspell (ÎÅÈ×ÁÔËÁ ÐÁÍÑÔÉ?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": ÎÅÔ ÎÁÞÁÌÁ ÄÌÑ ÐÏÉÓËÁ magic, ÚÁÄÁÎÎÏÇÏ ÄÌÑ magic \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": ÎÅÔ ÄÉÁÐÁÚÏÎÁ ÄÌÑ ÐÏÉÓËÁ magic, ÚÁÄÁÎÎÏÇÏ ÄÌÑ magic \"%magic:2"
+"\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": ÎÅÔ ÄÏÓÔÕÐÎÏÇÏ ×ÙÒÁÖÅÎÉÑ magic ÄÌÑ magic \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": ÎÅ×ÅÒÎÏÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÐÏÓÌÅ "
+"ÕËÁÚÁÔÅÌÑ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÑ; regexp ×ÏÚ×ÒÁÔÉÌ: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:2\" ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ÒÅÇÕÌÑÒÎÙÍ ×ÙÒÁÖÅÎÉÅÍ."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÁÑ ÏÛÉÂËÁ: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "ïÛÉÂËÁ: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "ïÛÉÂËÁ: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "ÐÅÒÅÈÏÄ × ÒÅÖÉÍ Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "ÐÅÒÅÈÏÄ × ÒÅÖÉÍ HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "ÐÅÒÅÈÏÄ × ÒÅÖÉÍ TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "ÐÅÒÅÈÏÄ × ÒÅÖÉÍ Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "îÅ×ÅÒÎÁÑ ÏÐÃÉÑ: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " ÎÅ ÐÒÉÎÉÍÁÅÔ ÎÉËÁËÉÈ ÐÁÒÁÍÅÔÒÏ×."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÐÁÒÁÍÅÔÒ ÄÌÑ \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÄÅÊÓÔ×ÉÅ"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÄÅÊÓÔ×ÉÅ: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "ïÛÉÂËÁ: îÕÖÎÏ ÕËÁÚÁÔØ ÎÅ ÍÅÎÅÅ %d ÐÁÒÁÍÅÔÒÏ× ÄÌÑ \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "îÅ×ÅÒÎÙÅ ×ÈÏÄÎÙÅ ÄÁÎÎÙÅ"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "÷îéíáîéå: îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ÒÅÖÉÍ Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "÷ÒÅÍÑ ÚÁÇÒÕÚËÉ ÓÐÉÓËÁ ÓÌÏ×: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "÷ÒÅÍÑ ÐÒÅÄÌÏÖÅÎÉÑ: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "õËÁÖÉÔÅ ÉÍÑ ÆÁÊÌÁ."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "íÏÖÎÏ ÕËÁÚÁÔØ ÔÏÌØËÏ ÏÄÎÏ ÉÍÑ ÆÁÊÌÁ."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ \"%s\" ÄÌÑ ÞÔÅÎÉÑ"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "îÅ×ÅÒÎÙÅ ÓÏÞÅÔÁÎÉÑ ËÌÁ×ÉÛ: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ \"%s\" ÄÌÑ ÚÁÐÉÓÉ. æÁÊÌ ÎÅ ÓÏÈÒÁΣÎ."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "ðÒÏÐÕÓÔÉÔØ"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "ðÒÏÐÕÓÔÉÔØ ×ÓÅ"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "úÁÍÅÎÉÔØ"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "úÁÍÅÎÉÔØ ×ÓÅ"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "äÏÂÁ×ÉÔØ"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "äÏÂÁ×ÉÔØ ÓÔÒÏÞÎ."
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "ðÒÅÒ×ÁÔØ"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "÷ÙÈÏÄ"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "ðÒÅÒ×ÁÔØ ÐÒÏ×ÅÒËÕ (y/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Yy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "îÁ: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "éÚ×ÉÎÉÔÅ, ÜÔÏ ÎÅ×ÅÒÎÙÊ ×ÙÂÏÒ!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "éÚ×ÉÎÉÔÅ, \"filter\" ÎÁ ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÎÅ ÒÅÌÉÚÏ×ÁÎ.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "ðÏËÁ ÞÔÏ ÎÅ×ÏÚÍÏÖÎÏ ÏÂßÅÄÉÎÉÔØ ÇÌÁ×ÎÙÊ ÓÐÉÓÏË ÓÌÏ×. éÚ×ÉÎÉÔÅ."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "éÚ×ÉÎÉÔÅ, \"create/merge personal\" ÎÁ ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÎÅ ÒÅÁÌÉÚÏ×ÁÎ.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "éÚ×ÉÎÉÔÅ, \"%s\" ÎÅ ÂÕÄÅÔ ÐÅÒÅÚÁÐÉÓÁÎ"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "éÚ×ÉÎÉÔÅ, \"create/merge repl\" ÎÁ ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÎÅ ÒÅÁÌÉÚÏ×ÁÎ.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" - ÜÔÏ ÎÅ×ÅÒÎÙÊ ÆÌÁÇ ÄÌÑ ËÏÍÁÎÄÙ \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: aspell [ÏÐÃÉÉ] <ËÏÍÁÎÄÁ>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<ËÏÍÁÎÄÁ> ÏÄÎÁ ÉÚ:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         ×Ù×ÏÄ ËÒÁÔËÏÇÏ ÓÏÏÂÝÅÎÉÑ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             ×Ù×ÏÄ ÐÏÄÒÏÂÎÏÇÏ ÓÏÏÂÝÅÎÉÑ ÓÏ ÓÐÒÁ×ËÏÊ"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <ÆÁÊÌ>  ÐÒÏ×ÅÒËÁ ÆÁÊÌÁ"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          ÒÅÖÉÍ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó \"ispell -a\""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    ×Ù×ÏÄ ÄÁÍÐÁ ÔÅËÕÝÅÊ ËÏÎÆÉÇÕÒÁÃÉÉ ÎÁ stdout"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <ËÌÀÞ>    ×Ù×ÏÄ ÔÅËÕÝÅÇÏ ÚÎÁÞÅÎÉÑ ÏÐÃÉÉ"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    ÓÐÉÓÏË ÄÏÓÔÕÐÎÙÈ ÓÌÏ×ÁÒÅÊ / ÆÉÌØÔÒÏ× / ÒÅÖÉÍÏ× ÆÉÌØÔÒÁ"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[ÏÐÃÉÉ] ÌÀÂÁÑ ÉÚ ÓÌÅÄÕÀÝÉÈ:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             ÓÏÚÄÁÎÉÅ ÓÐÉÓËÁ ÓÌÏ× Ó ÏÛÉÂËÁÍÉ ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ××ÏÄÁ"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       ×ÏÚ×ÒÁÔ Ú×ÕËÏ×ÏÇÏ ÜË×É×ÁÌÅÎÔÁ ÄÌÑ ËÁÖÄÏÇÏ ××ÅÄÅÎÎÏÇÏ ÓÌÏ×Á"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            ÓÏÚÄÁÎÉÅ ×ÏÚÍÏÖÎÙÈ ËÏÒÎÅÊ É ÁÆÆÉËÓÏ× ÓÌÏ×"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     ÒÁÓÛÉÒÅÎÉÅ ÆÌÁÇÏ× ÁÆÆÉËÓÏ×"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   ÏÞÉÓÔËÁ ÓÐÉÓËÁ ÓÌÏ×, Ô.Å. ËÁÖÄÁÑ ÓÔÒÏËÁ - ÐÒÁ×ÉÌØÎÏÅ ÓÌÏ×Ï"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       ×Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    ÕÍÅÎØÛÅÎÉÅ ÒÁÚÍÅÒÁ ÓÐÉÓËÁ ÓÌÏ× ÐÏÓÒÅÄÓÔ×ÏÍ ÓÖÁÔÉÑ ÁÆÆÉËÓÏ×"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <ÉÚ> <×> [<ÆÏÒÍÁ-ÎÏÒÍ>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ ÏÄÎÏÊ ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<ËÁÒÔÁ-ÎÏÒÍ> | <ÉÚ> <ËÁÒÔÁ-ÎÏÒÍ> <×>) [<ÆÏÒÍÁ-ÎÏÒÍ>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    ×ÙÐÏÌÎÅÎÉÅ ÎÏÒÍÁÌÉÚÁÃÉÉ àÎÉËÏÄÁ"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<ÉÍÑ>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    ×Ù×ÏÄ, ÓÏÚÄÁÎÉÅ ÉÌÉ ÏÂßÅÄÉÎÅÎÉÅ ÓÌÏ×ÁÒÑ: ÇÌÁ×ÎÏÇÏ, ÌÉÞÎÏÇÏ ÉÌÉ ÚÁÍÅÎÙ."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <ÆÏÒÍÁ-ÎÏÒÍ>     ÉÓÐÏÌØÚÕÅÍÁÑ ÆÏÒÍÁ ÎÏÒÍÁÌÉÚÁÃÉÉ: none, internal ÉÌÉ strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 ëÅ×ÉΠáÔËÉÎÓÏÎ.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"äÏÓÔÕÐÎÙÅ ÓÌÏ×ÁÒÉ:\n"
+"    óÌÏ×ÁÒÉ ÍÏÇÕÔ ÂÙÔØ ×ÙÂÒÁÎÙ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÞÅÒÅÚ ÏÐÃÉÀ \"-d\"\n"
+"    ÉÌÉ \"master\". ïÎÉ ÔÁËÖÅ ÍÏÇÕÔ ÂÙÔØ ×ÙÂÒÁÎÙ ËÏÓ×ÅÎÎÙÍ ÏÂÒÁÚÏÍ\n"
+"    ÞÅÒÅÚ ÏÐÃÉÉ \"lang\", \"variety\" É \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"äÏÓÔÕÐÎÙÅ ÆÉÌØÔÒÙ (É Ó×ÑÚÁÎÎÙÅ Ó ÎÉÍÉ ÏÐÃÉÉ):\n"
+"    æÉÌØÔÒÙ ÍÏÇÕÔ ÂÙÔØ ÄÏÂÁ×ÌÅÎÙ ÉÌÉ ÕÄÁÌÅÎÙ ÞÅÒÅÚ ÏÐÃÉÀ \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s ÆÉÌØÔÒ: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"äÏÓÔÕÐÎÙÅ ÒÅÖÉÍÙ ÆÉÌØÔÒÁ:\n"
+"    òÅÖÉÍÙ ÆÉÌØÔÒÁ - ÜÔÏ ÐÅÒÅËÏÎÆÉÇÕÒÉÒÏ×ÁÎÎÙÅ ËÏÍÂÉÎÁÃÉÉ ÆÉÌØÔÒÏ×,\n"
+"    ÏÐÔÉÍÉÚÉÒÏ×ÁÎÎÙÅ ÄÌÑ ÆÁÊÌÏ× ÏÐÒÅÄÅÌÅÎÎÏÇÏ ÔÉÐÁ. òÅÖÉÍ ×ÙÂÉÒÁÅÔÓÑ\n"
+"    ÞÅÒÅÚ ÏÐÃÉÀ \"mode\". üÔÏ ÂÕÄÅÔ ÐÒÏÉÓÈÏÄÉÔØ ÐÏÓÔÏÑÎÎÏ, ÅÓÌÉ\n"
+"    Aspell × ÓÏÓÔÏÑÎÉÉ ÏÐÒÅÄÅÌÉÔØ ÔÉРÆÁÊÌÁ ÐÏ ÒÁÓÛÉÒÅÎÉÀ É, ×ÏÚÍÏÖÎÏ,\n"
+"    ÓÏÄÅÒÖÉÍÏÍÕ ÆÁÊÌÁ.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "ïÛÉÂËÁ: Stdin ÎÅ Ñ×ÌÑÅÔÓÑ ÔÅÒÍÉÎÁÌÏÍ."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "ðÒÉÎÑÔØ ÉÚÍÅÎÅÎÉÑ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "õÄÁÌÅÎÉÅ ÐÒÅÄÙÄÕÝÅÇÏ ÓÉÍ×ÏÌÁ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "óÔÒÅÌËÁ ×ÌÅ×Ï"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "ðÅÒÅÍÅÝÅÎÉÅ ÎÁÚÁÄ ÎÁ ÏÄÎÕ ÐÏÚÉÃÉÀ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "óÔÒÅÌËÁ ×ÐÒÁ×Ï"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "ðÅÒÅÍÅÝÅÎÉÅ ×ÐÅÒÅÄ ÎÁ ÏÄÎÕ ÐÏÚÉÃÉÀ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "ðÅÒÅÍÅÝÅÎÉÅ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "ðÅÒÅÍÅÝÅÎÉÅ × ËÏÎÅàÓÔÒÏËÉ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "õÄÁÌÅÎÉÅ ÓÌÅÄÕÀÝÅÇÏ ÓÉÍ×ÏÌÁ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "õÄÁÌÅÎÉÅ ×ÓÅÈ ÓÉÍ×ÏÌÏ× ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "ðÒÅÒÙ×ÁÎÉÅ ÜÔÏÊ ÏÐÅÒÁÃÉÉ"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "üÔÏ ×ÏÚÍÏÖÎÏ ×ÓÌÅÄÓÔ×ÉÅ: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÔÒÅÂÕÅÍÏÅ ÐÏÌÅ \"name\"."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "ðÕÓÔÁÑ ÓÔÒÏËÁ."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "óÉÍ×ÏÌ '%s' (U+%02X) ÎÅ ÍÏÖÅÔ ÐÏÑ×ÌÑÔØÓÑ × ÎÁÞÁÌÅ ÓÌÏ×Á."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "ðÏÓÌÅ ÓÉÍ×ÏÌÁ '%s' (U+%02X) ÄÏÌÖÅΠÓÌÅÄÏ×ÁÔØ ÂÕË×ÅÎÎÙÊ ÓÉÍ×ÏÌ."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "îÅ ÓÏÄÅÒÖÉÔ ÎÉËÁËÉÈ ÂÕË×ÅÎÎÙÈ ÓÉÍ×ÏÌÏ×."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "óÉÍ×ÏÌ '%s' (U+%02X) ÎÅ ÍÏÖÅÔ ÐÏÑ×ÌÑÔØÓÑ × ÓÅÒÅÄÉÎÅ ÓÌÏ×Á."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"óÉÍ×ÏÌ '\\r' (U+0D) ÎÅ ÍÏÖÅÔ ÐÏÑ×ÌÑÔØÓÑ × ËÏÎÃÅ ÓÌÏ×Á. ÷ÏÚÍÏÖÎÏ, ÜÔÏ "
+"ÏÚÎÁÞÁÅÔ, ÞÔÏ × ÆÁÊÌÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌ ËÏÎÃÁ ÆÁÊÌÁ MS-DOS, Á ÎÅ Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "óÉÍ×ÏÌ '%s' (U+%02X) ÎÅ ÍÏÖÅÔ ÐÏÑ×ÌÑÔØÓÑ × ËÏÎÃÅ ÓÌÏ×Á."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: õÄÁÌÑÅÔÓÑ ÎÅ×ÅÒÎÙÊ ÁÆÆÉËÓ '%s' ÉÚ ÓÌÏ×Á %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: õÄÁÌÑÅÔÓÑ ÎÅÐÏÄÈÏÄÑÝÉÊ ÁÆÆÉËÓ '%s' ÉÚ ÓÌÏ×Á %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: %s ðÒÏÐÕÓËÁÅÔÓÑ ÓÔÒÏËÁ.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "ïÂÝÁÑ ÄÌÉÎÁ ÐÒÅ×ÙÛÁÅÔ 240 ÓÉÍ×ÏÌÏ×."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: %s ðÒÏÐÕÓËÁÅÔÓÑ ÓÌÏ×Ï.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "÷ÏÚÍÏÖÎÏ, ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÓÔÒÏË."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "îÅ×ÅÒÎÙÊ ÐÏÒÑÄÏË ÂÁÊÔ."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "îÅ×ÅÒÎÙÊ soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "îÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "÷ ÓÌÏ×Å ÎÁÊÄÅÎÙ ÆÌÁÇÉ ÁÆÆÉËÓÁ, ÎÏ ÎÅ ÕËÁÚÁΠÆÁÊÌ ÁÆÆÉËÓÏ×."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "ïÂÝÁÑ ÄÌÉÎÁ ÓÌÏ× Ó ÄÁÎÎÙÍÉ soundslike ÐÒÅ×ÙÛÁÅÔ 240 ÓÉÍ×ÏÌÏ×."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "äÏÌÖÎÁ ÂÙÔØ ÈÏÔÑ ÂÙ ÏÄÎÁ ÓÔÒÏËÁ \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "ÏÄÉΠÉÚ: ultra, fast, normal, slow ÉÌÉ bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "ÎÅ ÉÚ ÓÐÉÓËÁ ÒÁÚÒÅÛ£ÎÎÙÈ ÔÉÐÏ×"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "ìÉÞÎÙÊ ÓÐÉÓÏË ÓÌÏ× ÎÅÄÏÓÔÕÐÅÎ."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "óÅÁÎÓÏ×ÙÊ ÓÐÉÓÏË ÓÌÏ× ÎÅÄÏÓÔÕÐÅÎ."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "çÌÁ×ÎÙÊ ÓÐÉÓÏË ÓÌÏ× ÎÅÄÏÓÔÕÐÅÎ."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "ÓÔÒÏËÁ ÉÚ 'o','O','p' ÉÌÉ 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÏÂÒÁÂÏÔËÉ ÒÁÚÄÅÌÅÎÎÙÈ ËÏÎÔÅËÓÔÏ×"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "ÒÁÚÄÅÌÉÔÅÌÉ ËÏÎÔÅËÓÔÁ (ÒÁÚÄÅÌÅÎÎÙÅ ÐÒÏÂÅÌÁÍÉ)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "ÍÅÎÑÅÔ ÍÅÓÔÁÍÉ ×ÉÄÉÍÙÊ É ÎÅ×ÉÄÉÍÙÊ ÔÅËÓÔ"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÐÒÏÐÕÓËÁ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ × ÓÏÏÂÝÅÎÉÑÈ email"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "ÓÉÍ×ÏÌÙ ÃÉÔÉÒÏ×ÁÎÉÑ email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "ÍÁËÓÉÍÁÌØÎÁÑ ÐÏÚÉÃÉÑ ÓÉÍ×ÏÌÁ ÃÉÔÉÒÏ×ÁÎÉÑ"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÍÉ HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "×ÓÅÇÄÁ ÐÒÏ×ÅÒÑÅÍÙÅ ÁÔÒÉÂÕÔÙ HTML"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "×ÓÅÇÄÁ ÐÒÏÐÕÓËÁÅÍÙÅ ÔÅÇÉ HTML Ó ÓÏÄÅÒÖÉÍÙÍ"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÍÉ Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÍÉ SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "×ÓÅÇÄÁ ÐÒÏ×ÅÒÑÅÍÙÅ ÁÔÒÉÂÕÔÙ SGML"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "×ÓÅÇÄÁ ÐÒÏÐÕÓËÁÅÍÙÅ ÔÅÇÉ SGML Ó ÓÏÄÅÒÖÉÍÙÍ"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÍÉ TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "ÐÒÏ×ÅÒËÁ ËÏÍÍÅÎÔÁÒÉÅ× TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "ËÏÍÁÎÄÙ TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÒÁÂÏÔÙ Ó ÄÏËÕÍÅÎÔÁÍÉ Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "ëÏÍÁÎÄÙ Texinfo Ó ÉÇÎÏÒÉÒÕÅÍÙÍÉ ÐÁÒÁÍÅÔÒÁÍÉ"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "éÇÎÏÒÉÒÕÅÍÙÅ ÏËÒÕÖÅÎÉÑ Texinfo"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "ÆÉÌØÔÒ ÄÌÑ ÐÒÏÐÕÓËÁ ËÏÎÓÔÒÕËÃÉÊ ÔÉÐÁ URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ËÏÍÍÅÎÔÁÒÉÅ× É ÓÔÒÏË C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÌÀÂÙÈ ÓÔÒÏË, ÎÁÞÉÎÁÀÝÉÈÓÑ Ó #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏÐÕÓËÁ ÃÉÔÉÒÕÅÍÏÇÏ ÔÅËÓÔÁ × ÓÏÏÂÝÅÎÉÑÈ email"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÄÏËÕÍÅÎÔÏ× HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÏÔËÌÀÞÅÎÉÑ ×ÓÅÈ ÆÉÌØÔÒÏ×"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÄÏËÕÍÅÎÔÏ× Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ËÏÍÍÅÎÔÁÒÉÅ× É ÓÔÒÏË Perl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÄÏËÕÍÅÎÔÏ× SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÄÏËÕÍÅÎÔÏ× TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏ×ÅÒËÉ ÄÏËÕÍÅÎÔÏ× Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "ÒÅÖÉÍ ÄÌÑ ÐÒÏÐÕÓËÁ ËÏÎÓÔÒÕËÃÉÊ ÔÉÐÁ URL (ÒÅÖÉÍ ÐÏ ÕÍÏÌÞÁÎÉÀ)"
diff --git a/po/rw.gmo b/po/rw.gmo
new file mode 100644 (file)
index 0000000..b041851
Binary files /dev/null and b/po/rw.gmo differ
diff --git a/po/rw.po b/po/rw.po
new file mode 100644 (file)
index 0000000..1cbc5f4
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,1576 @@
+# Kinyarwanda translations for aspell package.
+# Copyright (C) 2005 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+#, fuzzy
+msgid "a number between 0 and 1"
+msgstr "a Umubare hagati 0 Na 1."
+
+#: common/info.cpp:569
+#, fuzzy
+msgid "in the form \"<name> <value>\""
+msgstr "in i Ifishi Izina: Agaciro"
+
+# Type column values
+#: common/config.cpp:74
+msgid "string"
+msgstr "Ikurikiranyanyuguti"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "Umubare wuzuye"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "nyabule"
+
+# #-#-#-#-#  officecfg.pot (PACKAGE VERSION)  #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFont.List.text
+# #-#-#-#-#  officecfg.pot (PACKAGE VERSION)  #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFontCJK.List.text
+# #-#-#-#-#  officecfg.pot (PACKAGE VERSION)  #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFontCTL.List.text
+#: common/config.cpp:74
+#, fuzzy
+msgid "list"
+msgstr "Urutonde"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+#, fuzzy
+msgid "either \"true\" or \"false\""
+msgstr "NIBYO Cyangwa SIBYO"
+
+#: common/config.cpp:997
+#, fuzzy
+msgid "a positive integer"
+msgstr "a Umubare wuzuye"
+
+#: common/config.cpp:1125
+#, fuzzy
+msgid "# default: "
+msgstr "#Ibisanzwemo>"
+
+#: common/config.cpp:1188
+#, fuzzy, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr "#########################################################################Nka"
+
+#: common/config.cpp:1286
+#, fuzzy
+msgid "ASPELL_CONF env var"
+msgstr "VAR"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+#, fuzzy
+msgid "main configuration file"
+msgstr "Iboneza IDOSIYE"
+
+#: common/config.cpp:1362
+#, fuzzy
+msgid "location of main configuration file"
+msgstr "Ahantu Bya Iboneza IDOSIYE"
+
+#: common/config.cpp:1365
+#, fuzzy
+msgid "location of language data files"
+msgstr "Ahantu Bya Ururimi Ibyatanzwe Idosiye"
+
+#: common/config.cpp:1367
+#, fuzzy
+msgid "create dictionary aliases"
+msgstr "Kurema Inkoranyamagambo Irihimbano"
+
+#: common/config.cpp:1369
+#, fuzzy
+msgid "location of the main word list"
+msgstr "Ahantu Bya i ijambo Urutonde"
+
+#: common/config.cpp:1371
+#, fuzzy
+msgid "encoding to expect data to be in"
+msgstr "Imisobekere: Kuri Ibyatanzwe Kuri in"
+
+#: common/config.cpp:1373
+#, fuzzy
+msgid "add or removes a filter"
+msgstr "Kongeramo Cyangwa a Muyunguruzi..."
+
+#: common/config.cpp:1375
+#, fuzzy
+msgid "path(s) aspell looks for filters"
+msgstr "Inzira S kugirango Muyunguruzi"
+
+#: common/config.cpp:1379
+#, fuzzy
+msgid "filter mode"
+msgstr "Muyunguruzi... Ubwoko"
+
+#: common/config.cpp:1381
+#, fuzzy
+msgid "extra dictionaries to use"
+msgstr "Birenga Inkoranyamagambo Kuri Gukoresha"
+
+#: common/config.cpp:1383
+#, fuzzy
+msgid "location for personal files"
+msgstr "Ahantu kugirango Bwite Idosiye"
+
+#: common/config.cpp:1385
+#, fuzzy
+msgid "ignore words <= n chars"
+msgstr "Kwirengagiza Amagambo N"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+#, fuzzy
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "Kwirengagiza Ryari: Amagambo"
+
+#: common/config.cpp:1390
+#, fuzzy
+msgid "ignore case when checking words"
+msgstr "Kwirengagiza Ryari: Amagambo"
+
+#: common/config.cpp:1392
+#, fuzzy
+msgid "ignore commands to store replacement pairs"
+msgstr "Kwirengagiza Amabwiriza Kuri"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+#, fuzzy
+msgid "extra information for the word list"
+msgstr "Birenga Ibisobanuro kugirango i ijambo Urutonde"
+
+#: common/config.cpp:1396
+#, fuzzy
+msgid "keyboard definition to use for typo analysis"
+msgstr "Mwandikisho Insobanuro Kuri Gukoresha kugirango"
+
+#: common/config.cpp:1398
+#, fuzzy
+msgid "language code"
+msgstr "Ururimi ITEGEKONGENGA"
+
+#: common/config.cpp:1400
+#, fuzzy
+msgid "deprecated, use lang instead"
+msgstr "Bitemewe. Gukoresha"
+
+#: common/config.cpp:1402
+#, fuzzy
+msgid "location of local language data files"
+msgstr "Ahantu Bya Ururimi Ibyatanzwe Idosiye"
+
+#: common/config.cpp:1404
+#, fuzzy
+msgid "base name of the main dictionary to use"
+msgstr "SHINGIRO Izina: Bya i Inkoranyamagambo Kuri Gukoresha"
+
+#: common/config.cpp:1408
+#, fuzzy
+msgid "set module name"
+msgstr "Gushyiraho Modire Izina:"
+
+#: common/config.cpp:1410
+#, fuzzy
+msgid "search order for modules"
+msgstr "Gushaka Itondekanya kugirango Modire"
+
+#: common/config.cpp:1412
+#, fuzzy
+msgid "enable Unicode normalization"
+msgstr "Gushoboza"
+
+#: common/config.cpp:1414
+#, fuzzy
+msgid "Unicode normalization required for current lang"
+msgstr "Bya ngombwa kugirango KIGEZWEHO"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+#, fuzzy
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Ifishi Ntacyo"
+
+#: common/config.cpp:1420
+#, fuzzy
+msgid "avoid lossy conversions when normalization"
+msgstr "Ryari:"
+
+#: common/config.cpp:1422
+#, fuzzy
+msgid "personal configuration file"
+msgstr "Bwite Iboneza IDOSIYE"
+
+#: common/config.cpp:1425
+#, fuzzy
+msgid "personal dictionary file name"
+msgstr "Bwite Inkoranyamagambo IDOSIYE Izina:"
+
+#: common/config.cpp:1428
+#, fuzzy
+msgid "prefix directory"
+msgstr "Imbanziriza bushyinguro"
+
+#: common/config.cpp:1430
+#, fuzzy
+msgid "replacements list file name"
+msgstr "Urutonde IDOSIYE Izina:"
+
+#: common/config.cpp:1433
+#, fuzzy
+msgid "consider run-together words legal"
+msgstr "Gukoresha Amagambo By'amategeko"
+
+#: common/config.cpp:1435
+#, fuzzy
+msgid "maximum number that can be strung together"
+msgstr "Kinini Umubare"
+
+#: common/config.cpp:1437
+#, fuzzy
+msgid "minimal length of interior words"
+msgstr "Uburebure Bya Amagambo"
+
+#: common/config.cpp:1439
+#, fuzzy
+msgid "save replacement pairs on save all"
+msgstr "Kubika ku Kubika Byose"
+
+#: common/config.cpp:1441
+#, fuzzy
+msgid "set the prefix based on executable location"
+msgstr "Gushyiraho i Imbanziriza ku Ahantu"
+
+#: common/config.cpp:1443
+#, fuzzy
+msgid "size of the word list"
+msgstr "Ingano Bya i ijambo Urutonde"
+
+#: common/config.cpp:1445
+#, fuzzy
+msgid "no longer used"
+msgstr "Oya"
+
+#: common/config.cpp:1447
+#, fuzzy
+msgid "suggestion mode"
+msgstr "Ubwoko"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+#, fuzzy
+msgid "edit distance to use, override sug-mode default"
+msgstr "Guhindura Intera Kuri Gukoresha Ubwoko Mburabuzi"
+
+#: common/config.cpp:1453
+#, fuzzy
+msgid "use typo analysis, override sug-mode default"
+msgstr "Gukoresha Ubwoko Mburabuzi"
+
+#: common/config.cpp:1455
+#, fuzzy
+msgid "use replacement tables, override sug-mode default"
+msgstr "Gukoresha Imbonerahamwe Ubwoko Mburabuzi"
+
+#: common/config.cpp:1457
+#, fuzzy
+msgid "characters to insert when a word is split"
+msgstr "Inyuguti Kuri Kongeramo Ryari: a ijambo ni Gutandukanya"
+
+#: common/config.cpp:1459
+#, fuzzy
+msgid "use personal, replacement & session dictionaries"
+msgstr "Gukoresha Bwite Umukoro Inkoranyamagambo"
+
+#: common/config.cpp:1463
+#, fuzzy
+msgid "search path for word list information files"
+msgstr "Gushaka Inzira kugirango ijambo Urutonde Ibisobanuro Idosiye"
+
+#: common/config.cpp:1465
+#, fuzzy
+msgid "enable warnings"
+msgstr "Gushoboza Iburira"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+#, fuzzy
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "kugirango Amabendera in ijambo Intonde"
+
+#: common/config.cpp:1477
+#, fuzzy
+msgid "use affix compression when creating dictionaries"
+msgstr "Gukoresha igabanyangano Ryari: Inkoranyamagambo"
+
+#: common/config.cpp:1479
+#, fuzzy
+msgid "remove invalid affix flags"
+msgstr "Gukuraho... Sibyo Amabendera"
+
+#: common/config.cpp:1481
+#, fuzzy
+msgid "attempts to clean words so that they are valid"
+msgstr "Kuri GUSUKURA Amagambo Byemewe"
+
+#: common/config.cpp:1483
+#, fuzzy
+msgid "compute soundslike on demand rather than storing"
+msgstr "ku"
+
+#: common/config.cpp:1485
+#, fuzzy
+msgid "partially expand affixes for better suggestions"
+msgstr "Kwagura kugirango Ibyifuzo"
+
+#: common/config.cpp:1487
+#, fuzzy
+msgid "skip invalid words"
+msgstr "Sibyo Amagambo"
+
+#: common/config.cpp:1489
+#, fuzzy
+msgid "check if affix flags are valid"
+msgstr "Kugenzura... NIBA Amabendera Byemewe"
+
+#: common/config.cpp:1491
+#, fuzzy
+msgid "check if words are valid"
+msgstr "Kugenzura... NIBA Amagambo Byemewe"
+
+#: common/config.cpp:1498
+#, fuzzy
+msgid "create a backup file by appending \".bak\""
+msgstr "Kurema a Inyibutsa IDOSIYE ku"
+
+#: common/config.cpp:1500
+#, fuzzy
+msgid "use byte offsets instead of character offsets"
+msgstr "Gukoresha Bayite Bya Inyuguti"
+
+#: common/config.cpp:1502
+#, fuzzy
+msgid "create missing root/affix combinations"
+msgstr "Kurema Ibuze Imizi"
+
+#: common/config.cpp:1504
+#, fuzzy
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "kugirango Kugenzura... Ubwoko Cyangwa"
+
+#: common/config.cpp:1506
+#, fuzzy
+msgid "reverse the order of the suggest list"
+msgstr "Ihindurakerekezo i Itondekanya Bya i Urutonde"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+#, fuzzy
+msgid "time load time and suggest time in pipe mode"
+msgstr "Igihe Ibirimo Igihe Na Igihe in Ubwoko"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, fuzzy, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr "Impuzandengo- i IDOSIYE OYA kugirango Cyangwa OYA"
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, fuzzy, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "ITEGEKONGENGA Akadomo U ni"
+
+#: common/convert.cpp:829
+#, fuzzy, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "8 ku Ibirindiro"
+
+#: common/errors.cpp:27
+#, fuzzy
+msgid "Operation Not Supported: %what:1"
+msgstr "1."
+
+#: common/errors.cpp:43
+#, fuzzy
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Uburyo 1. ni in 2."
+
+#: common/errors.cpp:51
+#, fuzzy, c-format
+msgid "%file:1:"
+msgstr "%file:1."
+
+#: common/errors.cpp:59
+#, fuzzy, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "IDOSIYE 1. OYA"
+
+#: common/errors.cpp:67
+#, fuzzy, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "IDOSIYE 1. OYA kugirango"
+
+#: common/errors.cpp:75
+#, fuzzy, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "IDOSIYE 1. OYA kugirango"
+
+#: common/errors.cpp:83
+#, fuzzy, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "IDOSIYE Izina: 1. ni Sibyo"
+
+#: common/errors.cpp:91
+#, fuzzy, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "IDOSIYE 1. ni OYA in i NYACYO Imiterere"
+
+#: common/errors.cpp:107
+#, fuzzy, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "bushyinguro 1. OYA kugirango"
+
+#: common/errors.cpp:123
+#, fuzzy
+msgid "The key \"%key:1\" is unknown."
+msgstr "Urufunguzo 1. ni Kitazwi"
+
+#: common/errors.cpp:131
+#, fuzzy
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Agaciro kugirango Ihitamo 1. OYA Byahinduwe"
+
+#: common/errors.cpp:139
+#, fuzzy
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Urufunguzo 1. ni OYA 2. Na ni Sibyo"
+
+#: common/errors.cpp:147
+#, fuzzy
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr "Agaciro 2. ni OYA 3. Na ni Sibyo kugirango i Urufunguzo 1."
+
+#: common/errors.cpp:163
+#, fuzzy
+msgid "The key \"%key:1\" is not a string."
+msgstr "Urufunguzo 1. ni OYA a Ikurikiranyanyuguti"
+
+#: common/errors.cpp:171
+#, fuzzy
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Urufunguzo 1. ni OYA Umubare wuzuye"
+
+#: common/errors.cpp:179
+#, fuzzy
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Urufunguzo 1. ni OYA a Icyungo"
+
+#: common/errors.cpp:187
+#, fuzzy
+msgid "The key \"%key:1\" is not a list."
+msgstr "Urufunguzo 1. ni OYA a Urutonde"
+
+#: common/errors.cpp:195
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "Urufunguzo 1. OYA Ibigenga Ryari: ku a Kugarura"
+
+#: common/errors.cpp:203
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "Urufunguzo 1. OYA Ibigenga Ryari: ku a Gushoboza"
+
+#: common/errors.cpp:211
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr "Urufunguzo 1. OYA Ibigenga Ryari: ku a Cyangwa"
+
+#: common/errors.cpp:219
+#, fuzzy
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "Urufunguzo 1. OYA Ibigenga Ryari: ku a Gusiba"
+
+#: common/errors.cpp:235
+#, fuzzy, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Ururimi 1. ni OYA"
+
+#: common/errors.cpp:243
+#, fuzzy, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "2. ni OYA"
+
+#: common/errors.cpp:251
+#, fuzzy, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Ururimi 1. ni OYA"
+
+#: common/errors.cpp:259
+#, fuzzy, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "ijambo Intonde Byabonetse kugirango i Ururimi 1."
+
+#: common/errors.cpp:267
+#, fuzzy, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Itegerejwe Ururimi 1. 2."
+
+#: common/errors.cpp:283
+#, fuzzy, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "ni"
+
+#: common/errors.cpp:291
+#, fuzzy, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Ibisabwa 1. ni Sibyo"
+
+#: common/errors.cpp:299
+#, fuzzy, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr "Ibisabwa 1. OYA 2. Buri gihe"
+
+#: common/errors.cpp:307
+#, fuzzy, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"IDOSIYE 1. ni OYA in i NYACYO Imiterere Itegerejwe i IDOSIYE Kuri in 2. OYA "
+"3."
+
+#: common/errors.cpp:323
+#, fuzzy, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Imisobekere: 1. ni OYA"
+
+#: common/errors.cpp:331
+#, fuzzy, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Imisobekere: 1. ni OYA"
+
+#: common/errors.cpp:339
+#, fuzzy, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Ihindurangero Bivuye 1. Kuri 2. ni OYA"
+
+#: common/errors.cpp:379
+#, fuzzy, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Ikurikiranyanyuguti 1. ni Sibyo"
+
+#: common/errors.cpp:387
+#, fuzzy
+msgid "The word \"%word:1\" is invalid."
+msgstr "ijambo 1. ni Sibyo"
+
+#: common/errors.cpp:395
+#, fuzzy
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Ibendera ni Sibyo kugirango ijambo 2."
+
+#: common/errors.cpp:403
+#, fuzzy
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Ibendera OYA Byashyizweho Kuri ijambo 2."
+
+#: common/errors.cpp:451
+#, fuzzy
+msgid "not a version number"
+msgstr "OYA a Verisiyo Umubare"
+
+#: common/errors.cpp:467
+#, fuzzy
+msgid "dlopen returned \"%return:1\"."
+msgstr "1."
+
+#: common/errors.cpp:475
+#, fuzzy, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "IDOSIYE 1. OYA Muyunguruzi"
+
+#: common/errors.cpp:483
+#, fuzzy, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Muyunguruzi... 1. OYA"
+
+#: common/errors.cpp:491 common/errors.cpp:587
+#, fuzzy
+msgid "Confused by version control."
+msgstr "ku Verisiyo Igenzura"
+
+#: common/errors.cpp:499
+#, fuzzy
+msgid "Aspell version does not match filter's requirement."
+msgstr "Verisiyo OYA BIHUYE"
+
+#: common/errors.cpp:507
+#, fuzzy
+msgid "Filter option already exists."
+msgstr "Ihitamo"
+
+#: common/errors.cpp:515
+#, fuzzy
+msgid "Use option modifiers only within named option."
+msgstr "Ihitamo muri Ihitamo"
+
+#: common/errors.cpp:523
+#, fuzzy
+msgid "Option modifier unknown."
+msgstr "Kitazwi"
+
+#: common/errors.cpp:531
+#, fuzzy
+msgid "Error setting filter description."
+msgstr "Igenamiterere Muyunguruzi... Isobanuramiterere"
+
+#: common/errors.cpp:547
+#, fuzzy
+msgid "Empty option specifier."
+msgstr "Ihitamo"
+
+#: common/errors.cpp:555
+#, fuzzy, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "1. Kuri Muyunguruzi..."
+
+#: common/errors.cpp:563
+#, fuzzy
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Ubwoko Isobanuramiterere Urufunguzo 1."
+
+#: common/errors.cpp:571
+#, fuzzy, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "1. Urufunguzo"
+
+#: common/errors.cpp:579
+#, fuzzy
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Ibuze Urufunguzo"
+
+#: common/errors.cpp:595
+#, fuzzy
+msgid "Aspell version does not match mode's requirement."
+msgstr "Verisiyo OYA BIHUYE"
+
+#: common/errors.cpp:603
+#, fuzzy
+msgid "Missing magic mode expression."
+msgstr "Ubwoko imvugo"
+
+#: common/errors.cpp:611
+#, fuzzy, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Umugereka ku INYUGUTI 1."
+
+#: common/errors.cpp:619
+#, fuzzy, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1. Ikosa"
+
+#: common/errors.cpp:627
+#, fuzzy, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Ubwoko 1."
+
+#: common/errors.cpp:635
+#, fuzzy, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "\"%mode:1. Ikosa Inyuma Bya Ububiko"
+
+#: common/errors.cpp:651
+#, fuzzy, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1. Oya Gutangira kugirango Gushaka kugirango 2."
+
+#: common/errors.cpp:659
+#, fuzzy, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1. Oya Urutonde kugirango Gushaka kugirango 2."
+
+#: common/errors.cpp:667
+#, fuzzy, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1. Oya imvugo Bihari kugirango 2."
+
+#: common/errors.cpp:675
+#, fuzzy
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr "\"%mode:1. 2. Ibisanzwe imvugo Nyuma Ahantu Raporo 3."
+
+#: common/errors.cpp:691
+#, fuzzy, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1. ni OYA a Byemewe Ibisanzwe imvugo"
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr ""
+
+#: prog/aspell.cpp:97
+#, fuzzy, c-format
+msgid "Error: %s\n"
+msgstr "Ikosa"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Ikosa"
+
+#: prog/aspell.cpp:203
+#, fuzzy
+msgid "enter Email mode."
+msgstr "Injiza Ubwoko"
+
+#: prog/aspell.cpp:204
+#, fuzzy
+msgid "enter HTML mode."
+msgstr "Injiza Ubwoko"
+
+#: prog/aspell.cpp:205
+#, fuzzy
+msgid "enter TeX mode."
+msgstr "Injiza Ubwoko"
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "Injiza Ubwoko"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr ""
+
+#: prog/aspell.cpp:319
+#, fuzzy
+msgid " does not take any parameters."
+msgstr "OYA Ibigenga"
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "a kugirango"
+
+#: prog/aspell.cpp:381
+#, fuzzy
+msgid "You must specify an action"
+msgstr "Igikorwa"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr ""
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "a kugirango"
+
+#: prog/aspell.cpp:637
+#, fuzzy
+msgid "Invalid Input"
+msgstr "ibinjizwa bitemewe"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+#, fuzzy
+msgid "Time to load word list: "
+msgstr "Kuri Ibirimo ijambo Urutonde"
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr ""
+
+#: prog/aspell.cpp:972
+#, fuzzy
+msgid "You must specify a file name."
+msgstr "a IDOSIYE Izina:"
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "OYA Gufungura i IDOSIYE kugirango"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr ""
+
+#: prog/aspell.cpp:1020
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "OYA Gufungura i IDOSIYE kugirango Idosiye OYA"
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Kureka"
+
+# svx/source\editeng\editeng.src:RID_MENU_SPELL.MN_IGNORE.text
+#: prog/aspell.cpp:1034
+#, fuzzy
+msgid "Ignore all"
+msgstr "Kwirengagiza Byose"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Gusimbura"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Gusimbura Byose"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Kongera"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr ""
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Ntibyakunze"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Gusohoka"
+
+#: prog/aspell.cpp:1116
+#, fuzzy
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Kuri Kureka Y N"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+# offmgr/source\offapp\dialog\autocdlg.src:RID_OFAPAGE_AUTOCORR_REPLACE.FT_REPLACE.text
+#: prog/aspell.cpp:1148
+#, fuzzy
+msgid "With: "
+msgstr "Na:"
+
+#: prog/aspell.cpp:1165
+#, fuzzy
+msgid "Sorry that is an invalid choice!"
+msgstr "ni Sibyo"
+
+#: prog/aspell.cpp:1386
+#, fuzzy
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Muyunguruzi... ni"
+
+#: prog/aspell.cpp:1520
+#, fuzzy
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Gukomatanya a Mugenga ijambo Urutonde"
+
+#: prog/aspell.cpp:1544
+#, fuzzy
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Kurema Gukomatanya Bwite ni"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, fuzzy, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Guhindura"
+
+#: prog/aspell.cpp:1600
+#, fuzzy
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Kurema Gukomatanya ni"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+#, fuzzy
+msgid "Usage: aspell [options] <command>"
+msgstr "Amahitamo Komandi:"
+
+#: prog/aspell.cpp:2800
+#, fuzzy
+msgid "<command> is one of:"
+msgstr "<Komandi: ni Bya"
+
+#: prog/aspell.cpp:2801
+#, fuzzy
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+"-|Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+"."
+
+#: prog/aspell.cpp:2802
+#, fuzzy
+msgid "  help             display a detailed help message"
+msgstr "Ifashayobora Kugaragaza a Ifashayobora Ubutumwa"
+
+#: prog/aspell.cpp:2803
+#, fuzzy
+msgid "  -c|check <file>  to check a file"
+msgstr "-C Kugenzura... IDOSIYE Kuri Kugenzura... a IDOSIYE"
+
+#: prog/aspell.cpp:2804
+#, fuzzy
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "-a a Bihuye neza Ubwoko"
+
+#: prog/aspell.cpp:2805
+#, fuzzy
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "[i KIGEZWEHO Iboneza Kuri"
+
+#: prog/aspell.cpp:2806
+#, fuzzy
+msgid "  config <key>     prints the current value of an option"
+msgstr "Urufunguzo i KIGEZWEHO Agaciro Bya Ihitamo"
+
+#: prog/aspell.cpp:2807
+#, fuzzy
+msgid "  [dump] dicts | filters | modes"
+msgstr "[Muyunguruzi"
+
+#: prog/aspell.cpp:2808
+#, fuzzy
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "Intonde Bihari Inkoranyamagambo Muyunguruzi Muyunguruzi..."
+
+#: prog/aspell.cpp:2809
+#, fuzzy
+msgid "[options] is any of the following:"
+msgstr "[Amahitamo ni Bya i"
+
+#: prog/aspell.cpp:2822
+#, fuzzy
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr "Urutonde a Urutonde Bya Amagambo Bivuye Bisanzwe Iyinjiza"
+
+#: prog/aspell.cpp:2825
+#, fuzzy
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr "i Amajwi nka kugirango ijambo"
+
+#: prog/aspell.cpp:2826
+#, fuzzy
+msgid "  munch            generate possible root words and affixes"
+msgstr "Imizi Amagambo Na"
+
+#: prog/aspell.cpp:2827
+#, fuzzy
+msgid "  expand [1-4]     expands affix flags"
+msgstr "Kwagura 1. 4. Amabendera"
+
+#: prog/aspell.cpp:2828
+#, fuzzy
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr "GUSUKURA a ijambo Urutonde buri Umurongo ni a Byemewe ijambo"
+
+#: prog/aspell.cpp:2830
+#, fuzzy
+msgid "  -v|version       prints a version line"
+msgstr "-v Verisiyo a Verisiyo Umurongo"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+#, fuzzy
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "Bivuye Kuri Ifishi"
+
+#: prog/aspell.cpp:2834
+#, fuzzy
+msgid "    converts from one encoding to another"
+msgstr "Bivuye Imisobekere: Kuri"
+
+#: prog/aspell.cpp:2835
+#, fuzzy
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "Bivuye Kuri Ifishi"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+#, fuzzy
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "Kurema Gukomatanya Mugenga Bwite ijambo Urutonde"
+
+#: prog/aspell.cpp:2840
+#, fuzzy
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr "Cyangwa a Mugenga Bwite Cyangwa ijambo Urutonde"
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+#, fuzzy
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr "<Ifishi Ifishi Kuri Gukoresha Ntacyo By'imbere Cyangwa"
+
+#: prog/aspell.cpp:2854
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr "ku"
+
+#: prog/aspell.cpp:2888
+#, fuzzy
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Byahiswemo Biturutse i D Cyangwa Mugenga Ihitamo Byahiswemo Biturutse i Na "
+"Ingano Amahitamo"
+
+#: prog/aspell.cpp:2909
+#, fuzzy
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Na Amahitamo Kyongewe Cyangwa Cyavanyweho Biturutse i Muyunguruzi... Ihitamo"
+
+# wizards/source\formwizard\dbwizres.src:RID_DB_QUERY_WIZARD_START_+_16.text
+#: prog/aspell.cpp:2916
+#, fuzzy, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr "%sMuyunguruzi"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+#, fuzzy
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Bya Muyunguruzi Cyuzuye Idosiye Bya a Ubwoko A Ubwoko ni Byahiswemo "
+"Biturutse i Ubwoko Ihitamo NIBA ni Kuri i Ubwoko Bivuye i Umugereka Na i "
+"Ibigize Bya i IDOSIYE"
+
+#: prog/check_funs.cpp:287
+#, fuzzy
+msgid "Error: Stdin not a terminal."
+msgstr "OYA a"
+
+# LOCALIZATION NOTE : BLOCK end GLYPHS
+# Enter, backspace, and Tab might have both glyphs and text
+# if the keyboards usually have a glyph,
+# if there is a meaningful translation,
+# or if keyboards are localized
+# then translate them or insert the appropriate glyph
+# otherwise you should probably just translate the glyph regions
+# LOCALIZATION NOTE : BLOCK maybe GLYPHS
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Injiza"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "emera ibihindutse/ibyahindutse"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Gusiba usubira inyuma"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+#, fuzzy
+msgid "Control-H"
+msgstr "H"
+
+#: prog/check_funs.cpp:782
+#, fuzzy
+msgid "Delete the previous character"
+msgstr "i Ibanjirije Inyuguti"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Ibumoso"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+#, fuzzy
+msgid "Move Back one space"
+msgstr "Umwanya"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Iburyo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+#, fuzzy
+msgid "Move Forward one space"
+msgstr "Umwanya"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+#, fuzzy
+msgid "Control-A"
+msgstr "A"
+
+#: prog/check_funs.cpp:800
+#, fuzzy
+msgid "Move to the beginning of the line"
+msgstr "Kuri i Itangiriro Bya i Umurongo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "Impera"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+#, fuzzy
+msgid "Control-E"
+msgstr "E"
+
+#: prog/check_funs.cpp:806
+#, fuzzy
+msgid "Move to the end of the line"
+msgstr "Kuri i Impera Bya i Umurongo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Gusiba"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+#, fuzzy
+msgid "Delete the next character"
+msgstr "i Komeza>> Inyuguti"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+#, fuzzy
+msgid "Kill all characters to the EOL"
+msgstr "Byose Inyuguti Kuri i"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+#, fuzzy
+msgid "Control-C"
+msgstr "C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+#, fuzzy
+msgid "This is probably because: "
+msgstr "ni"
+
+#: modules/speller/default/language.cpp:110
+#, fuzzy
+msgid "The required field \"name\" is missing."
+msgstr "Bya ngombwa Umwanya Izina: ni Ibuze"
+
+#: modules/speller/default/language.cpp:488
+#, fuzzy
+msgid "Empty string."
+msgstr "Injishi irimo ubusa"
+
+#: modules/speller/default/language.cpp:492
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Inyuguti U Gicurasi OYA Kugaragara ku i Itangiriro Bya a ijambo"
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, fuzzy, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Inyuguti U ku Inyuguti"
+
+#: modules/speller/default/language.cpp:496
+#, fuzzy
+msgid "Does not contain any alphabetic characters."
+msgstr "OYA Inyuguti"
+
+#: modules/speller/default/language.cpp:501
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Inyuguti U Gicurasi OYA Kugaragara in i Hagati Bya a ijambo"
+
+#: modules/speller/default/language.cpp:508
+#, fuzzy
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Inyuguti U Gicurasi OYA Kugaragara ku i Impera Bya a ijambo i IDOSIYE ni "
+"ikoresha Bya"
+
+#: modules/speller/default/language.cpp:511
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Inyuguti U Gicurasi OYA Kugaragara ku i Impera Bya a ijambo"
+
+#: modules/speller/default/language.cpp:543
+#, fuzzy, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Sibyo Bivuye ijambo"
+
+#: modules/speller/default/language.cpp:544
+#, fuzzy, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Bivuye ijambo"
+
+#: modules/speller/default/language.cpp:674
+#, fuzzy, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Ikurikiranyanyuguti"
+
+#: modules/speller/default/language.cpp:732
+#, fuzzy
+msgid "The total length is larger than 240 characters."
+msgstr "Igiteranyo Uburebure ni Kinini Inyuguti"
+
+#: modules/speller/default/language.cpp:736
+#, fuzzy, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "ijambo"
+
+#: modules/speller/default/affix.cpp:426
+#, fuzzy
+msgid "Possibly incorrect count."
+msgstr "IBARA"
+
+#: modules/speller/default/readonly_ws.cpp:362
+#, fuzzy
+msgid "Wrong endian order."
+msgstr "Itondekanya"
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+#, fuzzy
+msgid "Wrong soundslike version."
+msgstr "Verisiyo"
+
+#: modules/speller/default/readonly_ws.cpp:853
+#, fuzzy
+msgid "Affix flags found in word but no affix file given."
+msgstr "Amabendera Byabonetse in ijambo Oya IDOSIYE"
+
+#: modules/speller/default/readonly_ws.cpp:891
+#, fuzzy
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Igiteranyo ijambo Uburebure Na: Ibyatanzwe ni Kinini Inyuguti"
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+#, fuzzy
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "a Ikurikiranyanyuguti Bya Cyangwa"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+#, fuzzy
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Ifite uburambe Muyunguruzi... kugirango"
+
+#: modules/filter/context-filter.info:13
+#, fuzzy
+msgid "context delimiters (separated by spaces)"
+msgstr "Imvugiro ku Imyanya"
+
+#: modules/filter/context-filter.info:21
+#, fuzzy
+msgid "swaps visible and invisible text"
+msgstr "Kigaragara Na Kitagaragara Umwandiko"
+
+#: modules/filter/email-filter.info:7
+#, fuzzy
+msgid "filter for skipping quoted text in email messages"
+msgstr "Muyunguruzi... kugirango Gusimbuka:%s Umwandiko in imeli Ubutumwa"
+
+#: modules/filter/email-filter.info:13
+#, fuzzy
+msgid "email quote characters"
+msgstr "imeli Gushyiraho akugarizo Inyuguti"
+
+#: modules/filter/email-filter.info:21
+#, fuzzy
+msgid "num chars that can appear before the quote char"
+msgstr "Kugaragara Mbere i Gushyiraho akugarizo INYUGUTI"
+
+#: modules/filter/html-filter.info:9
+#, fuzzy
+msgid "filter for dealing with HTML documents"
+msgstr "Muyunguruzi... kugirango Na: Inyandiko"
+
+#: modules/filter/html-filter.info:15
+#, fuzzy
+msgid "HTML attributes to always check"
+msgstr "Ibiranga Kuri Buri gihe Kugenzura..."
+
+#: modules/filter/html-filter.info:21
+#, fuzzy
+msgid "HTML tags to always skip the contents of"
+msgstr "Kuri Buri gihe i Ibigize Bya"
+
+#: modules/filter/nroff-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Nroff documents"
+msgstr "Muyunguruzi... kugirango Na: Inyandiko"
+
+#: modules/filter/sgml-filter.info:9
+#, fuzzy
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "Muyunguruzi... kugirango Na: Gifitanye isano Inyandiko"
+
+#: modules/filter/sgml-filter.info:15
+#, fuzzy
+msgid "SGML attributes to always check"
+msgstr "Ibiranga Kuri Buri gihe Kugenzura..."
+
+#: modules/filter/sgml-filter.info:20
+#, fuzzy
+msgid "SGML tags to always skip the contents of"
+msgstr "Kuri Buri gihe i Ibigize Bya"
+
+#: modules/filter/tex-filter.info:7
+#, fuzzy
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Muyunguruzi... kugirango Na: Inyandiko"
+
+#: modules/filter/tex-filter.info:15
+#, fuzzy
+msgid "check TeX comments"
+msgstr "Kugenzura... Ibisobanuro"
+
+#: modules/filter/tex-filter.info:21
+#, fuzzy
+msgid "TeX commands"
+msgstr "Amabwiriza"
+
+#: modules/filter/texinfo-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Texinfo documents"
+msgstr "Muyunguruzi... kugirango Na: Inyandiko"
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Kwirengagiza Amabwiriza Kuri"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+#, fuzzy
+msgid "filter to skip URL like constructs"
+msgstr "Muyunguruzi... Kuri nka"
+
+#: modules/filter/modes/ccpp.amf:8
+#, fuzzy
+msgid "mode for checking C++ comments and string literals"
+msgstr "Ubwoko kugirango C Ibisobanuro Na Ikurikiranyanyuguti"
+
+#: modules/filter/modes/comment.amf:5
+#, fuzzy
+msgid "mode to check any lines starting with a #"
+msgstr "Ubwoko Kuri Kugenzura... Imirongo Na: a"
+
+#: modules/filter/modes/email.amf:5
+#, fuzzy
+msgid "mode for skipping quoted text in email messages"
+msgstr "Ubwoko kugirango Gusimbuka:%s Umwandiko in imeli Ubutumwa"
+
+#: modules/filter/modes/html.amf:10
+#, fuzzy
+msgid "mode for checking HTML documents"
+msgstr "Ubwoko kugirango Inyandiko"
+
+#: modules/filter/modes/none.amf:5
+#, fuzzy
+msgid "mode to disable all filters"
+msgstr "Ubwoko Kuri Byose Muyunguruzi"
+
+#: modules/filter/modes/nroff.amf:7
+#, fuzzy
+msgid "mode for checking Nroff documents"
+msgstr "Ubwoko kugirango Inyandiko"
+
+#: modules/filter/modes/perl.amf:8
+#, fuzzy
+msgid "mode for checking Perl comments and string literals"
+msgstr "Ubwoko kugirango Ibisobanuro Na Ikurikiranyanyuguti"
+
+#: modules/filter/modes/sgml.amf:8
+#, fuzzy
+msgid "mode for checking generic SGML/XML documents"
+msgstr "Ubwoko kugirango Gifitanye isano Inyandiko"
+
+#: modules/filter/modes/tex.amf:7
+#, fuzzy
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Ubwoko kugirango Inyandiko"
+
+#: modules/filter/modes/texinfo.amf:7
+#, fuzzy
+msgid "mode for checking Texinfo documents"
+msgstr "Ubwoko kugirango Inyandiko"
+
+#: modules/filter/modes/url.amf:5
+#, fuzzy
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "Ubwoko Kuri nka Mburabuzi Ubwoko"
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644 (file)
index 0000000..97ea679
Binary files /dev/null and b/po/sk.gmo differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644 (file)
index 0000000..624511a
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,1386 @@
+# Slovak translations of aspell
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the aspell package.
+# Ivan Masár <helix84@centrum.sk>, 2007
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.5\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2007-04-28 16:22+0100\n"
+"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "číslo medzi 0 a 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "v tvare \"<názov> <hodnota>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "reťazec"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "celé číslo"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "booleovská hodnota"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "zoznam"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "buď \"true\" alebo \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "kladné celé číslo"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# predvolené: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# nakonfigurovaný nasledovne:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "premenná prostredia ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "hlavný konfiguračný súbor"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "umiestnenie hlavného konfiguračného súboru"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "umiestnenie jazykových dátových súborov"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "vytvoriť slovníkové aliasy"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "umiestnenie hlavného zoznamu slov"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "kódovanie, v ktorom očakávať dáta"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "pridať alebo odstrániť filter"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "cesta/cesty, kde aspell hľadá filtre"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "režim filtra"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "extra slovníky, ktoré sa majú použiť"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "umiestnenie používateľských súborov"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorovať slová <= n znakov"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignorovať diakritiku pri kontrole slov -- MOMENTÁLNE IGNOROVANÉ"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorovať veľkosť písmen pri kontrole slov"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorovať príkazy ukladania náhradných dvojíc"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "extra informácie pre zoznam slov"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "defícia klávesnice pre použitie pri typoanalýze"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "kód jazyka"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "nepoužívať, použite namiesto toho lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "umiestnenie dátových súborov lokálneho jazyka"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "základ názvu pre hlavný slovník"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "nastaviť názov modulu"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "poradie hľadania modulov"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "zapnúť normalizáciu Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "aktuálny jazyk vyžaduje normalizáciu Unicode"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "tvar normalizácie Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "vyhnite sa stratovej konverzii pri normalizácii"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "používateľský konfiguračný súbor"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "názov súboru používateľského slovníka"
+
+# ?
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "adresár predpon"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "názov súboru s náhradami"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "považovať slová spojené dohromady za platné"
+
+# ?
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "maximálny počet, ktoý je možné zreťaziť"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "minimálna dĺžka vnútorných slov"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "uložiť náhradné páry pri uložení všetkého"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "nastaviť predponu na základe umiestnenia spustiteľného súboru"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "veľkosť zoznamu slov"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "už sa nepoužíva"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "režim návrhov"
+
+# ?
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "upraviť používanú vzdialenosť, nahradí predvolený "
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "používať typoanalýzu, nahradí predvolený sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "používať tabuľky náhrad, nahradí predvolený "
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "znak, ktorý sa má vložiť pri rozdelení slova"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "používať slovníky používateľské, náhrad a relácie"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "prehľadávacia cesta pre informačné súbory zoznamov slov"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "zapnúť upozornenia"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indikátor prepínačov prípon v zoznamoch slov -- MOMENTÁLNE IGNOROVANÉ"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "používať kompresiu prípon pri tvorbe slovníkov"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "odstrániť neplatné prepínače prípon"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "pokusov vyčistiť slová, aby boli platné"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "vypočítať homonymá na požiadanie namiesto ich ukladania"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "čiastočne expandovať prípony pre zlepšenie návrhov"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "preskočiť neplatné slová"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "skontrolovať, či sú prepínače prípon platné"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "skontrolovať, či sú slová platné"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "vytvárať záložný súbor pridaním \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "používať bajtové ofsety namiesto znakových ofsetov"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "vytvoriť chýbajúce kombinácie koreň/prípona"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "mapovanie kláves režimu kontroly: \"aspell\" alebo \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "obrátiť poradie zoznamu návrhov"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "navrhovať možné náhrady"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "čas načítania a čas návrhu v režime rúry"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Tiež to môže znamenať, že súbor \"%s\" nebolo možné otvoriť alebo neexistuje."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Unicode code point U+%04X nie je podporovaný."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Neplatná UTF-8 postupnosť na pozícii %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Nepodporovaná operácia: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metóda \"%what:1\" nie je implementovaná v \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Súbor \"%file:1\" nebolo možné otvoriť"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Súbor \"%file:1\" nebolo možné otvoriť na čítanie."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Súbor \"%file:1\" nebolo možné otvoriť na zápis."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Názov súboru \"%file:1\" je neplatný."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Súbor \"%file:1\" nemá správny formát."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Adresár \"%dir:1\" nebolo možné otvoriť na čítanie."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Kľúč \"%key:1\" je neznámy."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Hodnotu voľby \"%key:1\" nie je možné zmeniť."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Kľúč \"%key:1\" nie je %accepted:2 a preto je neplatný."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Hodnota \"%value:2\" nie je %accepted:3 a preto jeneplatná pre kľúč \"%key:1"
+"\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Kľúč \"%key:1\" nie je reťazec."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Kľúč \"%key:1\" nie je celé číslo."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Kľúč \"%key:1\" nie je booleovská hodnota."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Kľúč \"%key:1\" nie je zoznam."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "Kľúč \"%key:1\" neprijíma parametre keď mu predchádza \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "Kľúč \"%key:1\" neprijíma parametre keď mu predchádza \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Kľúč \"%key:1\" neprijíma parametre keď mu predchádza \"dont-\" alebo "
+"\"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "Kľúč \"%key:1\" neprijíma parametre keď mu predchádza \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Jazyk \"%lang:1\" nie je známy."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Homonymum \"%sl:2\" nie je známe."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Jazyk \"%lang:1\" nie je podporovaný."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Pre jazyk \"%lang:1\" neboli nájdené žiadne zoznamy slov."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Očakáaný jazyk bol \"%lang:1\", ale dostal som \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Prípona '%aff:1' je poškodená."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Podmienka \"%cond:1\" je neplatná."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Podmienka \"%cond:1\" nezaručuje, že \"%strip:2\" je vždy možné oddeliť."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Súbor \"%file:1\" nemá správny formát. Očakával som súbor v \"%exp:2\", nie "
+"\"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Kódovanie \"%encod:1\" nie je známe."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Kódovanie \"%encod:1\" nie je podporované."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Konverzia z \"%encod:1\" na \"%encod2:2\" nie je podporovaná."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Reťazec \"%str:1\" je neplatný."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Slovo \"%word:1\" je neplatné."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Príznak prípony '%aff:1' pre slovo \"%word:2\" je neplatný."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Príznak prípony '%aff:1' na slovo \"%word:2\" nie je možné použiť."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "nie je číslo verzie"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen vrátil \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Súbor \"%filter:1\" neobsahuje filtre."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filter \"%filter:1\" neexistuje."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Zmätený správou verzií."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Verzia Aspell nezodpovedá požiadavkám filtra."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Voľba filtra už existuje."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Používajte modifikátory voľby iba v rámci pomenovanej voľby."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Neznámy modifikátor voľby."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Chyba pri nastavovaní popisu filtra."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Prázdny špecifikátor voľby."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Je možné, že voľba \"%option:1\" bola špecifikovaná pred filtrom."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Neznámy kľúč popisu režimu \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Očakáva sa kľúč \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Chýba kľúč špecifikátora verzie: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Verzia Aspell nezodpovedá požiadavkám režimu."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Chýba výraz magického režimu."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Prázdne rozšírenie na znaku %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Chyba \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Neznámy režim: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"Chyba \"%mode:1\" počas rozširovania režimov Aspell. (nedostatok pamäte?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"Chyba \"%mode:1\": pre magické hladanie \"%magic:2\" nebol špecifikovaný "
+"začiatok."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\": nebol zadaný rozsah pre magické hľadanie \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": nie je dostupný výraz pre magické hľadanie \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magické hľadanie \"%magic:2\": zlý regulárny výraz po "
+"špecifikácii lokátora; regexp vrátil: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" nie je platný regulárny výraz."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Neobslúžená chyba: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Chyba: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Chyba: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "zadajte režim Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "zadajte režim HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "zadajte režim TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "zadajte režim Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Neplatná voľba: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " neberie žiadne parametre."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Musíte špecifikovať parameter pre \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Musíte špecifikovať činnosť"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Neznáma činnosť: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Chyba: Musíte špecifikovať aspoň %d parametrov pre \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Neplatný vstup"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "UPOZORNENIE: Nebolo možné vstúpiť do režimu Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Čas pre načítanie zoznamu slov: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Čas návrhu: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Musíte špecifikovať názov súboru."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Môže byť špecifikované iba jeden názov súboru."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Nebolo možné otvoriť súbor \"%s\" na čítanie"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Neplatné mapovanie kláves: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Nebolo možné otvoriť súbor \"%s\" na zápis. Súbor nebol uložený."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorovať"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorovať všetky"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Nahradiť"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Nahradiť všetky"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Pridať"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Pridať malé"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Zrušiť"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Koniec"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Ste si istý, že chcete zrušiť (a/n)? "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "YyAa"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Čím: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Prepáčte, táto voľba nebola platná!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Prepáčte, \"filter\" nie je momentálne implementovaný.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Prepáčte, zatiaľ nebolo možné zlúčiť hlavný zoznam slov."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Prepáčte, \"create/merge personal\" nie je momentálne implementovaný.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Prepáčte, neprepíšem \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Prepáčte, \"create/merge repl\" nie je momentálne implementovaný.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" nie je platný príznal pre príkaz \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Použitie: aspell [voľby] <príkaz>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<príkaz> je jeden z:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         zobraziť stručnú správu o použití"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             zobraziť podrobnú správu pomocníka"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <súbor>  skontrolovať súbor"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" režim kompatibility"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    vypíše aktuálnu konfiguráciu na štandardný výstup"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <kľúč>     vypíše aktuálnu hodnotu voľby"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    lists available dictionaries / filters / filter modes"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[voľby] sú ľubovoľné z nasledovných:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             vytvoriť zoznam slov s preklepmi zo štandardného vstupu"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr "  soundslike       vráti zoznam homoným pre každé zadané slovo"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            vytvoriť možné koreňové slová a prípony"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     expandovať príznaky prípony"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   vyčistí zoznam slov, takže každý riadok je platné slovo"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       vypíše riadok s verziou"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    redukcia veľkosti zoznamu slov kompresiou prípony"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    konverzia z jedného kódovania do druhého"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    vykoná normalizáciu Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<name>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr "    vráti, vytvorí alebo zlúči hlavný, osobný alebo slovník náhrad."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      ktorú normalizačnú formu použiť, buď none, internal alebo "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011, Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Dostupné slovníky:\n"
+"    Slovníky je možné vybrať priamo pomocou voľby \"-d\" alebo    \"master"
+"\"\n"
+". Tiež je ich možné vybrať nepriamo pomocou\n"
+"    volieb \"lang\", \"variety\" a \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Dostupné filtre (a príslušné voľby):\n"
+"    Filtre je možné pridávať a odoberať voľbou \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Dostupné režimy filtrov:\n"
+"    Režimy filtrov sú rekonfigurované kombinácie filtrov optimalizované\n"
+"    pre súbory konkrétneho typu. Režim sa vyberá voľbou \"mode\".\n"
+"    To sa deje automaticky ak je Aspell schopný identifikovať súbor\n"
+"    podľa prípony a prípadne obsahu súboru.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Chyba: Stdin nie je terminál."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Prijať zmeny"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Zmazať predchádzajúci znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Doľava"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Naspäť o jednu pozíciu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Doprava"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Dopredu o jednu pozíciu"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Presunúť na začiatok riadka"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Presunúť na koniec riadka"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Zmazať nasledujúci znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Zmazať znaky do konca riadka"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Zrušiť túto operáciu"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Toto nastalo pravdepodobne lebo: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Požadované pole \"name\" chýba."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Prázdny reťazec."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Znak '%s' (U+%02X) sa nesmie vyskytovať na začiatku slova."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Po znaku '%s' (U+%02X) musí nasledovať znak abecedy."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Neobsahuje žiadny znak abecedy."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Znak '%s' (U+%02X) sa nesmie vyskytovať uprostred slova."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Znak '\\r' (U+0D) sa nesmie vyskytovať na konci slova. Toto pravdepodobne "
+"znamená, že súbor používa zakončenia riadkov formátu MS-DOS namiesto Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Znak '%s' (U+%02X) sa nesmie vyskytovať na konci slova."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Upozornenie: Odstraňujem neplatnú príponu '%s' zo slova %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Upozornenie: Odstraňujem nepoužiteľnú príponu '%s' zo slova %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Upozornenie: %s Preskakujem reťazec.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Celková dĺžka presahuje 240 znakov."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Upozornenie: %s Preskakujem slovo.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Možnosť nesprávneho počtu."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Zlá endianita (poradie bajtov v slove)."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Zlé homonymum."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Zlá verzia homonyma."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Príznaky prípony boli nájdené v slove ale nebol zadaný súbor prípon."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Celková dĺžka slova s údajmi o homonymách presahuje 240 znakov."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Musí byť aspoň jeden riadok \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "jedno z: ultra, fast, normal, slow alebo bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "nepatrí medzi povolené typy"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Osobný zoznam slov nie je dostupný."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Zoznam slov relácie nie je dostupný."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Hlavný zoznam slov nie je dostupný."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "reťazec z 'o','O','p' alebo 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "experimentálny filter pre skrývanie oddelených kontextov"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "oddeľovače kontextov (oddelené medzerami)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "vymieňa viditeľný a neviditeľný text"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filter pre preskakovanie citovaného textu v emailových správach"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "znaky citácie v emailoch"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "číselné znaky, ktoré sa môžu vyskytovať pred znakom citácie"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filter pre zaobchádzanie s HTML dokumentami"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "HTML atribúty, ktoré sa majú vždy kontrolovať"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML značky, ktorých obsah sa má vždy preskakovať"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filter pre zaobchádzanie s dokumentami Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filter pre zaobchádzanie so všeobecnými dokumentami SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "SGML atribúty, ktoré sa majú vždy kontrolovať"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML značky, ktorých obsah sa má vždy preskakovať"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filter pre zaobchádzanie s dokumentami TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "kontrolovať TeX komentáre"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX príkazy"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filter pre zaobchádzanie s dokumentami Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Texinfo príkazy, ktorých parametre sa majú ignorovať"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Texinfo prostredia, ktoré sa majú ignorovať"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filter na preskakovanie reťazcov typu URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "režim kontroly C++ komentárov a reťazcových literálov"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "režim kontroly kontroly všetkých riadkov začínajúcich #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "režim kontroly preskakovania citovaného textu v emailových správach"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "režim kontroly HTML dokumentov"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "režim vypnutia všetkých filtrov"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "režim kontroly dokumentov Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "režim kontroly komentárov a reťazcových literálov Perl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "režim kontroly všeobecných dokumentov SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "režim kontroly dokumentov TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "režim kontroly dokumentov Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "režim preskakovania reťazcov typu URL (štandardný režim)"
diff --git a/po/sl.gmo b/po/sl.gmo
new file mode 100644 (file)
index 0000000..8398a0d
Binary files /dev/null and b/po/sl.gmo differ
diff --git a/po/sl.po b/po/sl.po
new file mode 100644 (file)
index 0000000..93804b1
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,1417 @@
+# -*- mode: po; coding: utf-8; -*- Slovenian translations for aspell.
+# This file is distributed under the same license as the aspell package.
+# Martin Srebotnjak <miles@filmsi.net>, 2005, 2008.
+# $Id: sl.po,v 1.1.2.5.2.1 2011/07/04 08:52:34 kevina Exp $
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-05-05 20:57+0100\n"
+"Last-Translator: Martin Srebotnjak <miles@filmsi.net>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: ISO-8859-1\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "številka med 0 in 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "v obliki \"<ime> <vrednost>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "niz"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "celo število"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolean"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "seznam"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "ali \"true\" ali \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "pozitivno celo število"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "privzeto število:"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# z naslednjimi nastavitvami:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "glavna datoteka nastavitev"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "lokacija glavne datoteke nastavitev"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "lokacija datoteka prevodov"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "ustvari aliase slovarjev"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "lokacija glavenga seznama besed"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "pričakovano kodiranje podatkov"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "doda ali odstrani filter"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "pot(i) za filtre"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "način filtriranja"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "dodatni slovarji za uporabo"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "lokacija osebnih datotek"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignoriraj besede <= n znaki"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "spreglej naglase pri preverjanju besed -- TRENUTNO NE DELUJE"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "spreglej začetnice pri preverjanju besed"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "spreglej ukaze za shranjevanje parov zamenjav"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "dodatni podatki o seznamu besed"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "definicija tipkovnice za analizo tipkarskih napak"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "koda jezika"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "zastarelo, uporabite lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "lokacija lokalnih datotek jezika"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "osnova imena glavnega slovarja za uporabo"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "nastavi ime modula"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "vrstni red iskanja modulov"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "omogoči normalizacijo Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Za trenutni jezik je zahtevana normalizacija Unicode"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "Oblika normalizacije Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "izogni se izgubam pretvorbe pri normalizaciji"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "uporabniška datoteka nastavitev"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "ime datoteke osebnega slovarja"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "imenik predpon"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "ime datoteke zamenjav"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "smatraj skupaj povezane besede dovoljene"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "največje število, ki je lahko spojeno skupaj"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "najmanjša dolžina notranjih besed"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "ob shranjevanju vsega shrani tudi nadomestne pare"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "nastavi predpono glede na lokacijo programa"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "velikost seznama besed"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "ni več v uporabi"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "način predlaganja"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "uredi uporabljeno razdaljo, povozi privzeti sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "uporabi analizo napak, preglasi privzeti sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "uporabi tabele zamenjav, preglasuj privzeti sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "znaki za vstavljanje pri deljenju besede"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "uporabi slovar osebe, zamenjav in seanse"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "pot iskanja datotek s podatki seznamov besed"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "omogoči opozorila"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "indikator za zastavice predpon v seznamih besed -- TRENUTNO PREZRT"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "pri ustvarjanju slovarjev uporabi stiskanje pripon"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "odstrani neveljavne zastavice pripon"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "poskusi očistiti besede, tako da so veljavne"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "določi zveni-kot na zahtevo in jih ne shranjuj"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "delno razširi predpone za boljše predloge"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "preskoči neveljavne besede"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "preveri, če so zastavice pripon veljavne"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "preveri, če so besede veljavne"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "ustvari varnostno kopijo s končnico \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "uporabi bajtne odmike namesto znakovne odmike"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "ustvari manjkajoče kombinacije korenov/predpon"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "zrcaljenje tipk za preizkusni način: \"aspell\" ali \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "preobrni vrstni red seznama predlogov"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "predlagaj možne zamenjave"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "beleži čas nalaganja in čas računanja predlogov v cevnem načinu"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"To bi lahko pomenilo tudi, da datoteke \"%s\" ni mogoče odpreti za branje "
+"ali da ne obstaja."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Kodni znak Unicode U+%04X ni podprt."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Neveljavna koda UTF-8 na mestu %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operacija ni podprta: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metoda \"%what:1\" v \"%where:2\" ni implementirana."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Datoteke \"%file:1\" ni mogoče odpreti"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Datoteke \"%file:1\" ni mogoče odpreti za branje."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Datoteke \"%file:1\" ni mogoče odpreti za pisanje."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Ime datoteke \"%file:1\" ni veljavno."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Datoteka \"%file:1\" ni v podprtem zapisu."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Imenika \"%dir:1\" ni mogče odpreti za branje."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Ključ \"%key:1\" ni poznan."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Vrednost možnosti \"%key:1\" ni mogoče spremeniti."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Ključ \"%key:1\" ni %accepted:2, zato ni veljaven."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Vrednost \"%value:2\" ni %accepted:3 in zato ni veljavna za ključ \"%key:1\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Ključ \"%key:1\" ni niz."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Ključ \"%key:1\" ni število."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Ključ \"%key:1\" ni boolean."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Ključ \"%key:1\" ni seznam."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "Ključ \"%key:1\" ne sprejema parametrov, ki imajo predpono \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Ključ \"%key:1\" ne sprejema parametrov, ki imajo predpono \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Ključ \"%key:1\" ne sprejema parametrov, ki imajo predpono \"dont-\" ali "
+"\"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "Ključ \"%key:1\" ne sprejema parametrov, ki imajo predpono \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Jezik \"%lang:1\" ni poznan."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Zveni-kot \"%sl:2\" ni poznan."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Jezik \"%lang:1\" ni podprt."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Za jezik \"%lang:1\" ni seznamov besed."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr ""
+"Pričakovani jezik je bil \"%lang:1\", vendar se je pojavila \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Pripona '%aff:1' je okvarjena."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Pogoj \"%cond:1\" ni veljaven."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Pogoj \"%cond:1\" ne zagotavlja, da je \"%strip:2\" lahko vedno okrajšan."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Datoteka \"%file:1\" ni v pravilnem zapisu. Pričakovani zapis datoteke je \"%"
+"exp:2\" in ne \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Kodiranje \"%encod:1\" ni poznano."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Kodiranje \"%encod:1\" ni podprto."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Pretvorba iz nabora znakov \"%encod:1\" v \"%encod2:2\" ni podprta."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Niz \"%str:1\" ni veljaven."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Beseda \"%word:1\" ni veljavna."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Zastavice predpone '%aff:1' ni veljavna za besedo \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Zastavice predpon '%aff:1' ni mogoče uporabiti pri besedi \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "ni številka različice"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen je vrnil \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Datoteka \"%filter:1\" ne vsebuje filtrov."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Filter \"%filter:1\" ne obstaja."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Nadzor različice je zmeden."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Različica Aspella se ne ujema z zahtevami filtra."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Možnost filtra že obstaja."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Uporabi parametre možnosti le z imenovano možnostjo."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Vrednost možnosti ni znana."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Napaka pri nastavljanju opisa filtra."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Možnost zahteva vrednost."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Možnost \"%option:1\" je po vsej verjetnosti navedena pred filtrom."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Neznan ključ opisa modusa \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Pričakovan je ključ \"%modekey:1\"."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Manjkajoči ključ določljivosti različice: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Različica Aspella se ne ujema z zahtevami modusa."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Manjkajoč izraz čudežnega modusa."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Prazna razširitev pri znaku %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "napaka \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Neznan način: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"Napaka \"%mode:1\" pri razširjanju modusov Aspell. (zmanjkalo spomina?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\":  ni začetka za čudežno iskanje \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr "\"%mode:1\":  ni razpona za čudežno iskanje \"%magic:2\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\":  ni čudežnega izraza za čudežno iskanje \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\":  čudež \"%magic:2\": slab regularni izraz po določitelju "
+"lokacije; regexp poroča: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" ni veljaven regularni izraz."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Neobravnavana napaka: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Napaka: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Napaka:"
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "vstopi v način Email"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "vstopi v način HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "vstopi v način TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "vstopi v način Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Neveljavna možnost: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " ne sme imeti parametrov."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Za \"%s\" morate navesti parameter."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Določiti morate akcijo"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Neznana akcija: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Napaka: določiti morate najmanj %d parametrov za \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Neveljaven vnos"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "OPOZORILO: vstop v način Nroff ni možen: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Čas nalaganja seznama besed: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Čas predloga: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Navesti morate ime datoteke."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Navedena je lahko le ena datoteka."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Datoteke \"%s\" ni bilo mogoče odpreti za branje"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Neveljavno zrcaljenje tipk: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Datoteke \"%s\" ni bilo mogoče odpreti za pisanje. Datoteka ni shranjena."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Prezri"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Prezri vse"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Zamenjaj"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Zamenjaj vse"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Dodaj"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Dodaj spodnjega"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Prekini"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Izhod"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Ste prepričani, da želite prekiniti (d/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Dd"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Z:"
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Oprostite, izbira ni veljavna!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Oprostite, \"filter\" je trenutno neizveden.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Žal s tem programom še ni mogoče spojiti glavnega seznama besed."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Oprostite, \"create/merge personal\" trenutno ni implementiran.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Datoteka ne bo prepisana: \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Oprostite, \"create/merge repl\" trenutno ni implementiran.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" ni veljavna zastavica za ukaz \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Uporaba: aspell [možnosti] <ukaz>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<ukaz> je eden izmed:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         izpiše kratko sporočilo o uporabi"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             prikaz podrobne pomoči"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <datoteka>  za preverjanje datoteke"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" compatibility mode"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    izvrže trenutno konfiguracijo na standardni izhod"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <ključ>     izpiše trenutno vrednost možnosti"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    izpiše slovarje / filtre / načine filtrov, ki so na voljo"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[možnosti] so katere koli od naslednjih:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             ustvari seznam napačno črkovanih besed z običajnega vhoda"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       za vsako vneseno besedo vrne ekvivalent, ki se sliši enako"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            tvori možne korenske besede in predpone"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     razširi zastavice predpon"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   očisti seznam besed, tako da je vsaka vrstica veljavna "
+"beseda"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       izpiše vrstico z opisom različice"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    pomanjšaj velikost seznama besed prek stiskanja predpon"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <iz> <v> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    pretvori iz enega kodiranja v drugega"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <od> <norm-map> <do>) [<oblika-norm>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    izvedi normalizacijo Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<ime>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr "    opusti, ustvari ali spoji glavni, osebni ali nadomestni slovar."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <oblika-norm>      oblika normalizacije, vrednosti: none, internal ali "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Slovarji na voljo:\n"
+"    slovarje lahko izberete neposredno z možnostjo \"-d\" ali\n"
+"    \"master\".  Izberete jih lahko tudi posredno prek možnosti\n"
+"    \"lang\", \"variety\" in \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Filtri na voljo (in sorodne možnosti):\n"
+"    Filtre lahko dodajate ali odstranite prek možnosti \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  Filter %s: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Modusi filtrov na voljo:\n"
+"    Modusi filtrov so prekonfigurirane kombinacije filtrov, optimizirani za\n"
+"    datoteke posebnih vrst. Modus izberete prek možnosti \"mode\".\n"
+"    To se bo zgodilo implicitno, če bo Aspell lahko identificiral vrsto\n"
+"    datoteke iz končnice ali vsebine datoteke.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Napaka: Stdin ni zaslonski vmesnik."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Sprejmi spremembe"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Ctrl-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Zbriši prejšnji znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Levo"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Ctrl-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Premakni se nazaj za en presledek"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Desno"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Ctrl-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Premakni se naprej za en presledek"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Ctrl-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Pomik na začetek vrstice"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Ctrl-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Pomik na konec vrstice"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Ctrl-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Zbriši naslednji znak"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Ctrl-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Ubij vse znake do konca vrstice"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Ctrl-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Prekini operacijo."
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Verjetni vzrok: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Zahtevano polje \"ime\" manjka."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Prazen niz."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Znak '%s' (U+%02X) se ne sme pojaviti na začetku besede."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Znaku '%s' (U+%02X) mora slediti znak abecede."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Ne vsebuje abecednih znakov."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Znak '%s' (U+%02X) se ne sme pojaviti sredi besede."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Znak '\\r' (U+0D) se ne sme pojaviti na koncu besede. To najbrž pomeni, da "
+"datoteka uporablja za konec vrstice oznake MS-DOS namesto Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Znak '%s' (U+%02X) se ne sme pojaviti na koncu besede."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Opozorilo: odstranjevanje neveljavne prepone '%s' iz besede %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Opozorilo: odstanjevanje neuporabne prepone '%s' iz besede %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Opozorilo: %s Niz bo presokočen.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Skupna dolžina je večja kot 240 znakov."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Opozorilo: %s Beseda bo presokočena.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Najverjetneje nepravilen števec."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Napačen vrstni red endian."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Napačen zveni-kot."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Napačna različica se-sliši-kot."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Zastavice predpone so v besedi, ponujene pa ni datoteke predpon."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Skupna dolžina besede s podatki zveni-kot presega 240 znakov."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Obstajati mora vsaj ena vrstica \"add\"."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "eden od ultra, hitrih, normalnih, počasnih ali slabih črkovalnikov"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "ni dovoljene vrste"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Osebni seznam besed ni na voljo."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Seznam besed seanse ni na voljo."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Glavni seznam besed ni na voljo."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "niz iz 'o','O','p' ali 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "poskusni filter prikritja označevalnih kontekstov"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "kontekstni označevalci (ločeni s presledki)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "zamenja vidno in nevidno besedilo"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "filter za preskakovanje citatov v e-sporočilih"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "znaki za navajanje vsebine e-sporočil"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "število znakov, ki se lahko pojavijo pred znakom citata"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filter za obravnavo dokumentov HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "vedno preveri naslednje atribute HTML"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "vedno preskoči vsebino naslednjih zaznamkov HTML"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "filter za obravnavo dokumentov Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "filter za obravnavo splošnih dokumentov SGML/XML"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "vedno preveri naslednje SGML atribute"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "vedno preskoči vsebino naslednjih zaznamkov SGML"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "filter za obravnavo dokumentov TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "preveri komentarje TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "ukazi TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "filter za obravnavo dokumentov Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Ukazi Texinfo, katerih parametri naj bodo prezrti"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Okolja Texinfo, ki naj bodo prezrta"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "filter za preskok konstruktov vrste URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "način preverjanja komentarjev in dobesednih nizov v C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "način preverjanja vseh vrstic, ki se začnejo z #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "način preskakovanja navedkov v e-sporočilih"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "način preverjanja dokumentov HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "način izklopljenih filtrov"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "način preverjanja dokumentov Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "način preverjanja komentarjev Perl in dobesednih nizov"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "način preverjanja splošnih dokumentov SGML/XML"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "način preverjanja dokumentov TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "način preverjanja dokumentov Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "način preskakanja konstruktov tipa URL (privzeti način)"
+
+#~ msgid "sub directory for dictionaries"
+#~ msgstr "podimenik za slovarje"
+
+#~ msgid "sub directory for other data"
+#~ msgstr "podimenik za druge podatke"
+
+#~ msgid "You must specify a value for the key \"%key:1\"."
+#~ msgstr "Za ključ \"%key:1\" morate navesti vrednost."
+
+#~ msgid ""
+#~ "The encoding \"%encod:1\" is not a simple encoding and therefore can not "
+#~ "be used in this context."
+#~ msgstr ""
+#~ "Kodiranje \"%encod:1\" ni enostavno kodiranje in zato ne more biti "
+#~ "uporabljeno v tem kontekstu."
+
+#~ msgid "Expecting \"%exp:1\" but got \"%got:2\"."
+#~ msgstr "Pričakovano je bilo \"%exp:1\" in ne \"%got:2\"."
+
+#~ msgid "Each row in the table must have at least %cols:1 columns."
+#~ msgstr "Vsaka vrstica v tabeli mora imeti vsaj %cols:1 stolpcev."
+
+#~ msgid "bla"
+#~ msgstr "bla"
+
+#~ msgid "Conversion file to use"
+#~ msgstr "Uporabi datoteko pretvorb"
+
+#~ msgid "The prefered form that output should be in"
+#~ msgstr "Zaželena oblika, v kateri naj bo rezultat"
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644 (file)
index 0000000..2ae8dda
Binary files /dev/null and b/po/sr.gmo differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644 (file)
index 0000000..1a09fe7
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,1512 @@
+# Serbian translation of aspell
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Danilo Segan <dsegan@gmx.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.51-b20040219\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-03-01 12:59+0100\n"
+"Last-Translator: Danilo Segan <dsegan@gmx.net>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr ""
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr ""
+
+#: common/config.cpp:74
+#, fuzzy
+msgid "string"
+msgstr "Празна ниска."
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr ""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr ""
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr ""
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr ""
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "главна датотека са подешавањима"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "путања главне датотеке са подешавањима"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "путања датотека за језике"
+
+#: common/config.cpp:1367
+#, fuzzy
+msgid "create dictionary aliases"
+msgstr "име датотеке личног речника"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "путања главног списка речи"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "кодирање у којем се очекују подаци"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "додаје или уклања филтер"
+
+#: common/config.cpp:1375
+#, fuzzy
+msgid "path(s) aspell looks for filters"
+msgstr "путање у којима aspell тражи филтере"
+
+#: common/config.cpp:1379
+#, fuzzy
+msgid "filter mode"
+msgstr "уђи у ТеХ режим."
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "додатни речници који се користе"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "путања личних датотека"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "занемари речи са <= n знакова"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+#, fuzzy
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "занемари акценте при провери речи"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "занемари величину слова при провери речи"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "занемари наредбе за смештај парова за замену"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "додатни подаци за списак речи"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "дефиниција тастатуре која се користи за анализу"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "код језика"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "превазиђено, користите lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "путања датотека са подацима о локалном језику"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "основно име главног речника"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "постави име модула"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "редослед тражења модула"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "лична датотека са подешавањима"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "име датотеке личног речника"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "префиксни директоријум"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "име датотеке са списком размена"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "сматрај спојене речи исправним"
+
+# bug: s/maxium/maximum/
+#: common/config.cpp:1435
+#, fuzzy
+msgid "maximum number that can be strung together"
+msgstr "највећи бројеви који се могу припојити"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "најмања дужина унутрашњих речи"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "сачувај парове за размену при чувању свега"
+
+# као у математици „управна“, тако овде „извршна“ (датотека)
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "постави префикс на основу положаја извршне"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "величина списка речи"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "више се не користи"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "режим предлагања"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "измени раздаљину у употреби, превазилази обично"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "проналази грешке у куцању, превазилази обично"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "користи таблице размена, превазилази обично"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "знаци који се умећу када се реч подели"
+
+#: common/config.cpp:1459
+#, fuzzy
+msgid "use personal, replacement & session dictionaries"
+msgstr "користи таблице скока при прављењу речника"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "путања у којој се траже подаци о списковима речи"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr ""
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+#, fuzzy
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "указивач на афиксне ознаке у списковима речи"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "користи компресију афикса при прављењу речника"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "направи резервни примерак додавањем „.bak“"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+# bug: original not shorter than 50
+#: common/config.cpp:1502
+#, fuzzy
+msgid "create missing root/affix combinations"
+msgstr "учини могућим корене/афиксне комбинације које нису у речнику"
+
+#: common/config.cpp:1504
+#, fuzzy
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "распоред тастера при провери, aspell или ispell"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "обрни редослед списка предлога"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "предложи могуће замене"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "мери време учитавања и време предлога у цевкама"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, fuzzy, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Није подржано кодирање „%encod:1“."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr ""
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr ""
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr ""
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Датотека „%file:1“ се не може отворити"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Датотека „%file:1“ се не може отворити ради читања."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Датотека „%file:1“ се не може отворити ради уписа."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Име датотеке „%file:1“ је неисправно."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Датотека „%file:1“ није у одговарајућем облику."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Директоријум „%dir:1“ се не може отворити ради читања."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Кључ „%key:1“ је непознат."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Вредност за опцију „%key:1“ се не може изменити."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Кључ „key:1“ није %accepted:2 и зато је неисправан."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Вредност „%value:2“ није %accepted:3 и зато је неисправна за кључ „%key:1“."
+
+#: common/errors.cpp:163
+#, fuzzy
+msgid "The key \"%key:1\" is not a string."
+msgstr "Кључ „%key:1“ је непознат."
+
+#: common/errors.cpp:171
+#, fuzzy
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Кључ „%key:1“ је непознат."
+
+#: common/errors.cpp:179
+#, fuzzy
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Кључ „%key:1“ је непознат."
+
+#: common/errors.cpp:187
+#, fuzzy
+msgid "The key \"%key:1\" is not a list."
+msgstr "Кључ „%key:1“ је непознат."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Није познат језик „%lang:1“."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Није познат звук-као „%sl:2“."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Није подржан језик „%lang:1“."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Не могу се наћи спискови речи за језик „%lang:1“."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Очекивах језик „%lang:1“ али примих „%prev:2“."
+
+#: common/errors.cpp:283
+#, fuzzy, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "афикс „%s“ је покварен"
+
+#: common/errors.cpp:291
+#, fuzzy, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Реч „%word:1“ је неисправна."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, fuzzy, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr "Датотека „%file:1“ није у одговарајућем облику."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Није познато кодирање „%encod:1“."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Није подржано кодирање „%encod:1“."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Није подржано претварање из „%encod:1“ у „%encod2:2“."
+
+#: common/errors.cpp:379
+#, fuzzy, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Реч „%word:1“ је неисправна."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Реч „%word:1“ је неисправна."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+#, fuzzy
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Датотека „%file:1“ се не може отворити ради читања."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+#, fuzzy
+msgid "dlopen returned \"%return:1\"."
+msgstr "%where:1: \"%filter:2\" dlopen је вратио \"%return:3\"."
+
+#: common/errors.cpp:475
+#, fuzzy, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "%where:1: Датотека „%filter:2“ не садржи ниједан филтер."
+
+#: common/errors.cpp:483
+#, fuzzy, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Датотека „%file:1“ се не може отворити"
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+#, fuzzy
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Ред %line:3 Издање Aspell-а се не поклапа са "
+"захтевом филтера."
+
+#: common/errors.cpp:507
+#, fuzzy
+msgid "Filter option already exists."
+msgstr "%where:1: \"%filter:2\" Ред %line:3 Опција филтера већ постоји."
+
+#: common/errors.cpp:515
+#, fuzzy
+msgid "Use option modifiers only within named option."
+msgstr ""
+"%where:1: \"%filter:2\" %line:3 Користи измењиваче опције једино уз "
+"именовану опцију."
+
+#: common/errors.cpp:523
+#, fuzzy
+msgid "Option modifier unknown."
+msgstr "%where:1: „%filter:2“ %line:3 измењивач опције непознат."
+
+#: common/errors.cpp:531
+#, fuzzy
+msgid "Error setting filter description."
+msgstr "%where:1: „%filter:2“ грешка при постављању описа филтера."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+#, fuzzy
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Ред %line:3 Издање Aspell-а се не поклапа са "
+"захтевом филтера."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+# bug: s/extend/extending/
+#: common/errors.cpp:635
+#, fuzzy, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"%where:1: \"%filter:2\" грешка при ширењу опција Aspell-а. (понестало "
+"меморије?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, fuzzy, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "%action:1: „%expression:2“ не представља исправан регуларни израз."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Необрађена грешка: "
+
+#: prog/aspell.cpp:97
+#, fuzzy, c-format
+msgid "Error: %s\n"
+msgstr "Грешка: "
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Грешка: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "уђи у режим е-поште."
+
+#: prog/aspell.cpp:204
+#, fuzzy
+msgid "enter HTML mode."
+msgstr "уђи у ТеХ режим."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "уђи у ТеХ режим."
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "уђи у ТеХ режим."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Неисправна опција: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " не прихвата никакве параметре."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Морате навести параметар за %s"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Морате навести акцију"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Непозната акција: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Морате навести параметар за %s"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Неисправан улаз"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Време за учитавање списка речи: "
+
+#: prog/aspell.cpp:929
+#, fuzzy, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Време за предлог: "
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Морате навести име датотеке."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Не могу да отворим датотеку „%s“ ради читања"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Неисправна мапа тастера: %s"
+
+#: prog/aspell.cpp:1020
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Не могу да отворим датотеку „%s“ ради уписа. Датотека није сачувана."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Занемари"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Занемари све"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Замени"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Замени све"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Додај"
+
+# Да ли је ово у вези малих слова?
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Додај мала"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Одустани"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Изађи"
+
+#: prog/aspell.cpp:1116
+#, fuzzy
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Сигурно желите да одустанете?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+# Уз, са?
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Са: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Нажалост, то је неисправан избор!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Нажалост „filter“ није досад направљен.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Још увек не могу да стопим главни списак речи. Жао ми је."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Нажалост „create/merge personal“ није досад направљено.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Нажалост, нећу преснимити „%s“"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Нажалост „create/merge repl“ није досад направљено.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+#, fuzzy
+msgid "End"
+msgstr "на крају"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+#, fuzzy
+msgid "Delete the next character"
+msgstr "знаци за цитирање е-поште"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Ово је вероватно због: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Недостаје обавезно поље „name“."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Празна ниска."
+
+# bug: string composition is bad, I've translated "beginning" as "at the beginning", and "middle" as "in the middle"
+#: modules/speller/default/language.cpp:492
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Знак „%s“ се не може јављати %s речи."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+#, fuzzy
+msgid "Does not contain any alphabetic characters."
+msgstr "Не садржи ниједно слово."
+
+# bug: string composition is bad, I've translated "beginning" as "at the beginning", and "middle" as "in the middle"
+#: modules/speller/default/language.cpp:501
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Знак „%s“ се не може јављати %s речи."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+# bug: string composition is bad, I've translated "beginning" as "at the beginning", and "middle" as "in the middle"
+#: modules/speller/default/language.cpp:511
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Знак „%s“ се не може јављати %s речи."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+#, fuzzy
+msgid "Possibly incorrect count."
+msgstr "афикс „%s“ је покварен, вероватно неисправан бројач"
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Лош редослед бајтова."
+
+#: modules/speller/default/readonly_ws.cpp:385
+#, fuzzy
+msgid "Wrong soundslike."
+msgstr "Лоше звучи-као"
+
+#: modules/speller/default/readonly_ws.cpp:391
+#, fuzzy
+msgid "Wrong soundslike version."
+msgstr "Лоше издање звучи-као"
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+#, fuzzy
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Филтер за сакривање одељених контекста од Aspell-а"
+
+#: modules/filter/context-filter.info:13
+#, fuzzy
+msgid "context delimiters (separated by spaces)"
+msgstr "додај/уклони раздвајаче одвојене размацима"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "размени видљиви и невидљиви текст"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "знаци за цитирање е-поште"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "број дозвољених знакова испред знака цитата"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+#, fuzzy
+msgid "HTML attributes to always check"
+msgstr "које СГМЛ атрибуте увек проверавати."
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+#, fuzzy
+msgid "SGML attributes to always check"
+msgstr "које СГМЛ атрибуте увек проверавати."
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+#, fuzzy
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "Филтер за препознавање ТеХ и ЛаТеХ наредби"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "провери ТеХ примедбе"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "ТеХ наредбе"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "занемари наредбе за смештај парова за замену"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+#, fuzzy
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "Филтер за препознавање ТеХ и ЛаТеХ наредби"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+
+#~ msgid "configured as follows"
+#~ msgstr "подешено као"
+
+#~ msgid "path(es) aspell looks for options descriptions"
+#~ msgstr "путање у којима aspell тражи описе опција"
+
+#~ msgid "strip accents from word lists"
+#~ msgstr "избаци акценте из спискова речи"
+
+#~ msgid "indicator for additional flags in word lists"
+#~ msgstr "указивач на додатне ознаке у списковима речи"
+
+#~ msgid "encode soundslike infomation when creating dicts"
+#~ msgstr "кодирај податке о звучи-као при прављењу речника"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: Filter \"%filter:2\" could not be found in filter paths."
+#~ msgstr "%where:1: Филтер „%filter:2“ се не може наћи у путањи филтера."
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: не могу наћи опис опције."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr "%where:1: \"%filter:2\" Ред %line:3 измешан због праћења верзија"
+
+#~ msgid "%action:1: invalid regular expression."
+#~ msgstr "%action:1: неисправан регуларни израз."
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "уђи у ХТМЛ/СГМЛ режим."
+
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  -l|list          produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s алфа.  Сва права задржана 2000-2004 Кевин Аткинсон.\n"
+#~ "\n"
+#~ "Употреба: aspell [ОПЦИЈЕ] <НАРЕДБА>\n"
+#~ "\n"
+#~ "<НАРЕДБА> је једна од:\n"
+#~ "  -?|help [<ИЗРЗ>] прикажи ову поруку помоћи\n"
+#~ "                    и помоћ за филтере који се поклапају са <ИЗРЗ>\n"
+#~ "  -c|check <ДАТОТЕКА>  за проверу датотеке\n"
+#~ "  -a|pipe          понашање сагласно са „ispell -a“\n"
+#~ "  -l|list          образуј списак погрешних речи на стандардном улазу\n"
+#~ "  [dump] config [-e <ИЗРЗ>]  исписује текућа подешавања на стандардни "
+#~ "излаз\n"
+#~ "  config [+e <ИЗРЗ>] <КЉУЧ>  исписује текућу вредност опције\n"
+#~ "  soundslike       враћа еквивалент који звучи-као за сваку унету реч\n"
+#~ "  munch            образуј могуће корене речи и афиксе\n"
+#~ "  expand [1-4]     рашири ознаке афикса\n"
+#~ "  filter           пропушта сав стандардни улаз кроз филтере\n"
+#~ "  -v|version       исписује ред са верзијом\n"
+#~ "  dump|create|merge master|personal|repl [СПИСАК РЕЧИ]\n"
+#~ "    избацује, прави, спаја главни, лични или списак замена.\n"
+#~ "\n"
+#~ "  <ИЗРЗ>           регуларни израз са којим се поклапају имена филтера "
+#~ "или „all“\n"
+#~ "\n"
+#~ "[OPCIJE] могу бити неке од следећих:\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "  %s filter: %s\n"
+#~ "    NOTE: in ambiguous case prefix following options by \"filter-\"\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  Филтер %s: %s\n"
+#~ "    Пажња: у неједнозначном случају, додајте испред следећих опција "
+#~ "„filter-“\n"
+
+#~ msgid "beginning"
+#~ msgstr "на почетку"
+
+#~ msgid "middle"
+#~ msgstr "у средини"
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "Филтер за уклањање знакова за цитирање е-поште"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "Филтер за кодирање, филтрирање и декодирање СГМЛ знакова"
+
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "слова записана као више знакова (<знак>:<пред>[:<пред>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "знаци којима се записују положаји прелома"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "Филтер за сакривање адреса, путања и сличног од Aspell-а"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644 (file)
index 0000000..3ebd547
Binary files /dev/null and b/po/sv.gmo differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644 (file)
index 0000000..91f0add
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1353 @@
+# Swedish translation of aspell.
+# Copyright (C) 2006 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Daniel Nylander <po@danielnylander.se>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.3\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2006-05-23 23:45+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "ett tal mellan 0 och 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "i formatet \"<namn> <värde>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "sträng"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "heltal"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "boolesk"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "lista"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "antingen \"true\" eller \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "ett positivt heltal"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# standard: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# konfigurerad som följer:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "miljövariabeln ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "huvudkonfigurationsfil"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "platsen för huvudkonfigurationsfilen"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "platsen för språkdatafiler"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "skapa ordboksalias"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "platsen för huvudordlistan"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "kodning att förvänta att datan är i"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "lägger till eller tar bort ett filter"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "sökväg(ar) som aspell letar i efter filter"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "filterläge"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "extra ordböcker att använda"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "plats för personliga filer"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ignorera ord <= n tecken"
+
+# diakritiska tecken?
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ignorera accenter vid kontroll av ord -- IGNORERAS FÖR NÄRVARANDE"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ignorera skiftläge vid kontroll av ord"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ignorera kommandon för att lagra ersättande par"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "extra information för ordlistan"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "tangentbordsdefinition att använda för felstavningsanalys"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "språkkod"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "föråldrad, använd lang istället"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "platsen för lokala språkdatafiler"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "basnamn för huvudordboken att använda"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "ställ in modulnamn"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "sökordning för moduler"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "personlig konfigurationsfil"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "filnamn för personlig ordbok"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr ""
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr ""
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr ""
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr ""
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr ""
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr ""
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr ""
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "storlek på ordlistan"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "används inte längre"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "förslagsläge"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr ""
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "aktivera varningar"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "hoppa över ogiltiga ord"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "kontrollera om orden är giltiga"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "skapa en säkerhetskopia genom att lägga till \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr ""
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr ""
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Ogiltig UTF-8-sekvens vid position %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Åtgärden stöds inte: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Metoden \"%what:1\" är inte implementerad i \"%where:2\"."
+
+# Osäker
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Filen \"%file:1\" kan inte öppnas"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Filen \"%file:1\" kan inte öppnas för läsning."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Filen \"%file:1\" kan inte öppnas för skrivning."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Filnamnet \"%file:1\" är ogiltigt."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Filen \"%file:1\" är inte i det korrekta formatet."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Katalogen \"%dir:1\" kan inte öppnas för läsning."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Nyckeln \"%key:1\" är okänd."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Värdet för flaggan \"%key:1\" kan inte ändras."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr ""
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Nyckeln \"%key:1\" är inte en sträng."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Nyckeln \"%key:1\" är inte ett heltal."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Nyckeln \"%key:1\" är inte en boolesk."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Nyckeln \"%key:1\" är inte en lista."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Språket \"%lang:1\" är inte känt."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr ""
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Språket \"%lang:1\" stöds inte."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Inga ordlistor kan hittas för språket \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Förväntade språket \"%lang:1\" men fick \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Tillståndet \"%cond:1\" är ogiltigt."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Teckenkodningen \"%encod:1\" är okänd."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Teckenkodningen \"%encod:1\" stöds inte."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr ""
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Strängen \"%str:1\" är ogiltig."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Ordet \"%word:1\" är ogiltigt."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "inte ett versionsnummer"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr ""
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr ""
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr ""
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Förbryllad av versionskontroll."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Aspells version matchar inte filtrets krav."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Filterflagga finns redan."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr ""
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr ""
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspells version matchar inte lägets krav."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "\"%mode:1\"-fel"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Okänt läge: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" är inte ett giltigt reguljärt uttryck."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Ohanterat fel: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Fel: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Fel: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "gå in i E-postläge."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "gå in i HTML-läge."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "gå in i TeX-läge."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "gå in i Nroff-läge."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Ogiltig flagga: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " tar inga parametrar."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Du måste ange en parameter för \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Du måste ange en åtgärd"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Okänd åtgärd: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Fel: Du måste ange åtminstone %d parametrar för \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Felaktig indata"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "VARNING: Kunde inte gå in i Nroff-läge: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Tid att läsa in ordlistan: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Tid för förslag: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Du måste ange ett filnamn."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Kunde inte öppna filen \"%s\" för läsning"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Ogiltig tangentbindning: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Kunde inte öppna filen \"%s\" för skrivning. Filen är inte sparad."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ignorera alla"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Ersätt"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Ersätt alla"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Lägg till"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr ""
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Avbryt"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Avsluta"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Är du säker på att du vill avbryta? (y/n) "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "JjYy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Med:"
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Tyvärr, det är ett ogiltigt val!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Tyvärr, \"filter\" är för närvarande inte implementerat.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Kan inte sammanfoga en huvudordlista ännu. Tyvärr."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Tyvärr, \"create/merge personal\" är för närvarande inte implementerat.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Tyvärr, jag kommer inte att skriva över \"%s\""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Tyvärr, \"create/merge repl\" är för närvarande inte implementerat.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" är inte en giltig flagga för kommandot \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Användning: aspell [flaggor] <kommando>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<kommando> är en av:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         visa en kortfattad användningstext"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             visa ett detaljerat hjälpmeddelande"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fil>   för att kontrollera en fil"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          \"ispell -a\" kompatibilitetsläge"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    listar tillgängliga ordböcker / filter / filterlägen"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[flaggor] är någon av följande:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       skriver ut en versionsrad"
+
+#: prog/aspell.cpp:2831
+#, fuzzy
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]\n"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <från> <till> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    konverterar från en teckenkodning till en annan"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <från> <norm-map> <till>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<namn>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 av Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+# Osäker
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s-filter: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Fel: Standard in är inte en terminal."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Acceptera ändringar"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Ta bort föregående tecken"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Vänster"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Flytta bakåt ett steg"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Höger"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Flytta framåt ett steg"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Flytta till början av raden"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Flytta till slutet på raden"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Ta bort nästa tecken"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Avbryt denna operation"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Detta är antagligen på grund av: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Det nödvändiga fältet \"name\" saknas."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Tom sträng."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Den totala längden är större än 240 tecken."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Varning: %s Hoppar över ord.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "en sträng av 'o','O','p',eller 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr ""
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr ""
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr ""
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "filter för att hantera HTML-dokument"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr ""
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "kontrollera TeX-kommentarer"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "TeX-kommandon"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "läge för att kontrollera HTML-dokument"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "läge för att inaktivera alla filter"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "läge för att kontrollera Nroff-dokument"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "läge för att kontrollera Perl-kommentarer och strängstavningar"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "läge för att kontrollera generiska SGML/XML-dokument"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "läge för att kontrollera TeX/LaTeX-dokument"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "läge för att kontrollera Texinfo-dokument"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
diff --git a/po/tg.gmo b/po/tg.gmo
new file mode 100644 (file)
index 0000000..b9ba931
Binary files /dev/null and b/po/tg.gmo differ
diff --git a/po/tg.po b/po/tg.po
new file mode 100644 (file)
index 0000000..c2170ae
--- /dev/null
+++ b/po/tg.po
@@ -0,0 +1,1558 @@
+# translation of aspell.po to Tajik\r
+# This file is distributed under the same license as the PACKAGE package.\r
+# Copyright (C) 2004 Free Software Foundation, Inc.\r
+# 2004, infoDev, a World Bank organization\r
+# 2004, Khujand Computer Technologies, Inc.\r
+# 2004, Youth Opportunities, NGO\r
+# Volunteer-translators:\r
+# Victor Ibragimov\r
+# Akmal Salomov\r
+# Malika Dushanbieva\r
+# Abdulloh Normatov\r
+# Mavjigul Mirzoevna\r
+# Copyright (C) YEAR Kevin Atkinson.\r
+# Marina Kolucheva <youth_opportunities@tajik.net>, 2004\r
+# \r
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-05-22 19:33+0000\n"
+"Last-Translator: Marina Kolucheva <youth_opportunities@tajik.net>\n"
+"Language-Team: Tajik\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.1\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr ""
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr ""
+
+#: common/config.cpp:74
+#, fuzzy
+msgid "string"
+msgstr "Сатри холӣ."
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr ""
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr ""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr ""
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr ""
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr ""
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "файли пайкарабанди асосӣ"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "ҷойгиршавии файли пайкарабанди асосӣ"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "ҷойгиршавии забони чунин файлҳо"
+
+#: common/config.cpp:1367
+#, fuzzy
+msgid "create dictionary aliases"
+msgstr "номи файли луғати шахсӣ"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "ҷойгиршавии рӯйхати калимаҳои асосӣ"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "инизороти рамзгузории додашудаҳо"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "илова ё ҳузфи филтр"
+
+#: common/config.cpp:1375
+#, fuzzy
+msgid "path(s) aspell looks for filters"
+msgstr "роҳҳое, ки aspell дар ҷустуҷӯи филтр мебошад"
+
+#: common/config.cpp:1379
+#, fuzzy
+msgid "filter mode"
+msgstr "гузаштан ба тартиботи TeX"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "луғатҳои истифодабарандаи иловагӣ"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "ҷойгиршавии файлҳои шахсӣ"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "аҳамият надодани калимаҳо <= n ишораҳо"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+#, fuzzy
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "аҳамият надодани аломати зада ҳолати тафтиши калимаҳо"
+
+#: common/config.cpp:1390
+#, fuzzy
+msgid "ignore case when checking words"
+msgstr "аҳамият надодани қайдгоҳ ҳолати тафтиши калимаҳо"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "аҳамият надодани фармониятҳо барои нигоҳ доштани иввази ду адад"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "ахбороти иловагӣ барои рӯйхати калимаҳо"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "муайян намудани забонак барои анализи саҳв"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "коди забон"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "маъқул дониста нашуд, lang-ро истифода кунед"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "ҷойгиршавии файлҳои додашудаи забонҳои локалӣ"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "номи базавии луғати асосӣ"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "сабти номи модул"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "тартиботи ҷустуҷӯи модул"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "фаъол сохтани муқаррарияти Юникод"
+
+#: common/config.cpp:1414
+#, fuzzy
+msgid "Unicode normalization required for current lang"
+msgstr "Муқаррарияти Юникод барои раванди lang лозим аст"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "намуди муқаррарияти Юникод: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+#, fuzzy
+msgid "avoid lossy conversions when normalization"
+msgstr "рад кардани табдили талафият"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "файли пайкарабанди шахсӣ"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "номи файли луғати шахсӣ"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "префикси каталог"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "номи файли иввазоти рӯйхат"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "эътирофи имконпазироти калимаҳои run-together"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "рақами зиёде, ки бо худ пайваст шуда метавонанд"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "дарозии минималии калимаҳои дохилӣ"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "нигоҳ доштани ду адади иввазшуда ҳолати тамоми онро нигоҳ доштан"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "танзимоти префикс мувофиқи ҷойгиршавии файли иҷрошаванда"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "андозаи рӯйхати калима"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "дигар истифода намешавад"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "тартиботи ҷумла"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "тағйири истифодаи масофа, sug-mode-ро аз нав мепӯшонад"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "истифодаи анализи саҳв, sug-mode-ро аз нав мепӯшонад"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "истифодаи ҷадвали ивваз, sug-mode аз нав мепӯшонад"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "ишораҳое, ки ҳолати ҷудо кардани калима монда мешаванд"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "бо истифода аз луғатҳои шахсӣ, иввазӣ ва сессиявӣ"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "роҳи ҷустуҷӯи файлҳои бо ахбороти рӯйхати калимаҳо"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "фаъол сохтани огоҳиятҳо"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+#, fuzzy
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "индикатори байрақҳои аффиксӣ дар рӯйхати калимаҳо"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "истифодаи зичии аффикс ҳолати сохтани луғғатҳо"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+#, fuzzy
+msgid "compute soundslike on demand rather than storing"
+msgstr "Дар ҳолати лозимӣ soundslike-ро ҳисоб кунед ва на инки захира."
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "Қисман вусъат додани аффикс барои таъминоти хубтар"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr ""
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr ""
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "сохтани файли захиравӣ бо иловаи \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "омезонидани байтҳо ба ҷои омезонидани ишораҳо"
+
+#: common/config.cpp:1502
+#, fuzzy
+msgid "create missing root/affix combinations"
+msgstr "имконпазир намудани мувофиқати реша/аффикс, на дар луғат"
+
+#: common/config.cpp:1504
+#, fuzzy
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "чида гузоштани кнопкаҳо барои тафтиши тартиботи aspell, ispell"
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "тартиботи бозгашти рӯйхати ҷумла"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "тақдими иввази лозимӣ"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "вақти пурборкунӣ ва вақти тақдимият дар тартиботи-pipe"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Ин ҳамчунин маънои онро дорад, ки файл \"%s\" барои хондан кушода намешавад "
+"ёки он вуҷуд надорад."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Ишораи юникоди U+%04X дастгирӣ нашуда истодааст."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Пайравии нодурусти UTF-8 бо адреси %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Амалиёт дастгирӣ нашуда истодааст: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Тарзи \"%what:1\" дар \"%where:2\" иҷронашаванда мебошад."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Файли \"%file:1\" кушода намешавад"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Файли \"%file:1\" барои хондан кушода намешавад."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Файли \"%file:1\" барои навиштан кушода намешавад."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Номи файл \"%file:1\" нодуруст мебошад."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Файли \"%file:1\" дар ҳолати номувофиқ мебошад."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Каталоги \"%dir:1\" барои хондан кушода нахоҳад шуд."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Калиди \"%key:1\" номуайян мебошад."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Маънавият барои интихоботгоҳи \"%key:1\" тағйирёбанда нахоҳад буд."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Калиди \"%key:1\" бидуни %accepted:2 аст ва барои ҳамин нодуруст аст."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Маънавияти \"%value:2\" бидуни %accepted:3 аст ва барои ҳамин барои калиди "
+"\"%key:1\" нодуруст аст."
+
+#: common/errors.cpp:163
+#, fuzzy
+msgid "The key \"%key:1\" is not a string."
+msgstr "Калиди \"%key:1\" номуайян мебошад."
+
+#: common/errors.cpp:171
+#, fuzzy
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Калиди \"%key:1\" номуайян мебошад."
+
+#: common/errors.cpp:179
+#, fuzzy
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Калиди \"%key:1\" номуайян мебошад."
+
+#: common/errors.cpp:187
+#, fuzzy
+msgid "The key \"%key:1\" is not a list."
+msgstr "Калиди \"%key:1\" номуайян мебошад."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Забони \"%lang:1\" номуайян аст."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Soundslike \"%sl:2\" номуайян аст."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Забони \"%lang:1\" дастгирӣ нашуда истодааст."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Рӯйхати калимаҳо барои забони \"%lang:1\" ёфт нашуда истодаанд."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Интизори забони \"%lang:1\"буд ва лекин \"%prev:2\" қабул шуд."
+
+#: common/errors.cpp:283
+#, fuzzy, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Аффикс '%s' вайрон аст"
+
+#: common/errors.cpp:291
+#, fuzzy, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Калимаи \"%word:1\" нодуруст аст."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, fuzzy, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr "Файли \"%file:1\" дар ҳолати номувофиқ мебошад."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Кодгузории \"%encod:1\" номуайян аст."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Кодгузории \"%encod:1\" дастгирӣ нашуда истодааст."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Табдилшавӣ аз \"%encod:1\" ба \"%encod2:2\" дастгирӣ нашуда истодааст."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Сатри \"%str:1\" нодуруст аст."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Калимаи \"%word:1\" нодуруст аст."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+#, fuzzy
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Файли \"%file:1\" барои навиштан кушода намешавад."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr ""
+
+#: common/errors.cpp:467
+#, fuzzy
+msgid "dlopen returned \"%return:1\"."
+msgstr "%where:1: \"%filter:2\" dlopen гардонид \"%return:3\"-ро."
+
+#: common/errors.cpp:475
+#, fuzzy, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "%where:1: Файли \"%filter:2\" дорои ягон филтре намебошад."
+
+#: common/errors.cpp:483
+#, fuzzy, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "%where:1: Файли \"%filter:2\" дорои ягон филтре намебошад."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+#, fuzzy
+msgid "Confused by version control."
+msgstr ""
+"%where:1: \"%filter:2\" Сатри %line:3 ҳолати тафтиши ривоят барҳам дода "
+"истодааст"
+
+#: common/errors.cpp:499
+#, fuzzy
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Сатри %line:ривояти 3-юми Aspell ба сифати филтр "
+"ҷавобгӯй нест."
+
+#: common/errors.cpp:507
+#, fuzzy
+msgid "Filter option already exists."
+msgstr ""
+"%where:1: \"%filter:2\" Сатри %line:3 Интихоботгоҳи филтр аллакай мавҷуд "
+"мебошад."
+
+#: common/errors.cpp:515
+#, fuzzy
+msgid "Use option modifiers only within named option."
+msgstr ""
+"%where:1: \"%filter:2\" %line:3 Интихоботгоҳи тағйирдодаротанҳо бо "
+"интихоботгоҳи ном гузошташуда, истифода кунед."
+
+#: common/errors.cpp:523
+#, fuzzy
+msgid "Option modifier unknown."
+msgstr "%where:1: \"%filter:2\" %line:3 Интихоботгоҳи таъғирдиҳандаи номуайян."
+
+#: common/errors.cpp:531
+#, fuzzy
+msgid "Error setting filter description."
+msgstr "%where:1: \"%filter:2\" хатои танзими тасовироти филтр."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+#, fuzzy
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+"%where:1: \"%filter:2\": Сатри %line:ривояти 3-юми Aspell ба сифати филтр "
+"ҷавобгӯй нест."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr ""
+
+#: common/errors.cpp:635
+#, fuzzy, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"%where:1: \"%filter:2\" хатогӣ ҳолати вусъати интихоботгоҳи Aspell (норасоии "
+"хотира?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, fuzzy, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "%action:1: `%expression:2' ифодаи мунтазами нодуруст мебошад."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Хатои нокоркард: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Хато: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Хато: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "гузаштан ба тартиботи Email."
+
+#: prog/aspell.cpp:204
+#, fuzzy
+msgid "enter HTML mode."
+msgstr "гузаштан ба тартиботи TeX"
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "гузаштан ба тартиботи TeX"
+
+#: prog/aspell.cpp:206
+#, fuzzy
+msgid "enter Nroff mode."
+msgstr "гузаштан ба тартиботи TeX"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Интихоботгоҳи нодуруст: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " ягон параметреро қабул накарда истодааст."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, fuzzy, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Шумо бояд ягон параметре барои %s нишон диҳед"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Шумо бояд амалеро ишора кунед"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Амалиёти номуайян: %s"
+
+#: prog/aspell.cpp:395
+#, fuzzy, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Шумо бояд ягон параметре барои %s нишон диҳед"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Вурудиятҳои нодуруст"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Вақти пурборкунии рӯйхати калима: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Вақти пешниҳод: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Шумо бояд номи файлро нишон диҳед."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Боз кардани файли \"%s\" барои хондан имконнопазир аст"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Рамзгузории нодуруст дар забонак: %s"
+
+#: prog/aspell.cpp:1020
+#, fuzzy, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+"Боз кардани файли \"%s\" барои навиштан имконнопазир аст. Файл нигоҳ дошта "
+"нашудааст."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Роҳ додан"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Роҳ додани ҳамааш"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Ивваз"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Иввази ҳамааш"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Илова"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Иловаи қайдгоҳи поёна"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Каниш"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Баромад"
+
+#: prog/aspell.cpp:1116
+#, fuzzy
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Шумо мутмаъинед, ки мехоҳед барҳам диҳед?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr ""
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Ба:"
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Бубахшед, ин интихоби нодуруст аст!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Бубахшед, \"filter\" ин вақт кор намекунад.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+"Ҳоло пайваст кардани рӯйхати калимаҳои асосиро имконнопазир аст. Бубахшед."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Бубахшед, \"create/merge personal\" дар ин вақт кор намекунад.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Бубахшед, \"%s\" аз нав нависӣ карда наметавонам"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Бубахшед, \"create/merge repl\" дар ин вақт кор намекунад.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr ""
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr ""
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr ""
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr ""
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr ""
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr ""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr ""
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr ""
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+#, fuzzy
+msgid "    perform Unicode normalization"
+msgstr "фаъол сохтани муқаррарияти Юникод"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+#, fuzzy
+msgid "Delete the next character"
+msgstr "ишораҳои нохунакҳои email "
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Ин эҳтимолан ба сабаби:"
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Заминаи дархости \"name\" ҳозир намебошад."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Сатри холӣ."
+
+#: modules/speller/default/language.cpp:492
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Ишораи '%s' наметавонад дар аввали калима пайдо шавад."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+#, fuzzy
+msgid "Does not contain any alphabetic characters."
+msgstr "Дорои ягон ҳарф намебошад."
+
+#: modules/speller/default/language.cpp:501
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Ишораи '%s' наметавонад дар байни калима пайдо шавад."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, fuzzy, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Ишораи '%s' наметавонад дар охири калима пайдо шавад."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+#, fuzzy
+msgid "The total length is larger than 240 characters."
+msgstr "Умуман дарозии калима аз 240 ишора зиёд аст."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+#, fuzzy
+msgid "Possibly incorrect count."
+msgstr "аффикс '%s' вайрон аст, мумкин ҳисоби нодуруст бошад"
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Тартиботи нодурусти endian."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Soundslike-и нодуруст."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Ривояти нодурусти soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Дар калима байрақҳои аффикс ёфт шуд ва лекин аффикси файл ишора нашудааст."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Умуман дарозии калима аз 240 ишора зиёд аст."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+#, fuzzy
+msgid "experimental filter for hiding delimited contexts"
+msgstr "Филтр барои пинҳони тақсими матнӣ аз Aspell шудааст"
+
+#: modules/filter/context-filter.info:13
+#, fuzzy
+msgid "context delimiters (separated by spaces)"
+msgstr "илова/ҳузфи тақсимкунакҳо, ки бо фосила ҷудо шудаанд"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "матни намо ва нонаморо ивваз мекунад"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "ишораҳои нохунакҳои email "
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "рақами ишораҳо, ки метавонанд пеш аз нохунакҳо бошанд"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+#, fuzzy
+msgid "HTML attributes to always check"
+msgstr "хусусиятҳои sgml барои тафтишоти доимӣ."
+
+#: modules/filter/html-filter.info:21
+#, fuzzy
+msgid "HTML tags to always skip the contents of"
+msgstr "ҳадафи sgml он аст, ки барои доим партоиши оканае мебошад аз "
+
+#: modules/filter/nroff-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Nroff documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+#, fuzzy
+msgid "SGML attributes to always check"
+msgstr "хусусиятҳои sgml барои тафтишоти доимӣ."
+
+#: modules/filter/sgml-filter.info:20
+#, fuzzy
+msgid "SGML tags to always skip the contents of"
+msgstr "ҳадафи sgml он аст, ки барои доим партоиши оканае мебошад аз "
+
+#: modules/filter/tex-filter.info:7
+#, fuzzy
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "тафтишоти шарҳи TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "фармониятҳои TeX"
+
+#: modules/filter/texinfo-filter.info:7
+#, fuzzy
+msgid "filter for dealing with Texinfo documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/texinfo-filter.info:13
+#, fuzzy
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "аҳамият надодани фармониятҳо барои нигоҳ доштани иввази ду адад"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+#, fuzzy
+msgid "mode for checking HTML documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+#, fuzzy
+msgid "mode for checking Nroff documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/modes/perl.amf:8
+#, fuzzy
+msgid "mode for checking Perl comments and string literals"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+#, fuzzy
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+#, fuzzy
+msgid "mode for checking Texinfo documents"
+msgstr "филтр барои дарёфти фармоноти TeX/LaTeX"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "  %s filter: %s\n"
+#~ "    NOTE: in ambiguous case prefix following options by \"filter-\"\n"
+#~ msgstr ""
+#~ "\n"
+#~ "  %s филтр: %s\n"
+#~ "    ТАВАҶҶӮЪ: дар ҳолати номуайян префикс аз паси интихоботгоҳ монанди"
+#~ "\"filter-\" хоҳад рафт\n"
+
+#~ msgid "enter Html/Sgml mode."
+#~ msgstr "гузаштан ба тартиботи Html/Sgml"
+
+#~ msgid "Filters for encoding, filtering and decoding sgml characters"
+#~ msgstr "филтрҳо барои рамзгузорӣ, филтронидан ва рамзхонииишораҳои sgml"
+
+#~ msgid "Filter for hiding urls/paths and similar from Aspell"
+#~ msgstr "филтр барои пинҳонӣ аз Aspell url-ҳо/роҳҳо ва монанди он"
+
+#~ msgid "configured as follows"
+#~ msgstr "чунин танзим шудааст"
+
+#~ msgid "path(es) aspell looks for options descriptions"
+#~ msgstr "роҳҳое, ки aspell дар ҷустуҷӯи тавсифи интихобот мебошад"
+
+#, fuzzy
+#~ msgid "\"%filter:1\":"
+#~ msgstr "%file:1:"
+
+#, fuzzy
+#~ msgid "Filter \"%filter:1\" could not be found in filter paths."
+#~ msgstr "%where:1: Филтри \"%filter:2\" наметавонад роҳи файлро ёбад."
+
+#, fuzzy
+#~ msgid "\"%action:1\": invalid regular expression."
+#~ msgstr "%action:1: ифодаи мунтазами нодуруст."
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Usage: aspell [options] <command>\n"
+#~ "\n"
+#~ "<command> is one of:\n"
+#~ "  -?|help [<expr>] display this help message\n"
+#~ "                    and help for filters matching <expr> if installed\n"
+#~ "  -c|check <file>  to check a file\n"
+#~ "  -a|pipe          \"ispell -a\" compatibility mode\n"
+#~ "  list             produce a list of misspelled words from standard "
+#~ "input\n"
+#~ "  [dump] config [-e <expr>]  dumps the current configuration to stdout\n"
+#~ "  config [+e <expr>] <key>   prints the current value of an option\n"
+#~ "  soundslike       returns the sounds like equivalent for each word "
+#~ "entered\n"
+#~ "  munch            generate possible root words and affixes\n"
+#~ "  expand [1-4]     expands affix flags\n"
+#~ "  clean [strict]   cleans a word list so that every line is a valid word\n"
+#~ "  filter           passes standard input through filters\n"
+#~ "  -v|version       prints a version line\n"
+#~ "  conv <from> <to> [<norm-form>]\n"
+#~ "    converts from one encoding to another\n"
+#~ "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]\n"
+#~ "    perform unicode normlization\n"
+#~ "  dump|create|merge master|personal|repl [word list]\n"
+#~ "    dumps, creates or merges a master, personal, or replacement word "
+#~ "list.\n"
+#~ "\n"
+#~ "  <expr>           regular expression matching filtername(s) or \"all\"\n"
+#~ "  <norm-form>      normalization form to use, either none, internal, or "
+#~ "strict\n"
+#~ "\n"
+#~ "[options] is any of the following:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Aspell %s alpha.  Copyright 2000-2004 by Kevin Atkinson.\n"
+#~ "\n"
+#~ "Бо истифода аз: aspell [интихоботгоҳ] <фармонот>\n"
+#~ "\n"
+#~ "<фармонот> яке аз:\n"
+#~ "  -?|help [<ифода>] хулосаи ин иттилооти справка\n"
+#~ "                   ва справка ба филтрҳое, ки бо <ифода> рост меояд, агар "
+#~ "ба қобили танзими\n"
+#~ "  -c|check <файл>  тафтиши файл\n"
+#~ "  -a|pipe          тартиботи ростоӣ бо \"ispell -a\"\n"
+#~ "  -l|list          сохтани рӯйхати калимаҳо ба хатои аз вурудоти "
+#~ "стандартӣ\n"
+#~ "  [dump] config [-e <ифода>]  dump-и раванди танзимот ба хулосаи "
+#~ "стандартӣ\n"
+#~ "  config [+e <ифода>] <калид>  хулосаи раванди маънавияти интихоботгоҳ\n"
+#~ "  soundslike       баргардонидани эквиваленти овозмонанд барои ҳар як "
+#~ "калимаи вуруд карда шуда\n"
+#~ "  munch            сохтани калимаҳои решагӣ ва аффиксҳои эҳтимолӣ\n"
+#~ "  expand [1-4]     вусъати байрақҳои аффикс\n"
+#~ "  filter           гузаронидани вурудияти стандартӣ аз филтрҳо\n"
+#~ "  -v|version       хулосаи сатри раванди\n"
+#~ "  dump|create|merge master|personal|repl [рӯйхати калимаҳо]\n"
+#~ "    dump, сохтан ё пайвастонидании асос, шахсӣ ёки бо иввази рӯйхати "
+#~ "калимаҳо.\n"
+#~ "\n"
+#~ "  <ифода>            ифодаи мунтазаме, ки бо номҳои филтр муқоиса мекунад "
+#~ "ёки\"all\"\n"
+#~ "\n"
+#~ "[интихоботгоҳ] ягонтаи аз дигарҳо:\n"
+#~ "\n"
+
+#~ msgid "Filter for eliminating email quote characters"
+#~ msgstr "филтр барои ҳузфи ишораҳои нохунаки email"
+
+#~ msgid "multi character coded letters (<char>:<rep>[:<rep>[...]])"
+#~ msgstr "ҳарфҳои бисёришоравии рамз (<ишора>:<rep>[:<rep>[...]])"
+
+#~ msgid "characters used to encode hyphenation locations"
+#~ msgstr "ишораҳо барои рамзгузории маҳали нимтире, истифода мешаванд"
+
+#~ msgid "%where:1: \"%filter:2\":"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "%where:1: %filter:2: can't find option description."
+#~ msgstr "%where:1: %filter:2: наметавонад тасовироти интихоботгоҳро ёбад."
+
+#~ msgid "%where:1: \"%filter:2\" Line %line:3 confused by version control"
+#~ msgstr ""
+#~ "%where:1: \"%filter:2\" Сатри %line:3 ҳолати тафтиши ривоят барҳам дода "
+#~ "истодааст"
+
+#~ msgid ""
+#~ "%where:1: \"%filter:2\" error while extending Aspell options. (out of "
+#~ "memory?)"
+#~ msgstr ""
+#~ "%where:1: \"%filter:2\" хатогӣ ҳолати вусъати интихоботгоҳи Aspell "
+#~ "(норасоии хотира?)"
+
+#, fuzzy
+#~ msgid "\"%file:1: \"%line:2:"
+#~ msgstr "%where:1: \"%filter:2\":"
+
+#~ msgid "Expected the file to be in \"%s\" not \"%s\"."
+#~ msgstr "Ба интизори он буд, ки файл дар \"%s\"аст ва на инки дар \"%s\"."
+
+#~ msgid "indicator for additional flags in word lists"
+#~ msgstr "индикатори байрақҳои иловагӣ дар рӯйхати калимаҳо"
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644 (file)
index 0000000..b23f466
Binary files /dev/null and b/po/uk.gmo differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644 (file)
index 0000000..403d0ef
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,1385 @@
+# Ukrainian translation to aspell.
+# Copyright (C) 2004 Kevin Atkinson
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the aspell package.
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2006-2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.5\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2007-02-05 19:03+0200\n"
+"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "число між 0 та 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "у формі \"<назва> <значення>\""
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "символьний рядок"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "ціле число"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "логічне значення"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "список"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "або \"true\" або \"false\""
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "додатне ціле число"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# типово: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Фільтр: %s\n"
+"#   %s\n"
+"#\n"
+"# налаштований наступним образом:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "змінна оточення ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "головний конфігураційний файл"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "розташування головного конфігураційного файлу"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "розташування файлів даних мов"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "створення псевдонімів словника"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "розташування переліку головних слів"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "очікуване кодування даних"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "додавання або видалення фільтру"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "шляхи, зі якими aspell шукає фільтри"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "режим фільтру"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "додаткові словники"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "розташування особистих файлів"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "ігнорування слів <= n символів"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "ігнорування акценту при перевірці слів -- НАРАЗІ ІГНОРУЄТЬСЯ"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "ігнорування регістру при перевірці слів"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "ігнорування команд для збереження замінних пар"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "додаткова інформація для переліку слів"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "визначення клавіатури для аналізу помилок набору"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "код мови"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "не схвалюється, використовуйте lang"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "розташування файлів локальних даних мови"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "базова назва головного словника"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "встановлює назву модуля"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "порядок пошуку модулів"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "увімкнення нормалізації Юнікоду"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "для поточної мови потрібна нормалізація Юнікоду"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "тип нормалізації Юнікоду: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "запобіг. перетворенню з втратами при нормалізації"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "особистий конфігураційний файл"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "назва файлу особистого словника"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "префікс каталогу"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "назва файлу списку замін"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "вважати зціплення слів допустимим"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "макс. кількість слів, які можуть бути зціплені"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "мінімальна довжина внутрішніх слів"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "зберігати пари замін при загальному збереженні"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "встан. префіксу на основі розташ. виконув. файлу"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "розмір списку слів"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "більше не використовується"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "режим пропонування"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "редагування відстані, перекриває режим sug-mode"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "аналіз помилок вводу, перекриває режим sug-mode"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "викор. таблиці замін, перекриває режим sug-mode"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "символи, що вставляються при розділенні слова"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "викор. особистих, із замінами та сеансових словників"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "шлях пошуку файлів з інформацією переліку слів"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "увімкнення попереджень"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "індикатор афіксних ознак у списках слів -- НАРАЗІ ІГНОРУЄТЬСЯ"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "викор. стиснення афіксу при створенні словників"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "видалення неправильних афіксних ознак"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "пробувати очищати слова, щоб вони стали правильними"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "обчислення soundslike за вимогою замість зберігання"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "часткове розшир. афіксів для покращення пропозицій"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "пропуск неправильних слів"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "перевірка правильності ознак афіксів"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "перевірка правильності слів"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "створювати резервні файли додаванням \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "викор. зсув байтів замість зсуву символів"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "створення відсутніх комбінацій корінь/афікс"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "розкладка режиму перевірки: \"aspell\" або \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "зворотний порядок списку пропозицій"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "пропозиція можливих замін"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "час завантаження та час пропозиції у pipe-режимі"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Це також може означати, що файл \"%s\" не може бути відкритий для читання, "
+"або не існує."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Символ Юнікоду U+%04X не підтримується."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Неправильна послідовність UTF-8 у позиції %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Операція не підтримується: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Метод \"%what:1\" не реалізований у \"%where:2\"."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Файл \"%file:1\" не може бути відкритий"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Файл \"%file:1\" не може бути відкритий для читання."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Файл \"%file:1\" не може бути відритий для запису."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Неправильна назва файлу \"%file:1\"."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Файл \"%file:1\" має неправильний формат."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Каталог \"%dir:1\" не може бути відкритий для читання."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Невідомий ключ \"%key:1\"."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Значення для параметра \"%key:1\" не можна змінювати."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Ключ \"%key:1\" не %accepted:2, тому він не дійсний."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Значення \"%value:2\" не %accepted:3, тому воно не дійсне для ключа \"%key:1"
+"\"."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Ключ \"%key:1\" не є символьним рядком."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Ключ \"%key:1\" не є цілим числом."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Ключ \"%key:1\" не є логічним значенням."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Ключ \"%key:1\" не є списком."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr "Ключ \"%key:1\" не допускає ніяких параметрів з префіксом \"reset-\"."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr "Ключ \"%key:1\" не допускає ніяких параметрів з префіксом \"enable-\"."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Ключ \"%key:1\" не допускає ніяких параметрів з префіксом \"dont-\" чи "
+"\"disable-\"."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr "Ключ \"%key:1\" не допускає ніяких параметрів з префіксом \"clear-\"."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Невідома мова \"%lang:1\"."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Невідомий soundslike \"%sl:2\"."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Мова \"%lang:1\" не підтримується."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Не вдається знайти списки слів для мови \"%lang:1\"."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Очікувалась мова \"%lang:1\" але отримано \"%prev:2\"."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Афікс '%aff:1' пошкоджений."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Неправильна умова \"%cond:1\"."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Умова \"%cond:1\" не гарантує, що \"%strip:2\" завжди може бути розділений."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Файл \"%file:1\" має неправильний формат. Очікувалось, що файл буде \"%exp:2"
+"\", а не \"%got:3\"."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Невідоме кодування \"%encod:1\"."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Кодування \"%encod:1\" не підтримується."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Перетворення з \"%encod:1\" у \"%encod2:2\" не підтримується."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Неправильний рядок \"%str:1\"."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Неправильне слово \"%word:1\"."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Ознака афіксу '%aff:1' є неправильною для слова \"%word:2\"."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Ознака афіксу '%aff:1' незастосовна до слова \"%word:2\"."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "не є номером версії"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen повернув \"%return:1\"."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Файл \"%filter:1\" не містить жодного фільтру."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Фільтр \"%filter:1\" не існує."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Заплутаний керуванням версіями."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Версія aspell не задовольняє вимогам фільтра."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Параметр фільтра вже існує."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Використовуйте модифікатори лише з іменованим параметром."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Невідомий модифікатор параметра."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Помилка встановлення опису фільтра."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Порожній специфікатор параметра."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Можливо, параметр \"%option:1\" вказаний перед фільтром."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Невідомий ключ опису режиму \"%key:1\"."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Очікується ключ \"%modekey:1\""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Відсутній ключ вказівника версії: \"aspell\"."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Версія aspell не відповідає вимогам режиму."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Відсутній вираз режиму ядра."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Порожнє розширення у символі %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Помилка \"%mode:1\""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Невідомий режим: \"%mode:1\"."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+"\"%mode:1\" помилка при розширенні режимів Aspell. (недостатньо пам'яті?)"
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": немає початку для пошуку magic, заданого для magic \"%magic:2\"."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"\"%mode:1\": немає діапазону для пошуку magic, заданого для  magic \"%magic:2"
+"\"."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr "\"%mode:1\": немає наявного виразу magic, для magic \"%magic:2\"."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"\"%mode:1\": Magic \"%magic:2\": неправильний регулярний вираз після "
+"вказівника розташування; regexp повернув: \"%regerr:3\"."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "\"%expression:1\" не є правильним регулярним виразом."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Необроблена помилка: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Помилка: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Помилка: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "перехід у режим Email."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "перехід у режим HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "перехід у режим TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "перехід у режим Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Неправильний параметр: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " не допускає ніяких параметрів."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Необхідно вказати параметр для \"%s\"."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Необхідно вказати дію"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Невідома дія: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Помилка: Необхідно вказати принаймні %d параметрів для \"%s\".\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Неправильні вхідні дані"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "ПОПЕРЕДЖЕННЯ: Не вдається увійти у режим Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Час завантаження списку слів: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Час пропонування: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Необхідно вказати назву файла."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Можна вказувати лише один файл."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Не вдається відкрити файл \"%s\" для читання"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Неправильна розкладка клавіатури: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Не вдається відкрити файл \"%s\" для запису. Файл не збережено."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Ігнорувати"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Ігнорувати все"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Замінити"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Замінити все"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Додати"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Додати нижн.рег"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Перервати"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Вийти"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Ви впевнені, що бажаєте перервати (y/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Yy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "На: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Вибачте, це некоректний вибір!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Функція \"filter\" наразі не реалізована.\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Поки-що не можна об'єднати головний список слів."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr "Функція \"create/merge personal\" наразі не реалізована.\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Файл \"%s\" не буде перезаписаний"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr "Функція \"create/merge repl\" наразі не реалізована.\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr "\"%s\" не є правильним ключем для команди \"munch-list\"."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Використання: aspell [параметри] <команда>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<команда> одна з:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         вивести коротке повідомлення про використання"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             вивести докладну довідку"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <файл>  перевірка файлу"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          режим сумісності \"ispell -a\""
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+"  [dump] config    вивід дампу поточної конфігурації у стандартний вивід"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <ключ>    вивід поточного значення параметра"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    перелік доступних словників / фільтрів / режимів фільтрів"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[параметри] будь-які з наступних:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             створює перелік слів з помилками зі стандартного вводу"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+"  soundslike       повертає звуковий еквівалент для кожного виділеного слова"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            створює можливі корені слів та афіксів"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     розширює ознаки афіксів"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   очищує перелік слів, тобто кожний рядок - правильне слово"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       виводить номер версії"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr "  munch-list [simple] [single|multi] [keep]"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    зменшити розмір списку слів використовуючи affix-стиснення"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <з> <у> [<норм-форма>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    перетворює з одного кодування у інше"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<катра-норм> | <з> <карта-норм> <у>) [<форма-норм>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    виконати нормалізацію Юнікоду"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<назва>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+"    дамп, створення або об'єднання головного, особистого словників або "
+"словника замін."
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <форма-норм>     форма нормалізації, що вживається: none, internal, або "
+"strict"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Наявні словники:\n"
+"    Словники можна вибрати безпосередньо параметром \"-d\" чи \"master\".\n"
+"    Також вони вибираються непрямим способом, параметрами \"lang\",\n"
+"    \"variety\", та \"size\".\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Наявні фільтри (та пов'язані з ними параметри):\n"
+"    Фільтри можна додавати та видаляти параметром \"filter\".\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s фільтр: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Наявні режими фільтрів:\n"
+"    Режими фільтрів - це переналаштовані комбінації фільтрів, оптимізовані\n"
+"    для файлів певного типу. Режим вибирається параметром \"mode\". Це\n"
+"    відбуватиметься постійно, якщо Aspell буде здатний визначити тип файлу\n"
+"    за його розширенням, та, можливо, вмістом файлу.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Помилка: Stdin не є терміналом."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Прийняти зміни"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Видалити попередній символ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Стрілка ліворуч"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Переміститись назад на одну позицію"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Стрілка праворуч"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Переміститись вперед на одну позицію"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Переміститись на початок рядка"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Переміститись у кінець рядка"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Видалити наступний символ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Видалити усі символи до кінця рядка"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Перервати цю операцію"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Можливо, це тому-що: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Відсутнє обов'язкове поле \"name\"."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Порожній рядок."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Символ \"%s\" (U+%02X) не може з'являтись на початку слова."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Після символу '%s' (U+%02X) повинен іти символ цифри чи букви."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Не містить ніяких цифрових чи буквених символів."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Символ '%s' (U+%02X) не може з'являтись у середині слова."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Символ '\\r' (U+0D) не може з'являтись наприкінці слова. Можливо, це "
+"означає, що у файлі використовується символ кінця файлу MS-DOS, а не Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Символ '%s' (U+%02X) не може з'являтись наприкінці слова."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Попередження: Видаляється неправильний суфікс '%s' зі слова %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Попередження: Видаляється непридатний афікс '%s' зі слова %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Попередження: %s Пропускається рядок.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Загальна довжина перевищує 240 символів."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "попередження: %s Пропускається слово.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Можливо, неправильний рахунок."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Неправильний порядок endian."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Неправильний soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Неправильна версія soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "У слові знайдені ознаки афіксу, але файл афіксу не вказаний."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Загальна довжина слів з даним soundslike перевищує 240 символів."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Має бути принаймні один рядок \"add\""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "одне з ultra, fast, normal, slow, чи bad-spellers"
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "не є одним з допустимих типів"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Недоступний особистий список слів."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Недоступний сеансовий список слів."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Недоступний головний список слів."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "рядок з 'o','O','p' чи 'P'"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "фільтр приховування розділених контекстів Aspell"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr "роздільники контексту (відокремлених пробілами)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "міняє видимий та невидимий текст"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "фільтр для пропуску цитованого тесту у email"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "символи лапок email"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "кільк. символів, які можуть з'являтись перед лапками"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "фільтр для роботи з документами HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "атрибути HTML, що завжди перевіряються"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "HTML теги, вміст яких завжди пропускається"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "фільтр для роботи з документами Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "фільтр для роботи зі звичайними SGML/XML документами"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "атрибути SGML, що завжди перевіряються"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "SGML теги, вміст яких завжди пропускається"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "фільтр для роботи з документами TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "перевірка коментарів TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "команди TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "фільтр для роботи з документами Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "Команди Texinfo для ігнорування параметрів"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "Оточення Texinfo для ігнорування"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "фільтр для пропуску конструкцій типу URL"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "режим перевірки коментарів C++ та символьних літералів"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "режим перевірки довільних рядків, що починаються з #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "режим для пропуску цитованого тексу у email"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "режим для перевірки документів HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "режим для відключення усіх фільтрів"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "режим для перевірки документів Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "режим для перевірки коментарів perl та символьних літералів"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "режим для перевірки звичайних SGML/XML документів"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "режим для перевірки звичайних TeX/LaTeX документів"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "режим для перевірки документів Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "режим для пропуску конструкцій типу URL (типовий режим)"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644 (file)
index 0000000..d9dca0f
Binary files /dev/null and b/po/vi.gmo differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644 (file)
index 0000000..c901f1b
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,1400 @@
+# Vietnamese translation of Aspell.
+# Copyright © 2008 Kevin Atkinson
+# This file is distributed under the same license as the aspell-0.60.6 package.
+# Clytie Siddall <clytie@riverland.net.au>, 2006-2008.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2008-05-02 16:43+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.7b3\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "một con số nằm giữa 0 và 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "dạng « <tên> <giá_trị> »"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "chuỗi"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "số nguyên"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "bun"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "danh sách"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "hoặc « true » (đúng) hoặc « false » (sai)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "số nguyên dương"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# mặc định: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Bộ lọc: %s\n"
+"#   %s\n"
+"#\n"
+"# đã cấu hình như theo đây:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF env var (biến môi trường cấu hình trình Aspell)"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "tập tin cấu hình chính"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "vị trí của tập tin cấu hình chính"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "vị trí của những tập tin dữ liệụ ngôn ngữ"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "tạo các bí danh từ điển"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "vị trí của danh sách từ chính"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "bằng mã đã ngờ của dữ liệu"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "thêm hay gỡ bỏ bộ lọc"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "(các) đường dẫn nơi aspell tìm bộ lọc"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "chế độ lọc"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "từ điển thêm cần dùng"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "vị trí của các tập tin cá nhân"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "bỏ qua từ có độ dài ≤ n ký tự"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr "bỏ qua dấu khi kiểm tra từ — HIỆN BỊ BỎ QUA"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "bỏ qua chữ hoa/thường khi kiểm tra từ"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "bỏ qua lệnh để cất giữ đôi từ thay thế"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "thông tin thêm cho danh sách từ"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "lời xác định bàn phím cần dùng để phân tích lỗi gõ"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "mã ngôn ngữ (Việt ngữ là « vi »)"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "bị phân đối nên hãy sử dụng « lang » thay thế"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "vị trí của các tập tin dữ liệu ngôn ngữ cục bộ"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "tên cơ sở của từ điển chính cần dùng"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "đặt tên mô-đun"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "thứ tự tìm kiếm mô-đun"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "bật khả năng tiêu chuẩn hóa Unicode"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "Khả năng tiêu chuẩn hoá Unicode cần thiết cho ngôn ngữ hiện có"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "kiểu tiêu chuẩn hóa Unicode: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "tránh việc chuyển đổi mất gì khi tiêu chuẩn hóa"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "tập tin cấu hình cá nhân"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "tên tập tin từ điển cá nhân"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "thư mục tiền tố"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "tên tập tin danh sách từ thay thế"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "cho phép từ được kết hợp"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "số từ tối đa có thể được kết hợp với nhau"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "độ dài tối thiểu của từ nội bộ"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr "lưu đôi từ thay thế khi Lưu tất cả"
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "lập tiền tố đựa vào vị trí của tập tin có thể thực hiện"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "kích cỡ của danh sách từ"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "không còn dùng lại"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "chế độ góp ý"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr "sửa tầm cần dùng, có quyền cao hơn chế độ góp ý mặc định"
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr "phân tích lỗi gõ, co quyền cao hơn chế độ góp ý  mặc định"
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr "dùng bảng thay thế, có quyền cao hơn chế độ góp ý măc định"
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr "ký tự cần chèn khi chia tách từ"
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr "dùng từ điển cả kiểu cá nhân, thay thế và phiên chạy"
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr "đường dẫn tìm kiếm tập tin thông tin danh sách từ"
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "bật cảnh báo"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr "cái chỉ cờ phụ tố trong danh sách từ — HIỆN BỊ BỎ QUA"
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr "nén kiểu affix (thêm vào) khi tạo từ điển"
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr "gỡ bỏ cờ affix (thêm vào) không hợp lệ"
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr "lần cố gắng sửa chữa từ để làm cho nó là hợp lệ"
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr "tính soundslike (nghe như) khi yêu cầu, hơn là cất giữ"
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr "mở rộng bộ phận affix (thêm vào) để góp ý tốt hơn"
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "bỏ qua từ không hợp lệ"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "kiểm tra cờ affix (thêm vào) là hợp lệ không"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "kiểm tra từ la hợp lệ không"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "tạo tập tin sao lưu bằng cách thêm vào phần mở rộng \".bak\""
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "dùng hiệu số byte thay thế hiệu số ký tự"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr "tạo sự kết hợp gốc/phụ tố còn thiếu"
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr "ảnh xạ phím cho chế độ kiểm tra: \"aspell\" hay \"ispell\""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr "đổi chiếu thứ tự của danh sách góp ý"
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr "góp ý từ thay thế có thể"
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr "tính thời gian tải và thời gian góp ý khi trong chế độ ống dẫn"
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+"Cũng có thể nghĩa là không thể mở tập tin « %s » để đọc, hoặc nó không tồn "
+"tại."
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Điểm mã Unicode U+%04X không được hỗ trợ."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Dãy UTF-8 không hợp lệ tại vị trí %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Thao tác không được hỗ trợ : %what:1."
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Phương pháp « %what:1 » không được thực hiện trong « %where:2 »."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Không thể mở tập tin « %file:1 »."
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Không thể mở tập tin « %file:1 » để đọc."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Không thể mở tập tin « %file:1 » để ghi."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Tên tập tin « %file:1 » không hợp lệ."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Tập tin « %file:1 » không có dạng thức đúng."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Không thể mở thư mục « %dir:1 » để đọc."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Không biết khóa « %key:1 »."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Không thể thay đổi giá trị cho tùy chọn « %key:1 »."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr "Khóa « %key:1 » không phải %accepted:2 thì không hợp lệ."
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+"Giá trị « %value:2 » không phải %accepted:3 thì không hợp lệ đối với khóa « %"
+"key:1 »."
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Khóa « %key:1 » không phải là chuỗi."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Khóa « %key:1 » không phải là số nguyên."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Khóa « %key:1 » không phải là bun."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Khóa « %key:1 » không phải là danh sách."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+"Khóa « %key:1 » không chấp nhận tham số khi có tiền tố « reset- » (lập lại)."
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+"Khóa « %key:1 » không chấp nhận tham số nào khi có tiền tố « enable- » (hiệu "
+"lực)."
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+"Khóa « %key:1 » không chấp nhận tham số khi có tiền tố « dont- » (đừng) hay "
+"« disable- » (tắt)."
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+"Khóa « %key:1 » không chấp nhận tham số khi có tiền tố « clear- » (xóa)."
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Không biết ngôn ngữ « %lang:1 »."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "Không biết điều soundslike (nghe như) « %sl:2 »."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Ngôn ngữ « %lang:1 » không được hỗ trợ."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Không tìm thấy danh sách từ đối với ngôn ngữ « %lang:1 »."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Ngờ ngôn ngữ « %lang:1 » còn nhận « %prev:2 »."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr "Phụ tố '%aff:1' bị hỏng."
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "Điều kiện « %cond:1 » không hợp lệ."
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+"Điều kiện « %cond:1 » không bảo đảm luôn luôn có thể tước « %strip:2 »."
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+"Tập tin « %file:1 » không co dạng thức đúng. Ngờ tập tin dạng « %exp:2 » "
+"không phải « %got:3 »."
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "Không biết bảng mã « %encod:1 »."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "Bảng mã « %encod:1 » không được hỗ trợ."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Việc chuyển đổi từ « %encod:1 » sang « %encod2:2 » không được hỗ trợ."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Chuỗi « %str:1 » không hợp lệ."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Từ « %word:1 » không hợp lệ."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr "Cờ affix (thêm vào) « %aff:1 » không hợp lệ đối với « %word:2 »."
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr "Không thẻ áp dụng cờ affix (thêm vào) « %aff:1 » cho từ « %word:2 »."
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "không phải là số hiệu phiên bản"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "lệnh dlopen đã trả lời « %return:1 »."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Tập tin « %filter:1 » không chứa bộ lọc."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Bộ lọc « %filter:1 » không tồn tại."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr "Lộn xộn vì sự điều khiển phiên bản."
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr "Phiên bản trình Aspell không khớp với điều kiện của bộ lọc."
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr "Tùy chọn lọc đã có."
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr "Hãy dùng điều sửa đổi tùy chọn chỉ bên trong tùy chọn có tên."
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr "Không biết điều sửa đổi tùy chọn đó."
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr "Gặp lỗi khi đặt mô tả bộ lọc."
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr "Điều ghi rõ tùy chọn trống."
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr "Tùy chọn « %option:1 » có thể được xác định trước bộ lọc."
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr "Không biết khóa mô tả chế độ « %key:1 »."
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr "Ngờ khóa « %modekey:1 »."
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr "Điều xác định phiên bản còn thiếu khóa « aspell »."
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Phiên bản trình Aspell không khớp với điều kiện của chế độ."
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr "Thiếu biểu thức chế độ mã thuật."
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr "Phần mở rộng trống tại ký tự %char:1."
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "Lỗi « %mode:1 »"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Không biết chế độ: « %mode:1 »."
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr "Gặp lỗi « %mode:1 » khi mở rộng chế độ Aspell. (Hết bộ nhớ không?)."
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+"« %mode:1 »: chưa đặt đầu tìm kiếm mã thuật đối với « %magic:2 » mã thuật."
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+"« %mode:1 »: chưa đặt phạm vị tìm kiếm mã thuật đối với « %magic:2 » mã "
+"thuật."
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+"« %mode:1 »: không có biểu thức mã thuật sẵn sàng đối với « %magic:2 » mã "
+"thuật."
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+"« %mode:1 »: mã thuật « %magic:2 »: biểu thức chính quy sai nằm sau đồ ghi "
+"rõ địa điểm; regexp thông báo: « %regerr:3 »."
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr "« %expression:1 » không phải là biểu thức chính quy hợp lệ."
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "Lỗi không được quản lý: "
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Lỗi: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Lỗi: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "vào chế độ thư điện tử."
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "vào chế độ HTML."
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "vào chế độ TeX."
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "vào chế độ Nroff."
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Tùy chọn không hợp lệ: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr " không chấp nhận tham số."
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Phải ghi rõ tham số đốí với « %s »."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Phải ghi rõ hành động"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Không biết hành động: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "Lỗi: phải ghi rõ ít nhất %d tham số đối với « %s ».\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "Dữ liệu nhập không hợp lệ"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "CẢNH BÁO : không thể vào chế độ Nroff: %s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr "Thòi gian tải danh sách từ: "
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "Thời gian góp ý: %f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Phải ghi rõ tên tập tin."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "Có thể ghi rõ chỉ một tên tập tin thôi."
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "Không thể mở tập tin « %s » để đọc."
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr "Ảnh xạ khóa không hợp lệ: %s"
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "Không thể mở tập tin « %s » để ghi nên chưa lưu tập tin."
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Bỏ qua"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Bỏ qua hết"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Thay thế"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Thay thế hết"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Thêm"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Thêm thấp hơn"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Hủy bỏ"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Thoát"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Bạn có chắc muốn hủy bỏ không? (c/k) "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Cc"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Với: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "Tiếc là lựa chọn đó không hợp lệ."
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr "Tiếc là chưa thi hành khả năng « filter » (lọc).\n"
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr "Tiếc là chưa có thể phối danh sách từ chính."
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+"Tiếc là chưa thi hành khả năng « create/merge personal » (tạo/phối cá "
+"nhân).\n"
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Tiếc là không thể ghi đè « %s »"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+"Tiếc là chưa thi hành khả năng « create/merge repl » (tạo/phối thay thế).\n"
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+"« %s » không phải là cờ hợp lệ đối với lệnh « munch-list » (nhai danh sách)."
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Cách sử dụng: aspell [tùy_chọn ...] <lệnh>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<lệnh> là một của :"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         hiển thị thông điệp ngắn về _cách sử dụng_"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             hiển thị thông điệp _trợ giup_ chi tiết"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <tập_tin>  _kiểm tra_ tập tin này"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          chế độ tương thích « ispell -a » (ống dẫn)"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr "  [dump] config    _đổ cấu hình_ hiện thời ra thiết bị xuất chuẩn"
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+"  config <khóa>     in ra giá trị hiện thời của tùy chọn đó (_cấu hình_)"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr "    liệt kê các từ điển / bộ lọc / chế độ lọc sẵn sàng"
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[tùy_chọn ...] có thể:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             tạo _danh sách_ các từ sai chính tả từ thiết bị nhập chuẩn"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr "  soundslike       trả lời điều _nghe như_ mỗi từ đã nhập"
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr "  munch            tạo ra từ gốc và affix (thêm vào) có thể (_nhai_)"
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr "  expand [1-4]     _mở rộng_ cờ affix"
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+"  clean [strict]   _xoá sạch_ danh sách từ để mỗi dòng là một từ hợp lệ\n"
+"\t(_chính xác_)"
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       in ra dòng _phiên bản_"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+"  munch-list [simple] [single|multi] [keep]\n"
+"\t(nhai danh sách, đơn giản, đơn, đa, giữ)"
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr "    giảm kích cỡ của danh sách từ bằng cách nén kiểu affix"
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <bảng mã này> <bảng mã khác> [<kiểu tiêu chuẩn>] (_chuyển đổi_)"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr "    chuyển đổi từ bảng mã này sang bảng mã khác"
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+"  norm (<lược đồ tiêu chuẩn> | <điều này> <lược đồ tiêu chuẩn> <điều khác>)\n"
+"\t[<kiểu tiêu chuẩn>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr "    tiêu chuẩn hóa kiểu Unicode"
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr "  dump|create|merge master|personal|repl [<name>]"
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr "    đổ, tạo hay hoà trộn từ điển kiểu chính, cá nhân hay thay thế"
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+"  <norm-form>      _kiểu tiêu chuẩn hóa_ cần dùng, hoặc none (không có),\n"
+"\tinternal (nội bộ), hay strict (chính xác)"
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  Tác quyền © năm 2000-2011 của Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Từ điển sẵn sàng:\n"
+"    Có thể chọn trực tiếp từ điển bằng tùy chọn « -d »\n"
+"hay « master » (chính). Cũng co thể chọn gián tiếp từ điển bằng\n"
+"tùy chọn « lang » (ngôn ngữ), « variety » (loại), và « size » (kích cỡ).\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Bộ lọc sẵn sàng (và tùy chọn tương ứng):\n"
+"    Có thể thêm hoặc gỡ bỏ bộ lọc bằng tùy chọn « filter » (lọc).\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s lọc: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Chế độ lọc sẵn sàng:\n"
+"   Chế Độ Lọc là sự phối hợp được cấu hình lại\n"
+"của bộ lọc được tối ưu hoá dành cho tập tin có kiểu riêng.\n"
+"Chế độ được chọn bằng tùy chọn « mode ».\n"
+"Nó sẽ được chọn ngầm nếu trình Aspell có thể nhận diện\n"
+"kiểu tập tin từ phần mở rộng, và có thể từ nội dung của tập tin.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Lỗi: thiết bị nhập chuẩn không phải là thiết bị cuối."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Chấp nhận các thay đổi"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Xóa bỏ ký tự nằm trước"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Mũi tên bên trái"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Quay lùi một chữ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Mũi tên bên phải"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Đi tiếp một chữ"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Về đầu của dòng"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Tới kết thúc của dòng"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Xóa bỏ chữ nằm sau"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Xóa bỏ tất cả các ký tự đến kết thúc của dòng"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr "Hủy bỏ thao tác này"
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr "Rất có thể vì: "
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr "Tường cần thiết « name » (tên) còn thiếu."
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Chuỗi trống."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Không cho phép ký tự « %s » (U+%02X) bắt đầu từ."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr "Ký tự « %s » (U+%02X) phải có ký tự abc nằm sau nó."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "Không chứa ký tự abc."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Không cho phép ký tự « %s » (U+%02X) nằm ở giữa trong từ."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Không cho phép ký tự « \\r » (U+0D) kết thúc từ. Có thể nghĩa là tập tin\n"
+"đó dùng ký tự kết thúc dòng kiểu MS-DOS thay thế kiểu Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Không cho phép ký tự « %s » (U+%02X) kết thúc từ."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr "Cảnh báo : đang gỡ bỏ phụ tố không hợp lệ « %s » ra từ %s.\n"
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr "Cảnh báo : đang gỡ bỏ phụ tố không thể áp dụng « %s » ra từ %s.\n"
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr "Cảnh báo : %s đang bỏ qua chuỗi.\n"
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Tổng độ dài hơn 240 ký tự."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr "Cảnh báo : %s đang bỏ qua từ.\n"
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr "Có lẽ số đếm không đúng."
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr "Thứ tự byte trong số đa byte không phải là đúng."
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Điều soundslike (nghe như) không đúng."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Phiên bản soundslike (nghe như) không đúng."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr "Đã tìm cờ affix (phụ tố) trong từ nhưng không có tập tin affix đưa ra."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr "Tổng độ dài từ, gồm dữ liệu soundslike (nghe như), hơn 240 ký tự."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr "Cần phải có ít nhất một dòng kiểu « thêm » (add)."
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr "một của người chính tả rất tốt, nhanh, thường, chạm hay tệ."
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr "không phải là một của những kiểu hợp lệ"
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr "Hiện thời danh sách từ cá nhân không sẵn sàng."
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr "Hiện thời danh sách từ phiên chạy không sẵn sàng."
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr "Hiện thời danh sách từ chính không sẵn sàng."
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr "chuỗi là « o », « O », « p », hay « P »"
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr "bộ lọc thuộc thí nghiệm để ẩn ngữ cảnh định giới"
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+"điều định giới ngữ cảnh (được phân cách\n"
+"bằng dấu cách)"
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "trao đổỉ chữ hữu hình và vô hình"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "bộ lọc để bỏ qua đoạn trích dẫn trong thư điên tử"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "ký tự trích dẫn thư điện tử"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "số ký tự có thể nằm trước ký tự trích dẫn"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "bộ lọc để xử lý tàì liệu HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "thuộc tính HTML cần kiểm tra luôn luôn"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "thẻ HTML cần bỏ qua nội dung của chúng"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "bộ lọc để xử lý tài liệu Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "bộ lọc để xử lý tài liệu SGML/XML giống loài"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "thuộc tính SGML cần kiểm tra luôn luôn"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "thẻ SGML cần bỏ qua nội dung của chúng"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "bộ lọc để xử lý tàì liệu TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "kiểm tra chú thích TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "lệnh TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "bộ lọc để xử lý tài liệu Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "lệnh Texinfo cần bỏ qua các tham số của chúng"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "môi trường Texinfo cần bỏ qua"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "bộ lọc để bỏ qua các đồ kiểu địa chỉ Mạng"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr "chế độ để kiểm tra chú thích C++ và đồ nghĩa chữ trong chuỗi"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "chế độ để kiểm tra dòng nào có ký tự đầu #"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "chế độ để bỏ qua đoạn trích dẫn trong thư điện tử"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "chế độ để kiểm tra tài liệu HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "chế độ để tắt mọi bộ lọc"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "chế độ để kiểm tra tài liệu Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr "chế độ để kiểm tra chú thích Perl và đồ nghĩa chữ trong chuỗi"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "chế độ để kiểm tra tài liệu SGML/XML giống loài"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "chế độ để kiểm tra tài liệu TeX/LaTex"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "chế độ để kiểm tra tài liệu Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "chế độ để bỏ qua đồ kiểu địa chỉ Mạng (chế độ mặc định)"
diff --git a/po/wa.gmo b/po/wa.gmo
new file mode 100644 (file)
index 0000000..13b4184
Binary files /dev/null and b/po/wa.gmo differ
diff --git a/po/wa.po b/po/wa.po
new file mode 100644 (file)
index 0000000..80de7ff
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,1376 @@
+# translation of aspell-0.60.2-b20041203.po to Walloon
+# Translation of aspell into the walloon language.
+# Copyright (C) 2004 THE PACKAGE'S COPYRIGHT HOLDER
+# Pablo Saratxaga <pablo@walon.org>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell 0.60.2-b20041203\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2004-12-06 17:51+0100\n"
+"Last-Translator: Pablo Saratxaga <pablo@walon.org>\n"
+"Language-Team: Walloon <linux-wa@walon.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "on nombe inte 0 eyet 1"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "dins l' cogne «<no> <valixhance>»"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "tchinne"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "nombe etir"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "bouleyin"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr "djivêye"
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "soeye-t i «true» (vraiy) soeye-t i «false» (fås)"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "on nombe etir pôzitif"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# prémetou: "
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Passete: %s\n"
+"#   %s\n"
+"#\n"
+"# apontieye come shût:\n"
+"\n"
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "variåve d' evironmint ASPELL_CONF"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "mwaisse fitchî d' apontiaedje"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "eplaeçmint do mwaisse fitchî d' apontiaedje"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "eplaeçmint des fitchîs di dnêyes des lingaedjes"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "fé des alias di motîs"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr "eplaeçmint del mwaisse djivêye di mots"
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr "ecôdaedje k' on ratind les dnêyes"
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr "radjouter ou bodjî ene passete"
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr "tchimin(s) k' aspell louke après des passetes"
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr "môde passete"
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "diccionaires di rawete a-z eployî"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "eplaeçmint po les fitchîs da vosse"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "passer houte des mots di moens di n caracteres"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+"èn nén tni conte des accints po verifyî les mots -- ÈN ROTE NÉN POL MOUMINT"
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "èn nén tni conte des grandès/ptitès letes"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr "èn nén wårder les pwaires di replaeçmint"
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr "informåcion di rawete pol djivêye di mots"
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr "taprece po l' analijhe des flotches di tapaedje"
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "côde do lingaedje"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr "obsolete, eployîz lang purade"
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr "eplaeçmint des fitchîs locås pol lingaedje"
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "no d' båze pol mwaisse motî a-z eployî"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "defini no do module"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "ôre di cweraedje po les modules"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr "eployî l' normålijhaedje unicôde"
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr "ci lingaedje a mezåjhe do normålijhaedje unicôde"
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr "sôre di normålijhaedje unicôde: none, nfd, nfc, comp"
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr "eviter di cviersser avou pietes tot normålijhant"
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "fitchî d' apontiaedje da vosse"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "no d' fitchî do motî da vosse"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "betchete po les ridants"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr "no d' fitchî del djivêye di replaeçmints"
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr "accepter les mots a loyeures"
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr "longueur macsimom d' on mot a loyeures"
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr "longueur minimom des dvintrins mots"
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr ""
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr ""
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr "grandeu del djivêye di mots"
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "pupont eployî"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr ""
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr ""
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "mete en alaedje les adviertixhmints"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "passer houte des mots nén valides"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr "verifyî si les drapeas sont valides"
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "verifyî si les mots sont valides"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "fé ene copeye di såvrité avou l' cawete «.bak»"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr ""
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr ""
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr "Li caractere unicôde U+%04X n' est nén sopoirté."
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "Secwince UTF-8 nén valide al pôzucion %ld."
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "Operåcion nén sopoirtêye: %what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "Li metôde «%what:1» n' est nén eplemintêye dins «%where:2»."
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "Li fitchî «%file:1» èn pout nén esse drovou"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "Li fitchî «%file:1» èn pout nén esse drovou po lére."
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "Li fitchî «%file:1» èn pout nén esse drovou po scrire."
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "Li fitchî «%file:1» n' est nén valide."
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "Li fitchî «%file:1» n' est nén dins l' boune cogne."
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "Li ridant «%dir:1» èn pout nén esse drovou po-z î lére."
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr "Li clé «%key:1» n' est nén cnoxhowe."
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr "Li valixhance pol tchuze «%key:1» èn pout nén esse candjeye."
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr ""
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr "Li clé «%key:1» n' est nén ene tchinne."
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr "Li clé «%key:1» n' est nén on nombe etir."
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr "Li clé «%key:1» n' est nén on bouleyin."
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr "Li clé «%key:1» n' est nén ene djivêye."
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "Li lingaedje «%lang:1» n' est nén cnoxhou."
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr "L' informåcion fonetike «%sl:2» n' est nén cnoxhowe."
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "Li lingaedje «%lang:1» n' est nén sopoirté."
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr "Nole djivêye di mots d' trovêye pol lingaedje «%lang:1»."
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr "Lingaedje «%lang:1» ratindou, mins c' est «%prev:2» ki dj' a-st avou."
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr ""
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "L' ecôdaedje «%encod:1» n' est nén cnoxhou."
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "L' ecôdaedje «%encod:1» n' est nén sopoirté."
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "Li cviersaedje di «%encod:1» viè «%encod2:2» n' est nén sopoirté."
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "Li tchinne «%str:1» n' est nén valide."
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "Li mot «%word:1» n' est nén valide."
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "nén on limero d' modêye"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen() a rtourné «%return:1»."
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr "Li fitchî «%filter:1» n' a nole passete å dvins."
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr "Li passete «%filter:1» n' egzistêye nén."
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr ""
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr ""
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr ""
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr ""
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr ""
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "Môde nén cnoxhou: «%mode:1»"
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr ""
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr ""
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "Aroke: %s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "Aroke: "
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr ""
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr ""
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr ""
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr ""
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "Tchuze nén valide: %s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr ""
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "Vos dvoz specifyî on paramete po «%s»."
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "Vos dvoz specifyî ene accion"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "Accion nén cnoxhowe: %s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr ""
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr ""
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr ""
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr ""
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr ""
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "Vos dvoz dner on no d' fitchî."
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr ""
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr ""
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr ""
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr ""
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "Passer houte"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "Passer houte totavå"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "Replaecî"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "Replaecî totavå"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "Radjouter"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr "Radjouter e ptitès letes"
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "Rinoncî"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "Moussî foû"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "Estoz vs seur di voleur rinoncî (o/n)?  "
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "OoAaYyWw"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr "Avou: "
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr ""
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr "Mande escuzes, mins dji n' sipotchrè nén «%s»"
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "Po s' è siervi: aspell [tchuzes] <comande>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<comande> c' est ene di:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         håynêye on rascourti messaedje d' aidance"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             håynêye on longou messaedje d' aidance"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <fitchî>  po verifyî on fitchî"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          môde copatibe avou «ispell -a»"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr ""
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr ""
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[tchuzes] c' est ene des tchuzes ki shuvèt:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+"  list             fwait-st ene djivêye di mots avou des flotches so "
+"l' intrêye standård"
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       mostere li modêye do programe"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr ""
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+"\n"
+"Aspell %s.  © 2000-2011 pa Kevin Atkinson.\n"
+"\n"
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+"Motîs k' i gn a:\n"
+"    Les motîs polèt esse tchoezi directumint avou l' tchuze «-d» ou "
+"«master».\n"
+"    I polèt eto esse tchoezi indirectumint avou l' tchuze "
+"«lang» (lingaedje),\n"
+"    «variety» (variyante) ou co «size» (grandeu).\n"
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+"Passetes k' i gn a (eyet leus tchuzes):\n"
+"    Les passetes polèt esse radjoutêyes ou oistêyes avou l' tchuze "
+"«filter».\n"
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+"\n"
+"  %s passete: %s\n"
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+"Môdes passet k' i gn a:\n"
+"    Les môdes passete sont des rarindjmints des passetes optimijhîs po\n"
+"    des fitchîs d' en sôre dinêye. On môde est tchoezi avou l' tchuze "
+"«mode».\n"
+"    Aspell tchoezixh tot seu li bon môde s' il arive a ricnoxhe li sôre do\n"
+"    fitchî a pårti di s' cawete, ou di çou k' i gn a-st å dvins.\n"
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr "Aroke: l' intrêye sitandård (stdin) n' est nén on terminå."
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr "Enter"
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr "Accepter les candjmints"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr "Backspace"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr "Control-H"
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr "Disfacer l' caractere di dvant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr "Left"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr "Control-B"
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr "Potchî å caractere vude di dvant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr "Right"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr "Control-F"
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr "Potchî å caractere vude shuvant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr "Home"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr "Control-A"
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr "Potchî al comince del roye"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr "End"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr "Control-E"
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr "Potchî al fén del roye"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr "Delete"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr "Control-D"
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr "Disfacer l' caractere shuvant"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr "Control-K"
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr "Diusfacer ttafwait disk' al fén del roye"
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr "Control-C"
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr ""
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr ""
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr "Tchinne vude."
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr "Li caractere «%s» (U+%04X) èn pout nén esse al comince d' on mot."
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+"Li caractere «%s» (U+%04X) doet esse shuvou d' on caractere alfabetike."
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr "I n' a nou caractere alfabetike."
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr "Li caractere «%s» (U+%04X) èn pout nén esse å mitan d' on mot."
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+"Li caractere «\\r» (U+000D) èn pout nén esse al fén d' on mot. Probåblumint "
+"ki c' est paski l' fitchî eploye des féns d' roye MS-DOS el plaece di féns "
+"d' roye Unix."
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr "Li caractere «%s» (U+%04X) èn pout nén esse al fén d' on mot."
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr "Li longueur totåle est di pus d' 240 caracteres."
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr "Mwais soundslike."
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr "Mwaijhe modêye des dnêyes fonetikes (soundslike)."
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+"Des drapeas trovés dins l' djivêye di mots, mins pont d' fitchî d' definixha "
+"des drapeas."
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+"Li longueur totåle doi mot, avou les dnêyes fonetikes, est di pus d' 240 "
+"caracteres."
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr "discandjî li tecse veyåve/nén veyåve"
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr "passete po n' nén verifyî li tecse cité dins les emiles"
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr "caracteres pol citåcion dins les emiles"
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr "caracteres macs. divant l' caractere di citåcion"
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr "passete po les documints HTML"
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr "atributs HTML a tofer verifyî"
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr "etiketes HTML a tofer passer houte leu contnou"
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr "passete po les documints Nroff"
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr "passete po les documints SGML/XML djenerikes"
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr "atributs SGML a tofer verifyî"
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr "etiketes SGML a tofer passer houte leu contnou"
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr "passete po les documints TeX/LaTeX"
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr "verifyî les comintaires TeX"
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr "comandes TeX"
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr "passete po les documints Texinfo"
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr "comandes Texinfo a passer houte di leus parametes"
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr "evironmints Texinfo a passer houte"
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr "passete po passer houte des mots rshonnant a des hårdêyes (URLs)"
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+"môde pol verifiaedje des comintaires eyet tchinnes di tecse des fitchîs C++"
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr "môde po verifyî les royes ki cmincèt avou « # »"
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr "môde po n' nén verifyî li tecse cité dins les emiles"
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr "môde pol verifiaedje des documints HTML"
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr "môde po dismete totes les passetes"
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr "môde pol verifiaedje des documints Nroff"
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+"môde pol verifiaedje des comintaires eyet tchinnes di tecse dins des fitchîs "
+"perl"
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr "môde pol verifiaedje des documints SGML/XML djenerikes"
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr "môde pol verifiaedje des documints TeX/LaTeX"
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr "môde pol verifiaedje des documints Texinfo"
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr "môde po passer houte des mots ki rshonnèt des hårdêyes (prémetou môde)"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644 (file)
index 0000000..fd86bdb
Binary files /dev/null and b/po/zh_CN.gmo differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644 (file)
index 0000000..7ec4efe
--- /dev/null
@@ -0,0 +1,1336 @@
+# Chinese simplified translation for aspell.
+# Copyright (C) 2011 Kevin Atkinson
+# This file is distributed under the same license as the aspell package.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: aspell-0.60.6\n"
+"Report-Msgid-Bugs-To: kevina@gnu.org\n"
+"POT-Creation-Date: 2011-07-04 03:25-0600\n"
+"PO-Revision-Date: 2011-06-23 10:30+0800\n"
+"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+
+#: common/info.cpp:232
+msgid "a number between 0 and 1"
+msgstr "一个 0 到 1 之间的数"
+
+#: common/info.cpp:569
+msgid "in the form \"<name> <value>\""
+msgstr "以“<名字> <值>”的形式"
+
+#: common/config.cpp:74
+msgid "string"
+msgstr "字符串"
+
+#: common/config.cpp:74
+msgid "integer"
+msgstr "整型"
+
+#: common/config.cpp:74
+msgid "boolean"
+msgstr "布尔型"
+
+#: common/config.cpp:74
+msgid "list"
+msgstr ""
+
+#. TRANSLATORS: "true" and "false" are literal
+#. * values and should not be translated.
+#: common/config.cpp:978
+msgid "either \"true\" or \"false\""
+msgstr "“true”或“false”"
+
+#: common/config.cpp:997
+msgid "a positive integer"
+msgstr "一个正整数"
+
+#: common/config.cpp:1125
+msgid "# default: "
+msgstr "# 默认:"
+
+#: common/config.cpp:1188
+#, c-format
+msgid ""
+"\n"
+"#######################################################################\n"
+"#\n"
+"# Filter: %s\n"
+"#   %s\n"
+"#\n"
+"# configured as follows:\n"
+"\n"
+msgstr ""
+
+#: common/config.cpp:1286
+msgid "ASPELL_CONF env var"
+msgstr "ASPELL_CONF 环境变量"
+
+#. TRANSLATORS: The remaing strings in config.cpp should be kept
+#. under 50 characters, begin with a lower case character and not
+#. include any trailing punctuation marks.
+#: common/config.cpp:1360
+msgid "main configuration file"
+msgstr "主配置文件"
+
+#: common/config.cpp:1362
+msgid "location of main configuration file"
+msgstr "主配置文件的位置"
+
+#: common/config.cpp:1365
+msgid "location of language data files"
+msgstr "语言数据文件的位置"
+
+#: common/config.cpp:1367
+msgid "create dictionary aliases"
+msgstr "创建目录别名"
+
+#: common/config.cpp:1369
+msgid "location of the main word list"
+msgstr ""
+
+#: common/config.cpp:1371
+msgid "encoding to expect data to be in"
+msgstr ""
+
+#: common/config.cpp:1373
+msgid "add or removes a filter"
+msgstr ""
+
+#: common/config.cpp:1375
+msgid "path(s) aspell looks for filters"
+msgstr ""
+
+#: common/config.cpp:1379
+msgid "filter mode"
+msgstr ""
+
+#: common/config.cpp:1381
+msgid "extra dictionaries to use"
+msgstr "要使用的外部词典"
+
+#: common/config.cpp:1383
+msgid "location for personal files"
+msgstr "个人文件的位置"
+
+#: common/config.cpp:1385
+msgid "ignore words <= n chars"
+msgstr "忽略 <= n 个字符的词"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1388
+msgid "ignore accents when checking words -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1390
+msgid "ignore case when checking words"
+msgstr "检查单词时忽略大小写"
+
+#: common/config.cpp:1392
+msgid "ignore commands to store replacement pairs"
+msgstr ""
+
+#: common/config.cpp:1394 common/config.cpp:1461
+msgid "extra information for the word list"
+msgstr ""
+
+#: common/config.cpp:1396
+msgid "keyboard definition to use for typo analysis"
+msgstr ""
+
+#: common/config.cpp:1398
+msgid "language code"
+msgstr "语言代码"
+
+#: common/config.cpp:1400
+msgid "deprecated, use lang instead"
+msgstr ""
+
+#: common/config.cpp:1402
+msgid "location of local language data files"
+msgstr ""
+
+#: common/config.cpp:1404
+msgid "base name of the main dictionary to use"
+msgstr "要使用的主词典的基名"
+
+#: common/config.cpp:1408
+msgid "set module name"
+msgstr "设置模块名称"
+
+#: common/config.cpp:1410
+msgid "search order for modules"
+msgstr "搜索模块的顺序"
+
+#: common/config.cpp:1412
+msgid "enable Unicode normalization"
+msgstr ""
+
+#: common/config.cpp:1414
+msgid "Unicode normalization required for current lang"
+msgstr ""
+
+#. TRANSLATORS: the values after the ':' are literal
+#. values and should not be translated.
+#: common/config.cpp:1418
+msgid "Unicode normalization form: none, nfd, nfc, comp"
+msgstr ""
+
+#: common/config.cpp:1420
+msgid "avoid lossy conversions when normalization"
+msgstr ""
+
+#: common/config.cpp:1422
+msgid "personal configuration file"
+msgstr "个人配置文件"
+
+#: common/config.cpp:1425
+msgid "personal dictionary file name"
+msgstr "个人词典文件名"
+
+#: common/config.cpp:1428
+msgid "prefix directory"
+msgstr "前缀目录"
+
+#: common/config.cpp:1430
+msgid "replacements list file name"
+msgstr ""
+
+#: common/config.cpp:1433
+msgid "consider run-together words legal"
+msgstr ""
+
+#: common/config.cpp:1435
+msgid "maximum number that can be strung together"
+msgstr ""
+
+#: common/config.cpp:1437
+msgid "minimal length of interior words"
+msgstr ""
+
+#: common/config.cpp:1439
+msgid "save replacement pairs on save all"
+msgstr ""
+
+#: common/config.cpp:1441
+msgid "set the prefix based on executable location"
+msgstr "根据可执行文件的位置设置前缀"
+
+#: common/config.cpp:1443
+msgid "size of the word list"
+msgstr ""
+
+#: common/config.cpp:1445
+msgid "no longer used"
+msgstr "不再使用"
+
+#: common/config.cpp:1447
+msgid "suggestion mode"
+msgstr "建议模式"
+
+#. TRANSLATORS: "sug-mode" is a literal value and should not be
+#. translated.
+#: common/config.cpp:1451
+msgid "edit distance to use, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1453
+msgid "use typo analysis, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1455
+msgid "use replacement tables, override sug-mode default"
+msgstr ""
+
+#: common/config.cpp:1457
+msgid "characters to insert when a word is split"
+msgstr ""
+
+#: common/config.cpp:1459
+msgid "use personal, replacement & session dictionaries"
+msgstr ""
+
+#: common/config.cpp:1463
+msgid "search path for word list information files"
+msgstr ""
+
+#: common/config.cpp:1465
+msgid "enable warnings"
+msgstr "允许警告"
+
+#. TRANSLATORS: It is OK if this is longer than 50 chars
+#: common/config.cpp:1475
+msgid "indicator for affix flags in word lists -- CURRENTLY IGNORED"
+msgstr ""
+
+#: common/config.cpp:1477
+msgid "use affix compression when creating dictionaries"
+msgstr ""
+
+#: common/config.cpp:1479
+msgid "remove invalid affix flags"
+msgstr ""
+
+#: common/config.cpp:1481
+msgid "attempts to clean words so that they are valid"
+msgstr ""
+
+#: common/config.cpp:1483
+msgid "compute soundslike on demand rather than storing"
+msgstr ""
+
+#: common/config.cpp:1485
+msgid "partially expand affixes for better suggestions"
+msgstr ""
+
+#: common/config.cpp:1487
+msgid "skip invalid words"
+msgstr "跳过无效单词"
+
+#: common/config.cpp:1489
+msgid "check if affix flags are valid"
+msgstr ""
+
+#: common/config.cpp:1491
+msgid "check if words are valid"
+msgstr "检查单词是否有效"
+
+#: common/config.cpp:1498
+msgid "create a backup file by appending \".bak\""
+msgstr "创建附带“.bak”的备份文件"
+
+#: common/config.cpp:1500
+msgid "use byte offsets instead of character offsets"
+msgstr "使用字节偏移量而非字符偏移量"
+
+#: common/config.cpp:1502
+msgid "create missing root/affix combinations"
+msgstr ""
+
+#: common/config.cpp:1504
+msgid "keymapping for check mode: \"aspell\" or \"ispell\""
+msgstr ""
+
+#: common/config.cpp:1506
+msgid "reverse the order of the suggest list"
+msgstr ""
+
+#: common/config.cpp:1508
+msgid "suggest possible replacements"
+msgstr ""
+
+#: common/config.cpp:1510
+msgid "time load time and suggest time in pipe mode"
+msgstr ""
+
+#: common/convert.cpp:303 common/convert.cpp:429
+#, c-format
+msgid ""
+"This could also mean that the file \"%s\" could not be opened for reading or "
+"does not exist."
+msgstr ""
+
+#: common/convert.cpp:552 common/convert.cpp:659 common/convert.cpp:705
+#, c-format
+msgid "The Unicode code point U+%04X is unsupported."
+msgstr ""
+
+#: common/convert.cpp:829
+#, c-format
+msgid "Invalid UTF-8 sequence at position %ld."
+msgstr "位置 %ld 处的 UTF-8 序列无效。"
+
+#: common/errors.cpp:27
+msgid "Operation Not Supported: %what:1"
+msgstr "不支持的操作:%what:1"
+
+#: common/errors.cpp:43
+msgid "The method \"%what:1\" is unimplemented in \"%where:2\"."
+msgstr "方法“%what:1”在“%where:2”中没有实现。"
+
+#: common/errors.cpp:51
+#, c-format
+msgid "%file:1:"
+msgstr "%file:1:"
+
+#: common/errors.cpp:59
+#, c-format
+msgid "The file \"%file:1\" can not be opened"
+msgstr "打不开文件“%file:1”"
+
+#: common/errors.cpp:67
+#, c-format
+msgid "The file \"%file:1\" can not be opened for reading."
+msgstr "无法打开文件“%file:1”进行读取。"
+
+#: common/errors.cpp:75
+#, c-format
+msgid "The file \"%file:1\" can not be opened for writing."
+msgstr "无法打开文件“%file:1”进行写入。"
+
+#: common/errors.cpp:83
+#, c-format
+msgid "The file name \"%file:1\" is invalid."
+msgstr "文件“%file:1”无效。"
+
+#: common/errors.cpp:91
+#, c-format
+msgid "The file \"%file:1\" is not in the proper format."
+msgstr "文件“%file:1”格式不正确。"
+
+#: common/errors.cpp:107
+#, c-format
+msgid "The directory \"%dir:1\" can not be opened for reading."
+msgstr "无法打开文件“%dir:1”进行读取。"
+
+#: common/errors.cpp:123
+msgid "The key \"%key:1\" is unknown."
+msgstr ""
+
+#: common/errors.cpp:131
+msgid "The value for option \"%key:1\" can not be changed."
+msgstr ""
+
+#: common/errors.cpp:139
+msgid "The key \"%key:1\" is not %accepted:2 and is thus invalid."
+msgstr ""
+
+#: common/errors.cpp:147
+msgid ""
+"The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%"
+"key:1\"."
+msgstr ""
+
+#: common/errors.cpp:163
+msgid "The key \"%key:1\" is not a string."
+msgstr ""
+
+#: common/errors.cpp:171
+msgid "The key \"%key:1\" is not an integer."
+msgstr ""
+
+#: common/errors.cpp:179
+msgid "The key \"%key:1\" is not a boolean."
+msgstr ""
+
+#: common/errors.cpp:187
+msgid "The key \"%key:1\" is not a list."
+msgstr ""
+
+#: common/errors.cpp:195
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"reset-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:203
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by an \"enable-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:211
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" "
+"or \"disable-\"."
+msgstr ""
+
+#: common/errors.cpp:219
+msgid ""
+"The key \"%key:1\" does not take any parameters when prefixed by a \"clear-"
+"\"."
+msgstr ""
+
+#: common/errors.cpp:235
+#, c-format
+msgid "The language \"%lang:1\" is not known."
+msgstr "语言“%lang:1”为未知。"
+
+#: common/errors.cpp:243
+#, c-format
+msgid "The soundslike \"%sl:2\" is not known."
+msgstr ""
+
+#: common/errors.cpp:251
+#, c-format
+msgid "The language \"%lang:1\" is not supported."
+msgstr "不支持语言“%lang:1”。"
+
+#: common/errors.cpp:259
+#, c-format
+msgid "No word lists can be found for the language \"%lang:1\"."
+msgstr ""
+
+#: common/errors.cpp:267
+#, c-format
+msgid "Expected language \"%lang:1\" but got \"%prev:2\"."
+msgstr ""
+
+#: common/errors.cpp:283
+#, c-format
+msgid "Affix '%aff:1' is corrupt."
+msgstr ""
+
+#: common/errors.cpp:291
+#, c-format
+msgid "The condition \"%cond:1\" is invalid."
+msgstr "条件“%cond:1”无效。"
+
+#: common/errors.cpp:299
+#, c-format
+msgid ""
+"The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be "
+"stripped."
+msgstr ""
+
+#: common/errors.cpp:307
+#, c-format
+msgid ""
+"The file \"%file:1\" is not in the proper format. Expected the file to be in "
+"\"%exp:2\" not \"%got:3\"."
+msgstr ""
+
+#: common/errors.cpp:323
+#, c-format
+msgid "The encoding \"%encod:1\" is not known."
+msgstr "编码“%encod:1”为未知。"
+
+#: common/errors.cpp:331
+#, c-format
+msgid "The encoding \"%encod:1\" is not supported."
+msgstr "不支持编码“%encod:1”。"
+
+#: common/errors.cpp:339
+#, c-format
+msgid "The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."
+msgstr "不支持从“%encod:1”转换到“%encod2:2”。"
+
+#: common/errors.cpp:379
+#, c-format
+msgid "The string \"%str:1\" is invalid."
+msgstr "字符串“%str:1”无效。"
+
+#: common/errors.cpp:387
+msgid "The word \"%word:1\" is invalid."
+msgstr "单词“%word:1”无效。"
+
+#: common/errors.cpp:395
+msgid "The affix flag '%aff:1' is invalid for word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:403
+msgid "The affix flag '%aff:1' can not be applied to word \"%word:2\"."
+msgstr ""
+
+#: common/errors.cpp:451
+msgid "not a version number"
+msgstr "不是版本号"
+
+#: common/errors.cpp:467
+msgid "dlopen returned \"%return:1\"."
+msgstr "dlopen 返回了“%return:1”。"
+
+#: common/errors.cpp:475
+#, c-format
+msgid "The file \"%filter:1\" does not contain any filters."
+msgstr ""
+
+#: common/errors.cpp:483
+#, c-format
+msgid "The filter \"%filter:1\" does not exist."
+msgstr ""
+
+#: common/errors.cpp:491 common/errors.cpp:587
+msgid "Confused by version control."
+msgstr ""
+
+#: common/errors.cpp:499
+msgid "Aspell version does not match filter's requirement."
+msgstr ""
+
+#: common/errors.cpp:507
+msgid "Filter option already exists."
+msgstr ""
+
+#: common/errors.cpp:515
+msgid "Use option modifiers only within named option."
+msgstr ""
+
+#: common/errors.cpp:523
+msgid "Option modifier unknown."
+msgstr ""
+
+#: common/errors.cpp:531
+msgid "Error setting filter description."
+msgstr ""
+
+#: common/errors.cpp:547
+msgid "Empty option specifier."
+msgstr ""
+
+#: common/errors.cpp:555
+#, c-format
+msgid "Option \"%option:1\" possibly specified prior to filter."
+msgstr ""
+
+#: common/errors.cpp:563
+msgid "Unknown mode description key \"%key:1\"."
+msgstr ""
+
+#: common/errors.cpp:571
+#, c-format
+msgid "Expecting \"%modekey:1\" key."
+msgstr ""
+
+#: common/errors.cpp:579
+msgid "Version specifier missing key: \"aspell\"."
+msgstr ""
+
+#: common/errors.cpp:595
+msgid "Aspell version does not match mode's requirement."
+msgstr "Aspell 版本与模式的要求不符。"
+
+#: common/errors.cpp:603
+msgid "Missing magic mode expression."
+msgstr ""
+
+#: common/errors.cpp:611
+#, c-format
+msgid "Empty extension at char %char:1."
+msgstr ""
+
+#: common/errors.cpp:619
+#, c-format
+msgid "\"%mode:1\" error"
+msgstr "“%mode:1”错误"
+
+#: common/errors.cpp:627
+#, c-format
+msgid "Unknown mode: \"%mode:1\"."
+msgstr "未知模式:“%mode:1”。"
+
+#: common/errors.cpp:635
+#, c-format
+msgid "\"%mode:1\" error while extend Aspell modes. (out of memory?)"
+msgstr ""
+
+#: common/errors.cpp:651
+#, c-format
+msgid "\"%mode:1\": no start for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:659
+#, c-format
+msgid "\"%mode:1\": no range for magic search given for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:667
+#, c-format
+msgid "\"%mode:1\": no magic expression available for magic \"%magic:2\"."
+msgstr ""
+
+#: common/errors.cpp:675
+msgid ""
+"\"%mode:1\": Magic \"%magic:2\": bad regular expression after location "
+"specifier; regexp reports: \"%regerr:3\"."
+msgstr ""
+
+#: common/errors.cpp:691
+#, c-format
+msgid "\"%expression:1\" is not a valid regular expression."
+msgstr ""
+
+#: common/posib_err.cpp:100
+msgid "Unhandled Error: "
+msgstr "无法处理的错误:"
+
+#: prog/aspell.cpp:97
+#, c-format
+msgid "Error: %s\n"
+msgstr "错误:%s\n"
+
+#: prog/aspell.cpp:102
+msgid "Error: "
+msgstr "错误:"
+
+#: prog/aspell.cpp:203
+msgid "enter Email mode."
+msgstr "进入邮件模式。"
+
+#: prog/aspell.cpp:204
+msgid "enter HTML mode."
+msgstr "进入 HTML 模式。"
+
+#: prog/aspell.cpp:205
+msgid "enter TeX mode."
+msgstr "进入 TeX 模式。"
+
+#: prog/aspell.cpp:206
+msgid "enter Nroff mode."
+msgstr "进入 Nroff 模式。"
+
+#: prog/aspell.cpp:312
+#, c-format
+msgid "Invalid Option: %s"
+msgstr "无效选项:%s"
+
+#: prog/aspell.cpp:319
+msgid " does not take any parameters."
+msgstr "不带任何参数。"
+
+#: prog/aspell.cpp:332 prog/aspell.cpp:392
+#, c-format
+msgid "You must specify a parameter for \"%s\"."
+msgstr "您必须为“%s”指定一个参数。"
+
+#: prog/aspell.cpp:381
+msgid "You must specify an action"
+msgstr "您必须指定一项操作"
+
+#: prog/aspell.cpp:389 prog/aspell.cpp:452 prog/aspell.cpp:474
+#, c-format
+msgid "Unknown Action: %s"
+msgstr "未知操作:%s"
+
+#: prog/aspell.cpp:395
+#, c-format
+msgid "Error: You must specify at least %d parameters for \"%s\".\n"
+msgstr "错误:您必须为“%2$s”提供至少“%1$d”个参数。\n"
+
+#: prog/aspell.cpp:637
+msgid "Invalid Input"
+msgstr "无效输入"
+
+#: prog/aspell.cpp:710
+#, c-format
+msgid "WARNING: Unable to enter Nroff mode: %s\n"
+msgstr "警告:无法进入 Nroff 模式:%s\n"
+
+#: prog/aspell.cpp:731
+msgid "Time to load word list: "
+msgstr ""
+
+#: prog/aspell.cpp:929
+#, c-format
+msgid "Suggestion Time: %f\n"
+msgstr "建议时间:%f\n"
+
+#: prog/aspell.cpp:972
+msgid "You must specify a file name."
+msgstr "您必须指定一个文件名。"
+
+#: prog/aspell.cpp:975
+msgid "Only one file name may be specified."
+msgstr "只可指定一个文件名。"
+
+#: prog/aspell.cpp:985
+#, c-format
+msgid "Could not open the file \"%s\" for reading"
+msgstr "无法打开文件“%s”进行读取"
+
+#: prog/aspell.cpp:998
+#, c-format
+msgid "Invalid keymapping: %s"
+msgstr ""
+
+#: prog/aspell.cpp:1020
+#, c-format
+msgid "Could not open the file \"%s\" for writing. File not saved."
+msgstr "无法打开文件“%s”进行写入。文件未保存。"
+
+#: prog/aspell.cpp:1033
+msgid "Ignore"
+msgstr "忽略"
+
+#: prog/aspell.cpp:1034
+msgid "Ignore all"
+msgstr "全部忽略"
+
+#: prog/aspell.cpp:1035
+msgid "Replace"
+msgstr "替换"
+
+#: prog/aspell.cpp:1036
+msgid "Replace all"
+msgstr "全部替换"
+
+#: prog/aspell.cpp:1037
+msgid "Add"
+msgstr "添加"
+
+#: prog/aspell.cpp:1038
+msgid "Add Lower"
+msgstr ""
+
+#: prog/aspell.cpp:1039
+msgid "Abort"
+msgstr "中止"
+
+#: prog/aspell.cpp:1040
+msgid "Exit"
+msgstr "退出"
+
+#: prog/aspell.cpp:1116
+msgid "Are you sure you want to abort (y/n)? "
+msgstr "您确定要中止吗(y/n)?"
+
+#. TRANSLATORS: The user may input any of these characters to say "yes".
+#. MUST ONLY CONSIST OF ASCII CHARACTERS.
+#: prog/aspell.cpp:1120
+msgid "Yy"
+msgstr "Yy"
+
+#: prog/aspell.cpp:1148
+msgid "With: "
+msgstr ""
+
+#: prog/aspell.cpp:1165
+msgid "Sorry that is an invalid choice!"
+msgstr "抱歉,此选择无效!"
+
+#: prog/aspell.cpp:1386
+msgid "Sorry \"filter\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1520
+msgid "Can't merge a master word list yet. Sorry."
+msgstr ""
+
+#: prog/aspell.cpp:1544
+msgid "Sorry \"create/merge personal\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1553 prog/aspell.cpp:1609
+#, c-format
+msgid "Sorry I won't overwrite \"%s\""
+msgstr ""
+
+#: prog/aspell.cpp:1600
+msgid "Sorry \"create/merge repl\" is currently unimplemented.\n"
+msgstr ""
+
+#: prog/aspell.cpp:1872
+#, c-format
+msgid "\"%s\" is not a valid flag for the \"munch-list\" command."
+msgstr ""
+
+#. TRANSLATORS: These should all be formated to fit in 80 column or
+#. less
+#: prog/aspell.cpp:2799
+msgid "Usage: aspell [options] <command>"
+msgstr "用法:aspell [选项] <命令>"
+
+#: prog/aspell.cpp:2800
+msgid "<command> is one of:"
+msgstr "<命令>是以下之一:"
+
+#: prog/aspell.cpp:2801
+msgid "  -?|usage         display a brief usage message"
+msgstr "  -?|usage         显示简明用法消息"
+
+#: prog/aspell.cpp:2802
+msgid "  help             display a detailed help message"
+msgstr "  help             显示详尽帮助消息"
+
+#: prog/aspell.cpp:2803
+msgid "  -c|check <file>  to check a file"
+msgstr "  -c|check <文件>  检查一个文件"
+
+#: prog/aspell.cpp:2804
+msgid "  -a|pipe          \"ispell -a\" compatibility mode"
+msgstr "  -a|pipe          “ispell -a”兼容模式"
+
+#: prog/aspell.cpp:2805
+msgid "  [dump] config    dumps the current configuration to stdout"
+msgstr ""
+
+#: prog/aspell.cpp:2806
+msgid "  config <key>     prints the current value of an option"
+msgstr "  config <key>     打印某个选项的当前值"
+
+#: prog/aspell.cpp:2807
+msgid "  [dump] dicts | filters | modes"
+msgstr "  [dump] dicts | filters | modes"
+
+#: prog/aspell.cpp:2808
+msgid "    lists available dictionaries / filters / filter modes"
+msgstr ""
+
+#: prog/aspell.cpp:2809
+msgid "[options] is any of the following:"
+msgstr "[选项]是以下之一:"
+
+#: prog/aspell.cpp:2822
+msgid ""
+"  list             produce a list of misspelled words from standard input"
+msgstr ""
+
+#: prog/aspell.cpp:2825
+msgid ""
+"  soundslike       returns the sounds like equivalent for each word entered"
+msgstr ""
+
+#: prog/aspell.cpp:2826
+msgid "  munch            generate possible root words and affixes"
+msgstr ""
+
+#: prog/aspell.cpp:2827
+msgid "  expand [1-4]     expands affix flags"
+msgstr ""
+
+#: prog/aspell.cpp:2828
+msgid ""
+"  clean [strict]   cleans a word list so that every line is a valid word"
+msgstr ""
+
+#: prog/aspell.cpp:2830
+msgid "  -v|version       prints a version line"
+msgstr "  -v|version       打印一行版本信息"
+
+#: prog/aspell.cpp:2831
+msgid "  munch-list [simple] [single|multi] [keep]"
+msgstr ""
+
+#: prog/aspell.cpp:2832
+msgid "    reduce the size of a word list via affix compression"
+msgstr ""
+
+#: prog/aspell.cpp:2833
+msgid "  conv <from> <to> [<norm-form>]"
+msgstr "  conv <from> <to> [<norm-form>]"
+
+#: prog/aspell.cpp:2834
+msgid "    converts from one encoding to another"
+msgstr ""
+
+#: prog/aspell.cpp:2835
+msgid "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+msgstr "  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"
+
+#: prog/aspell.cpp:2836
+msgid "    perform Unicode normalization"
+msgstr ""
+
+#: prog/aspell.cpp:2839
+msgid "  dump|create|merge master|personal|repl [<name>]"
+msgstr ""
+
+#: prog/aspell.cpp:2840
+msgid ""
+"    dumps, creates or merges a master, personal, or replacement dictionary."
+msgstr ""
+
+#. TRANSLATORS: "none", "internal" and "strict" are literal values
+#. and should not be translated.
+#: prog/aspell.cpp:2844
+msgid ""
+"  <norm-form>      normalization form to use, either none, internal, or "
+"strict"
+msgstr ""
+
+#: prog/aspell.cpp:2854
+#, c-format
+msgid ""
+"\n"
+"Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+"\n"
+msgstr ""
+
+#: prog/aspell.cpp:2888
+msgid ""
+"Available Dictionaries:\n"
+"    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+"    option.  They can also be selected indirectly via the \"lang\",\n"
+"    \"variety\", and \"size\" options.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2909
+msgid ""
+"Available Filters (and associated options):\n"
+"    Filters can be added or removed via the \"filter\" option.\n"
+msgstr ""
+
+#: prog/aspell.cpp:2916
+#, c-format
+msgid ""
+"\n"
+"  %s filter: %s\n"
+msgstr ""
+
+#. TRANSLATORS: This should be formated to fit in 80 column or less
+#: prog/aspell.cpp:2933
+msgid ""
+"Available Filter Modes:\n"
+"    Filter Modes are reconfigured combinations of filters optimized for\n"
+"    files of a specific type. A mode is selected via the \"mode\" option.\n"
+"    This will happen implicitly if Aspell is able to identify the file\n"
+"    type from the extension, and possibility the contents, of the file.\n"
+msgstr ""
+
+#: prog/check_funs.cpp:287
+msgid "Error: Stdin not a terminal."
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:774
+msgid "Enter"
+msgstr ""
+
+#: prog/check_funs.cpp:776
+msgid "Accept Changes"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:779
+msgid "Backspace"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:781
+msgid "Control-H"
+msgstr ""
+
+#: prog/check_funs.cpp:782
+msgid "Delete the previous character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:785
+msgid "Left"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:787
+msgid "Control-B"
+msgstr ""
+
+#: prog/check_funs.cpp:788
+msgid "Move Back one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:791
+msgid "Right"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:793
+msgid "Control-F"
+msgstr ""
+
+#: prog/check_funs.cpp:794
+msgid "Move Forward one space"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:797
+msgid "Home"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:799
+msgid "Control-A"
+msgstr ""
+
+#: prog/check_funs.cpp:800
+msgid "Move to the beginning of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:803
+msgid "End"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:805
+msgid "Control-E"
+msgstr ""
+
+#: prog/check_funs.cpp:806
+msgid "Move to the end of the line"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:809
+msgid "Delete"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:811
+msgid "Control-D"
+msgstr ""
+
+#: prog/check_funs.cpp:812
+msgid "Delete the next character"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:816
+msgid "Control-K"
+msgstr ""
+
+#: prog/check_funs.cpp:817
+msgid "Kill all characters to the EOL"
+msgstr ""
+
+#. TRANSLATORS: This is a literal Key.
+#: prog/check_funs.cpp:821
+msgid "Control-C"
+msgstr ""
+
+#: prog/check_funs.cpp:822
+msgid "Abort This Operation"
+msgstr ""
+
+#: modules/speller/default/language.cpp:103
+msgid "This is probably because: "
+msgstr ""
+
+#: modules/speller/default/language.cpp:110
+msgid "The required field \"name\" is missing."
+msgstr ""
+
+#: modules/speller/default/language.cpp:488
+msgid "Empty string."
+msgstr ""
+
+#: modules/speller/default/language.cpp:492
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the beginning of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:494
+#: modules/speller/default/language.cpp:503
+#, c-format
+msgid ""
+"The character '%s' (U+%02X) must be followed by an alphabetic character."
+msgstr ""
+
+#: modules/speller/default/language.cpp:496
+msgid "Does not contain any alphabetic characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:501
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear in the middle of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:508
+msgid ""
+"The character '\\r' (U+0D) may not appear at the end of a word. This "
+"probably means means that the file is using MS-DOS EOL instead of Unix EOL."
+msgstr ""
+
+#: modules/speller/default/language.cpp:511
+#, c-format
+msgid "The character '%s' (U+%02X) may not appear at the end of a word."
+msgstr ""
+
+#: modules/speller/default/language.cpp:543
+#, c-format
+msgid "Warning: Removing invalid affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:544
+#, c-format
+msgid "Warning: Removing inapplicable affix '%s' from word %s.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:674
+#, c-format
+msgid "Warning: %s Skipping string.\n"
+msgstr ""
+
+#: modules/speller/default/language.cpp:732
+msgid "The total length is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/language.cpp:736
+#, c-format
+msgid "Warning: %s Skipping word.\n"
+msgstr ""
+
+#: modules/speller/default/affix.cpp:426
+msgid "Possibly incorrect count."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:362
+msgid "Wrong endian order."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:385
+msgid "Wrong soundslike."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:391
+msgid "Wrong soundslike version."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:853
+msgid "Affix flags found in word but no affix file given."
+msgstr ""
+
+#: modules/speller/default/readonly_ws.cpp:891
+msgid ""
+"The total word length, with soundslike data, is larger than 240 characters."
+msgstr ""
+
+#: modules/speller/default/multi_ws.cpp:58
+msgid "There must be at least one \"add\" line."
+msgstr ""
+
+#: modules/speller/default/suggest.cpp:1403
+msgid "one of ultra, fast, normal, slow, or bad-spellers"
+msgstr ""
+
+#: modules/speller/default/data.cpp:404
+msgid "is not one of the allowed types"
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:241
+msgid "The personal word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:248
+msgid "The session word list is unavailable."
+msgstr ""
+
+#: modules/speller/default/speller_impl.cpp:255
+msgid "The main word list is unavailable."
+msgstr ""
+
+#: modules/filter/tex.cpp:255 modules/filter/tex.cpp:262
+msgid "a string of 'o','O','p',or 'P'"
+msgstr ""
+
+#. TRANSLATORS: Like the strings in config.cpp, all strings in *-filter.opt
+#. should be under 50 characters, begin with a lower case character and 
+#. not include any trailing punctuation marks.
+#: modules/filter/context-filter.info:7
+msgid "experimental filter for hiding delimited contexts"
+msgstr ""
+
+#: modules/filter/context-filter.info:13
+msgid "context delimiters (separated by spaces)"
+msgstr ""
+
+#: modules/filter/context-filter.info:21
+msgid "swaps visible and invisible text"
+msgstr ""
+
+#: modules/filter/email-filter.info:7
+msgid "filter for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/email-filter.info:13
+msgid "email quote characters"
+msgstr ""
+
+#: modules/filter/email-filter.info:21
+msgid "num chars that can appear before the quote char"
+msgstr ""
+
+#: modules/filter/html-filter.info:9
+msgid "filter for dealing with HTML documents"
+msgstr ""
+
+#: modules/filter/html-filter.info:15
+msgid "HTML attributes to always check"
+msgstr ""
+
+#: modules/filter/html-filter.info:21
+msgid "HTML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/nroff-filter.info:7
+msgid "filter for dealing with Nroff documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:9
+msgid "filter for dealing with generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:15
+msgid "SGML attributes to always check"
+msgstr ""
+
+#: modules/filter/sgml-filter.info:20
+msgid "SGML tags to always skip the contents of"
+msgstr ""
+
+#: modules/filter/tex-filter.info:7
+msgid "filter for dealing with TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/tex-filter.info:15
+msgid "check TeX comments"
+msgstr ""
+
+#: modules/filter/tex-filter.info:21
+msgid "TeX commands"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:7
+msgid "filter for dealing with Texinfo documents"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:13
+msgid "Texinfo commands to ignore the parameters of"
+msgstr ""
+
+#: modules/filter/texinfo-filter.info:41
+msgid "Texinfo environments to ignore"
+msgstr ""
+
+#: modules/filter/url-filter.info:7
+msgid "filter to skip URL like constructs"
+msgstr ""
+
+#: modules/filter/modes/ccpp.amf:8
+msgid "mode for checking C++ comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/comment.amf:5
+msgid "mode to check any lines starting with a #"
+msgstr ""
+
+#: modules/filter/modes/email.amf:5
+msgid "mode for skipping quoted text in email messages"
+msgstr ""
+
+#: modules/filter/modes/html.amf:10
+msgid "mode for checking HTML documents"
+msgstr ""
+
+#: modules/filter/modes/none.amf:5
+msgid "mode to disable all filters"
+msgstr ""
+
+#: modules/filter/modes/nroff.amf:7
+msgid "mode for checking Nroff documents"
+msgstr ""
+
+#: modules/filter/modes/perl.amf:8
+msgid "mode for checking Perl comments and string literals"
+msgstr ""
+
+#: modules/filter/modes/sgml.amf:8
+msgid "mode for checking generic SGML/XML documents"
+msgstr ""
+
+#: modules/filter/modes/tex.amf:7
+msgid "mode for checking TeX/LaTeX documents"
+msgstr ""
+
+#: modules/filter/modes/texinfo.amf:7
+msgid "mode for checking Texinfo documents"
+msgstr ""
+
+#: modules/filter/modes/url.amf:5
+msgid "mode to skip URL like constructs (default mode)"
+msgstr ""
diff --git a/prog/Makefile.in b/prog/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/prog/aspell.cpp b/prog/aspell.cpp
new file mode 100644 (file)
index 0000000..41f8f85
--- /dev/null
@@ -0,0 +1,2948 @@
+// This file is part of The New Aspell Copyright (C)
+// 2002,2003,2004,2011 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find it at
+// http://www.gnu.org/.
+
+//
+// NOTE: This program currently uses a very ugly mix of the internal
+//       API and the external C interface.  The eventual goal is to
+//       use only the external C++ interface, however, the external
+//       C++ interface is currently incomplete.  The C interface is
+//       used in some places because without the strings will not get
+//       converted properly when the encoding is not the same as the
+//       internal encoding used by Aspell.
+// 
+
+#include <ctype.h>
+#include "settings.h"
+
+#ifdef USE_LOCALE
+# include <locale.h>
+#endif
+
+#ifdef HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+
+#include "aspell.h"
+
+#ifdef USE_FILE_INO
+# include <sys/types.h>
+# include <sys/stat.h>
+# include <unistd.h>
+# include <fcntl.h>
+#endif
+
+#include "asc_ctype.hpp"
+#include "check_funs.hpp"
+#include "config.hpp"
+#include "convert.hpp"
+#include "document_checker.hpp"
+#include "enumeration.hpp"
+#include "errors.hpp"
+#include "file_util.hpp"
+#include "fstream.hpp"
+#include "info.hpp"
+#include "iostream.hpp"
+#include "posib_err.hpp"
+#include "speller.hpp"
+#include "stack_ptr.hpp"
+#include "string_enumeration.hpp"
+#include "string_map.hpp"
+#include "word_list.hpp"
+
+#include "string_list.hpp"
+#include "speller_impl.hpp"
+#include "data.hpp"
+
+#include "hash-t.hpp"
+#include "hash_fun.hpp"
+
+#include "gettext.h"
+
+using namespace acommon;
+
+using aspeller::Conv;
+
+// action functions declarations
+
+void print_ver();
+void print_help(bool verbose = false);
+void config();
+
+void check();
+void pipe();
+void convt();
+void normlz();
+void filter();
+void list();
+void dicts();
+void modes();
+void filters();
+
+void clean();
+void master();
+void personal();
+void repl();
+void soundslike();
+void munch();
+void expand();
+void combine();
+void munch_list();
+void dump_affix();
+
+void print_error(ParmString msg)
+{
+  CERR.printf(_("Error: %s\n"), msg.str());
+}
+
+void print_error(ParmString msg, ParmString str)
+{
+  CERR.put(_("Error: "));
+  CERR.printf(msg.str(), str.str());
+  CERR.put('\n');
+}
+
+#define EXIT_ON_ERR(command) \
+  do{PosibErrBase pe(command);\
+  if(pe.has_err()){print_error(pe.get_err()->mesg); exit(1);}\
+  } while(false)
+#define EXIT_ON_ERR_SET(command, type, var)\
+  type var;\
+  do{PosibErr< type > pe(command);\
+  if(pe.has_err()){print_error(pe.get_err()->mesg); exit(1);}\
+  else {var=pe.data;}\
+  } while(false)
+#define BREAK_ON_ERR(command) \
+  do{PosibErrBase pe(command);\
+  if(pe.has_err()){print_error(pe.get_err()->mesg); break;}\
+  } while(false)
+#define BREAK_ON_ERR_SET(command, type, var)\
+  type var;\
+  do{PosibErr< type > pe(command);\
+  if(pe.has_err()){print_error(pe.get_err()->mesg); break;}\
+  else {var=pe.data;}\
+  } while(false)
+
+
+/////////////////////////////////////////////////////////
+//
+// Command line options functions and classes
+// (including main)
+//
+
+typedef Vector<String> Args;
+typedef Config         Options;
+enum Action {do_create, do_merge, do_dump, do_test, do_other};
+
+Args              args;
+StackPtr<Options> options;
+Action            action  = do_other;
+
+struct PossibleOption {
+  const char * name;
+  char         abrv;
+  int          num_arg;
+  bool         is_command;
+};
+
+#define OPTION(name,abrv,num)         {name,abrv,num,false}
+#define COMMAND(name,abrv,num)        {name,abrv,num,true}
+#define ISPELL_COMP(abrv,num)         {"",abrv,num,false}
+
+const PossibleOption possible_options[] = {
+  OPTION("master",           'd', 1),
+  OPTION("personal",         'p', 1),
+  OPTION("ignore",           'W', 1),
+  OPTION("lang",             'l', 1),
+  OPTION("backup",           'b', 0),
+  OPTION("dont-backup",      'x', 0),
+  OPTION("run-together",     'C', 0),
+  OPTION("dont-run-together",'B', 0),
+  OPTION("guess",            'm', 0),
+  OPTION("dont-guess",       'P', 0),
+  
+  COMMAND("usage",     '?',  0),
+  COMMAND("help",      '\0', 0),
+  COMMAND("version",   'v',  0),
+  COMMAND("config",    '\0', 0),
+  COMMAND("dicts",     '\0', 0),
+  COMMAND("check",     'c',  0),
+  COMMAND("pipe",      'a',  0),
+  COMMAND("list",      '\0', 0),
+  COMMAND("conv",      '\0', 2),
+  COMMAND("norm",      '\0', 1),
+  COMMAND("filter",    '\0', 0),
+  COMMAND("soundslike",'\0', 0),
+  COMMAND("munch",     '\0', 0),
+  COMMAND("expand",    '\0', 0),
+  COMMAND("combine",   '\0', 0),
+  COMMAND("munch-list",'\0', 0),
+  COMMAND("clean",     '\0', 0),
+  COMMAND("filters",   '\0', 0),
+  COMMAND("modes",     '\0', 0),
+
+  COMMAND("dump",   '\0', 1),
+  COMMAND("create", '\0', 1),
+  COMMAND("merge",  '\0', 1),
+
+  ISPELL_COMP('S',0), ISPELL_COMP('w',1), ISPELL_COMP('T',1),
+
+  {"",'\0'}, {"",'\0'}
+};
+
+const PossibleOption * possible_options_end = possible_options + sizeof(possible_options)/sizeof(PossibleOption) - 2;
+
+struct ModeAbrv {
+  char abrv;
+  const char * mode;
+  const char * desc;
+};
+static const ModeAbrv mode_abrvs[] = {
+  {'e', "mode=email", N_("enter Email mode.")},
+  {'H', "mode=html",  N_("enter HTML mode.")},
+  {'t', "mode=tex",   N_("enter TeX mode.")},
+  {'n', "mode=nroff", N_("enter Nroff mode.")}
+};
+
+static const ModeAbrv *  mode_abrvs_end = mode_abrvs + 4;
+
+const PossibleOption * find_option(char c) {
+  const PossibleOption * i = possible_options;
+  while (i != possible_options_end && i->abrv != c) 
+    ++i;
+  return i;
+}
+
+static inline bool str_equal(const char * begin, const char * end, 
+                            const char * other) 
+{
+  while(begin != end && *begin == *other)
+    ++begin, ++other;
+  return (begin == end && *other == '\0');
+}
+
+static const PossibleOption * find_option(const char * begin, const char * end) {
+  const PossibleOption * i = possible_options;
+  while (i != possible_options_end 
+        && !str_equal(begin, end, i->name))
+    ++i;
+  return i;
+}
+
+static const PossibleOption * find_option(const char * str) {
+  const PossibleOption * i = possible_options;
+  while (i != possible_options_end 
+        && !strcmp(str, i->name) == 0)
+    ++i;
+  return i;
+}
+
+static void line_buffer() {
+#ifndef WIN32
+  // set up stdin and stdout to be line buffered
+  assert(setvbuf(stdin, 0, _IOLBF, 0) == 0); 
+  assert(setvbuf(stdout, 0, _IOLBF, 0) == 0);
+#endif
+}
+
+Conv dconv;
+Conv uiconv;
+
+int main (int argc, const char *argv[]) 
+{
+  options = new_config(); // this needs to be here becuase of a bug
+                          // with static initlizers on Darwin.
+#ifdef USE_LOCALE
+  setlocale (LC_ALL, "");
+#endif
+  aspell_gettext_init();
+
+  options->set_committed_state(false);
+
+  if (argc == 1) {print_help(); return 0;}
+
+  int i = 1;
+  const PossibleOption * o;
+  const char           * parm;
+
+  //
+  // process command line options by setting the appropriate options
+  // in "options" and/or pushing non-options onto "argv"
+  //
+  PossibleOption other_opt = OPTION("",'\0',0);
+  String option_name;
+  while (i != argc) {
+    if (argv[i][0] == '-') {
+      bool have_parm = false;
+      if (argv[i][1] == '-') {
+       // a long arg
+       const char * c = argv[i] + 2;
+       while(*c != '=' && *c != '\0') ++c;
+       o = find_option(argv[i] + 2, c);
+       if (o == possible_options_end) {
+         option_name.assign(argv[i] + 2, c - argv[i] - 2);
+          other_opt.name    = option_name.c_str();
+          other_opt.num_arg = -1;
+          o = &other_opt;
+       }
+       if (*c == '=') {have_parm = true; ++c;}
+       parm = c;
+      } else {
+       // a short arg
+       const ModeAbrv * j = mode_abrvs;
+       while (j != mode_abrvs_end && j->abrv != argv[i][1]) ++j;
+       if (j == mode_abrvs_end) {
+         o = find_option(argv[i][1]);
+         if (argv[i][1] == 'v' && argv[i][2] == 'v')
+           // Hack for -vv
+           parm = argv[i] + 3;
+         else
+           parm = argv[i] + 2;
+       } else { // mode option
+         other_opt.name = "mode";
+         other_opt.num_arg = 1;
+         o = &other_opt;
+         parm = j->mode + 5;
+       }
+        if (*parm) have_parm = true;
+      }
+      if (o == possible_options_end) {
+       print_error(_("Invalid Option: %s"), argv[i]);
+       return 1;
+      }
+      int num_parms;
+      if (o->num_arg == 0) {
+        num_parms = 0;
+       if (parm[0] != '\0') {
+         print_error(_(" does not take any parameters."), 
+                     String(argv[i], parm - argv[i]));
+         return 1;
+       }
+       i += 1;
+      } else if (have_parm) {
+        num_parms = 1;
+        i += 1;
+      } else if (i + 1 == argc || argv[i+1][0] == '-') {
+        if (o->num_arg == -1) {
+          num_parms = 0;
+          i += 1;
+        } else {
+          print_error(_("You must specify a parameter for \"%s\"."), argv[i]);
+          return 1;
+        }
+      } else {
+        num_parms = o->num_arg;
+        parm = argv[i + 1];
+        i += 2;
+      }
+      if (o->is_command) {
+       args.push_back(o->name);
+       if (o->num_arg == 1)
+         args.push_back(parm);
+      } else if (o->name[0] != '\0') {
+        Config::Entry * entry = new Config::Entry;
+        entry->key = o->name;
+        entry->value = parm;
+        entry->need_conv = true;
+        if (num_parms == -1) {
+          entry->place_holder = args.size();
+          args.push_back(parm);
+        }
+        options->set(entry);
+      }
+    } else {
+      args.push_back(argv[i]);
+      i += 1;
+    }
+  }
+
+  options->read_in_settings();
+
+  const char * codeset = 0;
+#ifdef HAVE_LANGINFO_CODESET
+  codeset = nl_langinfo(CODESET);
+  if (ascii_encoding(*options, codeset)) codeset = 0;
+#endif
+
+// #ifdef USE_LOCALE
+//   if (!options->have("encoding") && codeset)
+//     EXIT_ON_ERR(options->replace("encoding", codeset));
+// #endif
+
+  Vector<int> to_remove;
+  EXIT_ON_ERR(options->commit_all(&to_remove, codeset));
+  for (int i = to_remove.size() - 1; i >= 0; --i) {
+    args.erase(args.begin() + to_remove[i]);
+  }
+
+  if (args.empty()) {
+    print_error(_("You must specify an action"));
+    return 1;
+  }
+
+  String action_str = args.front();
+  args.pop_front();
+  const PossibleOption * action_opt = find_option(action_str.str());
+  if (!action_opt->is_command) {
+    print_error(_("Unknown Action: %s"),  action_str);
+    return 1;
+  } else if (action_opt->num_arg == 1 && args.empty()) {
+    print_error(_("You must specify a parameter for \"%s\"."), action_str);
+    return 1;
+  } else if (action_opt->num_arg > (int)args.size()) {
+    CERR.printf(_("Error: You must specify at least %d parameters for \"%s\".\n"), 
+                action_opt->num_arg, action_str.str());
+    return 1;
+  }
+
+  //
+  // perform the requested action
+  //
+  if (action_str == "usage")
+    print_help();
+  else if (action_str == "help")
+    print_help(true);
+  else if (action_str == "version")
+    print_ver();
+  else if (action_str == "config")
+    config();
+  else if (action_str == "dicts")
+    dicts();
+  else if (action_str == "check")
+    check();
+  else if (action_str == "pipe")
+    pipe();
+  else if (action_str == "list")
+    list();
+  else if (action_str == "conv")
+    convt();
+  else if (action_str == "norm")
+    normlz();
+  else if (action_str == "filter")
+    filter();
+  else if (action_str == "soundslike")
+    soundslike();
+  else if (action_str == "munch")
+    munch();
+  else if (action_str == "expand")
+    expand();
+  else if (action_str == "combine")
+    combine();
+  else if (action_str == "munch-list")
+    munch_list();
+  else if (action_str == "clean")
+    clean();
+  else if (action_str == "filters")
+    filters();
+  else if (action_str == "modes")
+    modes();
+  else if (action_str == "dump")
+    action = do_dump;
+  else if (action_str == "create")
+    action = do_create;
+  else if (action_str == "merge")
+    action = do_merge;
+  else
+    abort(); // this should not happen
+
+  if (action != do_other) {
+    if (args.empty()) {
+      print_error(_("Unknown Action: %s"),  action_str);
+      return 1;
+    }
+    String what_str = args.front();
+    args.pop_front();
+    if (what_str == "config")
+      config();
+    else if (what_str == "dicts")
+      dicts();
+    else if (what_str == "filters")
+      filters();
+    else if (what_str == "modes")
+      modes();
+    else if (what_str == "master")
+      master();
+    else if (what_str == "personal")
+      personal();
+    else if (what_str == "repl")
+      repl();
+    else if (what_str == "affix")
+      dump_affix();
+    else {
+      print_error(_("Unknown Action: %s"),
+                 String(action_str + " " + what_str));
+      return 1;
+    }
+  }
+
+  return 0;
+
+}
+
+
+/////////////////////////////////////////////////////////
+//
+// Action Functions
+//
+//
+
+  
+static Convert * setup_conv(const aspeller::Language * lang,
+                                      Config * config)
+{
+  if (config->retrieve("encoding") != "none") {
+    PosibErr<Convert *> pe = new_convert_if_needed(*config,
+                                                   lang->charmap(),
+                                                   config->retrieve("encoding"),
+                                                   NormTo);
+    if (pe.has_err()) {print_error(pe.get_err()->mesg); exit(1);}
+    return pe.data;
+  } else {
+    return 0;
+  }
+}
+static Convert * setup_conv(Config * config,
+                            const aspeller::Language * lang)
+{
+  if (config->retrieve("encoding") != "none") {
+    PosibErr<Convert *> pe = new_convert_if_needed(*config,
+                                                   config->retrieve("encoding"),
+                                                   lang->charmap(),
+                                                   NormFrom);
+    if (pe.has_err()) {print_error(pe.get_err()->mesg); exit(1);}
+    return pe.data;
+  } else {
+    return 0;
+  }
+}
+
+void setup_display_conv()
+{
+  const char * gettext_enc = 0;
+  const char * env_enc = 0;
+  String doc_enc = options->retrieve("encoding");
+  String enc;
+#ifdef ENABLE_NLS
+  gettext_enc = bind_textdomain_codeset("aspell", 0);
+  if (ascii_encoding(*options,gettext_enc)) gettext_enc = 0;
+#endif
+#ifdef HAVE_LANGINFO_CODESET
+  env_enc = nl_langinfo(CODESET);
+  if (ascii_encoding(*options, env_enc)) env_enc = 0;
+#endif
+  if (gettext_enc && env_enc && strcmp(gettext_enc,env_enc) != 0) 
+  {
+    fputs(("Error: bind_textdomain_codeset != nl_langinfo(CODESET)\n"), stderr);
+    exit(-1);
+  }
+  if (gettext_enc)
+    enc = gettext_enc;
+  else if (env_enc)
+    enc = env_enc;
+  else
+    enc = doc_enc;
+
+  EXIT_ON_ERR(dconv.setup(*options, doc_enc, enc, NormNone));
+  EXIT_ON_ERR(uiconv.setup(*options, enc, doc_enc, NormNone));
+}
+
+
+///////////////////////////
+//
+// config
+//
+
+void config ()
+{
+  if (args.size() == 0) {
+    load_all_filters(options);
+    options->write_to_stream(COUT);
+  } else {
+    EXIT_ON_ERR_SET(options->retrieve_any(args[0]), String, value);
+    COUT << value << "\n";
+  }
+}
+
+///////////////////////////
+//
+// dicts
+//
+
+void dicts() 
+{
+  const DictInfoList * dlist = get_dict_info_list(options);
+
+  StackPtr<DictInfoEnumeration> dels(dlist->elements());
+
+  const DictInfo * entry;
+
+  while ( (entry = dels->next()) != 0) 
+    puts(entry->name);
+}
+
+///////////////////////////
+//
+// list available (filters/filter modes)
+//
+
+void list_available(PosibErr<StringPairEnumeration *> (*fun)(Config *))
+{
+  EXIT_ON_ERR_SET(fun(options), StringPairEnumeration *, els);
+  StringPair sp;
+  while (!els->at_end()) {
+    sp = els->next();
+    printf("%-14s %s\n", sp.first, gt_(sp.second));
+  }
+  delete els;
+}
+
+void filters()
+{
+  load_all_filters(options);
+  list_available(available_filters);
+}
+
+void modes()
+{
+  list_available(available_filter_modes);
+}
+
+///////////////////////////
+//
+// pipe
+//
+
+// precond: strlen(str) > 0
+char * trim_wspace (char * str)
+{
+  int last = strlen(str) - 1;
+  while (asc_isspace(str[0])) {
+    ++str;
+    --last;
+  }
+  while (last > 0 && asc_isspace(str[last])) {
+    --last;
+  }
+  str[last + 1] = '\0';
+  return str;
+}
+
+bool get_word_pair(char * line, char * & w1, char * & w2)
+{
+  w2 = strchr(line, ',');
+  if (!w2) {
+    print_error(_("Invalid Input"));
+    return false;
+  }
+  *w2 = '\0';
+  ++w2;
+  w1 = trim_wspace(line);
+  w2 = trim_wspace(w2);
+  return true;
+}
+
+void print_elements(const AspellWordList * wl) {
+  AspellStringEnumeration * els = aspell_word_list_elements(wl);
+  int count = 0;
+  const char * w;
+  String line;
+  while ( (w = aspell_string_enumeration_next(els)) != 0 ) {
+    ++count;
+    line += w;
+    line += ", ";
+  }
+  line.resize(line.size() - 2);
+  COUT.printf("%u: %s\n", count, line.c_str());
+}
+
+struct StatusFunInf 
+{
+  aspeller::SpellerImpl * real_speller;
+  Conv oconv;
+  bool verbose;
+  StatusFunInf(Convert * c) : oconv(c) {}
+};
+
+void status_fun(void * d, Token, int correct)
+{
+  StatusFunInf * p = static_cast<StatusFunInf *>(d);
+  if (p->verbose && correct) {
+    const CheckInfo * ci = p->real_speller->check_info();
+    if (ci->compound)
+      COUT.put("-\n");
+    else if (ci->pre_flag || ci->suf_flag)
+      COUT.printf("+ %s\n", p->oconv(ci->word.str()));
+    else
+      COUT.put("*\n");
+  }
+}
+
+DocumentChecker * new_checker(AspellSpeller * speller, 
+                             StatusFunInf & status_fun_inf) 
+{
+  EXIT_ON_ERR_SET(new_document_checker(reinterpret_cast<Speller *>(speller)),
+                 StackPtr<DocumentChecker>, checker);
+  checker->set_status_fun(status_fun, &status_fun_inf);
+  return checker.release();
+}
+
+#define BREAK_ON_SPELLER_ERR\
+  do {if (aspell_speller_error(speller)) {\
+    print_error(aspell_speller_error_message(speller)); break;\
+  } } while (false)
+
+void pipe() 
+{
+  line_buffer();
+
+  bool terse_mode = true;
+  bool do_time = options->retrieve_bool("time");
+  bool suggest = options->retrieve_bool("suggest");
+  bool include_guesses = options->retrieve_bool("guess");
+  clock_t start,finish;
+
+  if (!options->have("mode") && !options->have("filter")) {
+    PosibErrBase err(options->replace("mode", "nroff"));
+    if (err.has_err()) 
+      CERR.printf(_("WARNING: Unable to enter Nroff mode: %s\n"),
+                  err.get_err()->mesg);
+  }
+
+  start = clock();
+  
+  AspellCanHaveError * ret 
+    = new_aspell_speller(reinterpret_cast<AspellConfig *>(options.get()));
+  if (aspell_error(ret)) {
+    print_error(aspell_error_message(ret));
+    exit(1);
+  }
+  AspellSpeller * speller = to_aspell_speller(ret);
+  aspeller::SpellerImpl * real_speller = reinterpret_cast<aspeller::SpellerImpl *>(speller);
+  Config * config = real_speller->config();
+  Conv iconv(setup_conv(config, &real_speller->lang()));
+  Conv oconv(setup_conv(&real_speller->lang(), config));
+  MBLen mb_len;
+  if (!config->retrieve_bool("byte-offsets")) 
+    mb_len.setup(*config, config->retrieve("encoding"));
+  if (do_time)
+    COUT << _("Time to load word list: ")
+         << (clock() - start)/(double)CLOCKS_PER_SEC << "\n";
+  StatusFunInf status_fun_inf(setup_conv(&real_speller->lang(), config));
+  status_fun_inf.real_speller = real_speller;
+  bool & print_star = status_fun_inf.verbose;
+  print_star = true;
+  StackPtr<DocumentChecker> checker(new_checker(speller, status_fun_inf));
+  int c;
+  const char * w;
+  CharVector buf;
+  char * line;
+  char * line0;
+  char * word;
+  char * word2;
+  int    ignore;
+  PosibErrBase err;
+
+  print_ver();
+
+  for (;;) {
+    buf.clear();
+    fflush(stdout);
+    while (c = getchar(), c != '\n' && c != EOF)
+      buf.push_back(static_cast<char>(c));
+    buf.push_back('\n'); // always add new line so strlen > 0
+    buf.push_back('\0');
+    line = buf.data();
+    ignore = 0;
+    switch (line[0]) {
+    case '\n':
+      if (c != EOF) continue;
+      else          break;
+    case '*':
+      word = trim_wspace(line + 1);
+      aspell_speller_add_to_personal(speller, word, -1);
+      BREAK_ON_SPELLER_ERR;
+      break;
+    case '&':
+      word = trim_wspace(line + 1);
+      aspell_speller_add_to_personal
+       (speller, 
+        real_speller->to_lower(word), -1);
+      BREAK_ON_SPELLER_ERR;
+      break;
+    case '@':
+      word = trim_wspace(line + 1);
+      aspell_speller_add_to_session(speller, word, -1);
+      BREAK_ON_SPELLER_ERR;
+      break;
+    case '#':
+      aspell_speller_save_all_word_lists(speller);
+      BREAK_ON_SPELLER_ERR;
+      break;
+    case '+':
+      word = trim_wspace(line + 1);
+      err = config->replace("mode", word);
+      if (err.get_err())
+       config->replace("mode", "tex");
+      reload_filters(real_speller);
+      checker.del();
+      checker = new_checker(speller, status_fun_inf);
+      break;
+    case '-':
+      config->remove("filter");
+      reload_filters(real_speller);
+      checker.del();
+      checker = new_checker(speller, status_fun_inf);
+      break;
+    case '~':
+      break;
+    case '!':
+      terse_mode = true;
+      print_star = false;
+      break;
+    case '%':
+      terse_mode = false;
+      print_star = true;
+      break;
+    case '$':
+      if (line[1] == '$') {
+       switch(line[2]) {
+       case 'r':
+         switch(line[3]) {
+         case 'a':
+           if (get_word_pair(line + 4, word, word2))
+             aspell_speller_store_replacement(speller, word, -1, word2, -1);
+           break;
+         }
+         break;
+       case 'c':
+         switch (line[3]) {
+         case 's':
+           if (get_word_pair(line + 4, word, word2))
+             BREAK_ON_ERR(err = config->replace(word, word2));
+            if (strcmp(word,"suggest") == 0)
+              suggest = config->retrieve_bool("suggest");
+            else if (strcmp(word,"time") == 0)
+              do_time = config->retrieve_bool("time");
+            else if (strcmp(word,"guess") == 0)
+              include_guesses = config->retrieve_bool("guess");
+           break;
+         case 'r':
+           word = trim_wspace(line + 4);
+           BREAK_ON_ERR_SET(config->retrieve(word), String, ret);
+            COUT.printl(ret);
+           break;
+         }
+         break;
+       case 'p':
+         switch (line[3]) {
+         case 'p':
+           print_elements(aspell_speller_personal_word_list(speller));
+           break;
+         case 's':
+           print_elements(aspell_speller_session_word_list(speller));
+           break;
+         }
+         break;
+       case 'l':
+         COUT.printl(config->retrieve("lang"));
+         break;
+       }
+       break;
+      } else {
+       // continue on (no break)
+      }
+    case '^':
+      ignore = 1;
+    default:
+      line0 = line;
+      line += ignore;
+      checker->process(line, strlen(line));
+      while (Token token = checker->next_misspelling()) {
+       word = line + token.offset;
+       word[token.len] = '\0';
+        const char * cword = iconv(word);
+        String guesses, guess;
+        const CheckInfo * ci = real_speller->check_info();
+        aspeller::CasePattern casep 
+          = real_speller->lang().case_pattern(cword);
+        while (ci) {
+          guess.clear();
+          if (ci->pre_add && ci->pre_add[0])
+            guess.append(ci->pre_add, ci->pre_add_len).append('+');
+          guess.append(ci->word);
+          if (ci->pre_strip_len > 0) 
+            guess.append('-').append(ci->word.str(), ci->pre_strip_len);
+          if (ci->suf_strip_len > 0) 
+            guess.append('-').append(ci->word.str() + ci->word.size() - ci->suf_strip_len, 
+                                     ci->suf_strip_len);
+          if (ci->suf_add && ci->suf_add[0])
+            guess.append('+').append(ci->suf_add, ci->suf_add_len);
+          real_speller->lang().fix_case(casep, guess.data(), guess.data());
+          guesses << ", " << oconv(guess.str());
+          ci = ci->next;
+        }
+       start = clock();
+        const AspellWordList * suggestions = 0;
+        if (suggest) 
+          suggestions = aspell_speller_suggest(speller, word, -1);
+       finish = clock();
+        unsigned offset = mb_len(line0, token.offset + ignore);
+       if (suggestions && !aspell_word_list_empty(suggestions)) 
+        {
+          COUT.printf("& %s %u %u:", word, 
+                      aspell_word_list_size(suggestions), offset);
+         AspellStringEnumeration * els 
+           = aspell_word_list_elements(suggestions);
+         if (options->retrieve_bool("reverse")) {
+           Vector<String> sugs;
+           sugs.reserve(aspell_word_list_size(suggestions));
+           while ( ( w = aspell_string_enumeration_next(els)) != 0)
+             sugs.push_back(w);
+           Vector<String>::reverse_iterator i = sugs.rbegin();
+           while (true) {
+              COUT.printf(" %s", i->c_str());
+             ++i;
+             if (i == sugs.rend()) break;
+              COUT.put(',');
+           }
+         } else {
+           while ( ( w = aspell_string_enumeration_next(els)) != 0) {
+              COUT.printf(" %s%s", w, 
+                          aspell_string_enumeration_at_end(els) ? "" : ",");
+           }
+         }
+         delete_aspell_string_enumeration(els);
+          if (include_guesses)
+            COUT.put(guesses);
+         COUT.put('\n');
+       } else {
+          if (guesses.empty())
+            COUT.printf("# %s %u\n", word, offset);
+          else
+            COUT.printf("? %s 0 %u: %s\n", word, offset,
+                        guesses.c_str() + 2);
+       }
+       if (do_time)
+          COUT.printf(_("Suggestion Time: %f\n"), 
+                      (finish-start)/(double)CLOCKS_PER_SEC);
+      }
+      COUT.put('\n');
+    }
+    if (c == EOF) break;
+  }
+
+  delete_aspell_speller(speller);
+}
+
+///////////////////////////
+//
+// check
+//
+
+enum UserChoice {None, Ignore, IgnoreAll, Replace, ReplaceAll, 
+                Add, AddLower, Exit, Abort};
+
+struct Mapping {
+  char primary[9];
+  UserChoice reverse[256];
+  void to_aspell();
+  void to_ispell();
+  char & operator[] (UserChoice c) {return primary[c];}
+  UserChoice & operator[] (char c) 
+    {return reverse[static_cast<unsigned char>(c)];}
+};
+
+void abort_check();
+
+void setup_display_conv();
+
+void check()
+{
+  String file_name;
+  String new_name;
+  FILE * in = 0;
+  FILE * out = 0;
+  Mapping mapping;
+  bool changed = false;
+
+  if (args.size() == 0) {
+    print_error(_("You must specify a file name."));
+    exit(-1);
+  } else if (args.size() > 1) {
+    print_error(_("Only one file name may be specified."));
+    exit(-1);
+  }
+  
+  file_name = args[0];
+  new_name = file_name;
+  new_name += ".new";
+
+  in = fopen(file_name.c_str(), "r");
+  if (!in) {
+    print_error(_("Could not open the file \"%s\" for reading"), file_name);
+    exit(-1);
+  }
+    
+  if (!options->have("mode"))
+    EXIT_ON_ERR(set_mode_from_extension(options, file_name));
+    
+  String m = options->retrieve("keymapping");
+  if (m == "aspell")
+    mapping.to_aspell();
+  else if (m == "ispell")
+    mapping.to_ispell();
+  else {
+    print_error(_("Invalid keymapping: %s"), m);
+    exit(-1);
+  }
+
+  AspellCanHaveError * ret 
+    = new_aspell_speller(reinterpret_cast<AspellConfig *>(options.get()));
+  if (aspell_error(ret)) {
+    print_error(aspell_error_message(ret));
+    exit(1);
+  }
+
+#ifdef USE_FILE_INO
+  {
+    struct stat st;
+    fstat(fileno(in), &st);
+    int fd = open(new_name.c_str(), O_WRONLY | O_CREAT | O_TRUNC, st.st_mode);
+    if (fd >= 0) out = fdopen(fd, "w");
+  }
+#else
+  out = fopen(new_name.c_str(), "w");
+#endif
+  if (!out) {
+    print_error(_("Could not open the file \"%s\" for writing. File not saved."), file_name);
+    exit(-1);
+  }
+
+  setup_display_conv();
+
+  AspellSpeller * speller = to_aspell_speller(ret);
+
+  state = new CheckerString(speller,in,out,64);
+  word_choices = new Choices;
+
+  menu_choices = new Choices;
+  menu_choices->push_back(Choice(mapping[Ignore],     _("Ignore")));
+  menu_choices->push_back(Choice(mapping[IgnoreAll],  _("Ignore all")));
+  menu_choices->push_back(Choice(mapping[Replace],    _("Replace")));
+  menu_choices->push_back(Choice(mapping[ReplaceAll], _("Replace all")));
+  menu_choices->push_back(Choice(mapping[Add],        _("Add")));
+  menu_choices->push_back(Choice(mapping[AddLower],   _("Add Lower")));
+  menu_choices->push_back(Choice(mapping[Abort],      _("Abort")));
+  menu_choices->push_back(Choice(mapping[Exit],       _("Exit")));
+
+  String word0, new_word;
+  Vector<String> sug_con;
+  StackPtr<StringMap> replace_list(new_string_map());
+  const char * w;
+
+  begin_check();
+
+  while (state->next_misspelling()) {
+
+    char * word = state->get_real_word(word0);
+
+    //
+    // check if it is in the replace list
+    //
+
+    if ((w = replace_list->lookup(word)) != 0) {
+      state->replace(w);
+      continue;
+    }
+
+    //
+    // print the line with the misspelled word highlighted;
+    //
+
+    display_misspelled_word();
+
+    //
+    // print the suggestions and menu choices
+    //
+
+    const AspellWordList * suggestions = aspell_speller_suggest(speller, word, -1);
+    AspellStringEnumeration * els = aspell_word_list_elements(suggestions);
+    sug_con.resize(0);
+    while (sug_con.size() != 10 
+           && (w = aspell_string_enumeration_next(els)) != 0)
+      sug_con.push_back(w);
+    delete_aspell_string_enumeration(els);
+
+    // disable suspend
+    unsigned int suggestions_size = sug_con.size();
+    unsigned int suggestions_mid = suggestions_size / 2;
+    if (suggestions_size % 2) suggestions_mid++; // if odd
+    word_choices->resize(0);
+    for (unsigned int j = 0; j != suggestions_mid; ++j) {
+      word_choices->push_back(Choice('0' + j+1, sug_con[j]));
+      if (j + suggestions_mid != suggestions_size) 
+        word_choices
+          ->push_back(Choice(j+suggestions_mid+1 == 10 
+                             ? '0' 
+                             : '0' + j+suggestions_mid+1,
+                             sug_con[j+suggestions_mid]));
+    }
+    //enable suspend
+    display_menu();
+
+  choice_prompt:
+
+    prompt("? ");
+
+  choice_loop:
+
+    //
+    // Handle the users choice
+    //
+
+    int choice;
+    get_choice(choice);
+      
+    if (choice == '0') choice = '9' + 1;
+    
+    switch (mapping[choice]) {
+    case Exit:
+      goto exit_loop;
+    case Abort: {
+      prompt(_("Are you sure you want to abort (y/n)? "));
+      get_choice(choice);
+      /* TRANSLATORS: The user may input any of these characters to say "yes".
+         MUST ONLY CONSIST OF ASCII CHARACTERS. */
+      const char * yes_characters = _("Yy");
+      if (strchr(yes_characters, choice) != 0)
+        goto abort_loop;
+      goto choice_prompt;
+    }
+    case Ignore:
+      break;
+    case IgnoreAll:
+      aspell_speller_add_to_session(speller, word, -1);
+      break;
+    case Add:
+      aspell_speller_add_to_personal(speller, word, -1);
+      break;
+    case AddLower: 
+    {
+      // Emulate the c function add_to_personal, but add extra step to
+      // convert word to lowercase.  Yeah its a bit of a hack.
+      Speller * sp = reinterpret_cast<Speller *>(speller);
+      sp->temp_str_0.clear();
+      sp->to_internal_->convert(word, -1, sp->temp_str_0);
+      char * lower = sp->to_lower(sp->temp_str_0.mstr());
+      PosibErr<void> ret = sp->add_to_personal(MutableString(lower));
+      sp->err_.reset(ret.release_err());
+      break;
+    }
+    case Replace:
+    case ReplaceAll:
+      // the string new_word is in the encoding of the document
+      prompt(_("With: "));
+      get_line(new_word);
+      if (new_word.size() == 0)
+        goto choice_prompt;
+      if (new_word[0] >= '1' && new_word[0] < (char)suggestions_size + '1')
+        new_word = sug_con[new_word[0]-'1'];
+      state->replace(new_word);
+      changed = true;
+      if (mapping[choice] == ReplaceAll && (strcmp(word,new_word.str()) != 0))
+        replace_list->replace(word, new_word);
+      break;
+    default:
+      // the replasments are in the encoding of the document
+      if (choice >= '1' && choice < (char)suggestions_size + '1') { 
+        state->replace(sug_con[choice-'1']);
+        changed = true;
+      } else {
+        error(_("Sorry that is an invalid choice!"));
+        goto choice_loop;
+      }
+    }
+  }
+exit_loop:
+  {
+    aspell_speller_save_all_word_lists(speller);
+    state.del(); // to close the file handles
+    delete_aspell_speller(speller);
+
+    if (changed) {
+
+      bool keep_backup = options->retrieve_bool("backup");
+      if (keep_backup) {
+        String backup_name = file_name;
+        backup_name += ".bak";
+        rename_file(file_name, backup_name);
+      }
+      rename_file(new_name, file_name);
+
+    } else {
+
+      remove_file(new_name);
+
+    }
+    
+    //end_check();
+    
+    return;
+  }
+abort_loop:
+  {
+    state.del(); // to close the file handles
+    delete_aspell_speller(speller);
+
+    remove_file(new_name);
+
+    return;
+  }
+}
+
+#define U (unsigned char)
+
+void Mapping::to_aspell() 
+{
+  memset(this, 0, sizeof(Mapping));
+  primary[Ignore    ] = 'i';
+  reverse[U'i'] = Ignore;
+  reverse[U' '] = Ignore;
+  reverse[U'\n'] = Ignore;
+
+  primary[IgnoreAll ] = 'I';
+  reverse[U'I'] = IgnoreAll;
+
+  primary[Replace   ] = 'r';
+  reverse[U'r'] = Replace;
+
+  primary[ReplaceAll] = 'R';
+  reverse[U'R'] = ReplaceAll;
+
+  primary[Add       ] = 'a';
+  reverse[U'A'] = Add;
+  reverse[U'a'] = Add;
+
+  primary[AddLower  ] = 'l';
+  reverse[U'L'] = AddLower;
+  reverse[U'l'] = AddLower;
+
+  primary[Abort     ] = 'b';
+  reverse[U'b'] = Abort;
+  reverse[U'B'] = Abort;
+  reverse[control('c')] = Abort;
+
+  primary[Exit      ] = 'x';
+  reverse[U'x'] = Exit;
+  reverse[U'X'] = Exit;
+}
+
+void Mapping::to_ispell() 
+{
+  memset(this, 0, sizeof(Mapping));
+  primary[Ignore    ] = ' ';
+  reverse[U' '] = Ignore;
+  reverse[U'\n'] = Ignore;
+
+  primary[IgnoreAll ] = 'A';
+  reverse[U'A'] = IgnoreAll;
+  reverse[U'a'] = IgnoreAll;
+
+  primary[Replace   ] = 'R';
+  reverse[U'R'] = ReplaceAll;
+  reverse[U'r'] = Replace;
+
+  primary[ReplaceAll] = 'E';
+  reverse[U'E'] = ReplaceAll;
+  reverse[U'e'] = Replace;
+
+  primary[Add       ] = 'I';
+  reverse[U'I'] = Add;
+  reverse[U'i'] = Add;
+
+  primary[AddLower  ] = 'U';
+  reverse[U'U'] = AddLower;
+  reverse[U'u'] = AddLower;
+
+  primary[Abort     ] = 'Q';
+  reverse[U'Q'] = Abort;
+  reverse[U'q'] = Abort;
+  reverse[control('c')] = Abort;
+
+  primary[Exit      ] = 'X';
+  reverse[U'X'] = Exit;
+  reverse[U'x'] = Exit;
+}
+#undef U
+
+///////////////////////////
+//
+// list
+//
+
+void list()
+{
+  AspellCanHaveError * ret 
+    = new_aspell_speller(reinterpret_cast<AspellConfig *>(options.get()));
+  if (aspell_error(ret)) {
+    print_error(aspell_error_message(ret));
+    exit(1);
+  }
+  AspellSpeller * speller = to_aspell_speller(ret);
+
+  state = new CheckerString(speller,stdin,0,64);
+
+  String word;
+  while (state->next_misspelling()) {
+
+    state->get_real_word(word);
+    COUT.printl(word);
+
+  }
+  
+  state.del(); // to close the file handles
+  delete_aspell_speller(speller);
+}
+
+///////////////////////////
+//
+// convt
+//
+
+void convt()
+{
+  Conv conv;
+  String buf1, buf2;
+  const char * from = fix_encoding_str(args[0], buf1);
+  const char * to   = fix_encoding_str(args[1], buf2);
+  Normalize norm = NormNone;
+  if (strcmp(from, "utf-8") == 0 && strcmp(to, "utf-8") != 0)
+    norm = NormFrom;
+  else if (strcmp(from, "utf-8") != 0 && strcmp(to, "utf-8") == 0)
+    norm = NormTo;
+  if (args.size() > 2) {
+    for (String::iterator i = args[2].begin(); i != args[2].end(); ++i)
+      *i = asc_tolower(*i);
+    options->replace("normalize", "true");
+    if (args[2] == "none")
+      options->replace("normalize", "false");
+    else if (args[2] == "internal")
+      options->replace("norm-strict", "false");
+    else if (args[2] == "strict")
+      options->replace("norm-strict", "true");
+    else
+      EXIT_ON_ERR(options->replace("norm-form", args[2]));
+  }
+  EXIT_ON_ERR(conv.setup(*options, args[0], args[1], norm));
+  String line;
+  while (CIN.getline(line))
+    COUT.printl(conv(line));
+}
+
+void normlz()
+{
+  options->replace("normalize", "true");
+  const char * from = args.size() < 3 ? "utf-8" : args[0].str();
+  const char * to   = args.size() < 3 ? "utf-8" : args[2].str();
+  const char * intr = args.size() < 3 ? args[0].str() : args[1].str();
+  String * form = (args.size() == 2   ? &args[1] 
+                   : args.size() == 4 ? &args[3]
+                   : 0);
+  Normalize decode_norm = NormTo;
+  if (form) {
+    for (String::iterator i = form->begin(); i != form->end(); ++i)
+      *i = asc_tolower(*i);
+    if (*form == "internal") {
+      options->replace("norm-strict", "false");
+      decode_norm = NormNone;
+    } else if (*form == "strict") {
+      options->replace("norm-strict", "true");
+      decode_norm = NormNone;
+    }
+    if (decode_norm == NormTo) EXIT_ON_ERR(options->replace("norm-form", *form));
+  }
+  Conv encode,decode;
+  EXIT_ON_ERR(encode.setup(*options, from, intr, NormFrom));
+  EXIT_ON_ERR(decode.setup(*options, intr, to, decode_norm));
+  String line;
+  while (CIN.getline(line))
+    COUT.printl(decode(encode(line)));
+}
+
+///////////////////////////
+//
+// filter
+//
+
+void filter()
+{
+  //assert(setvbuf(stdin, 0, _IOLBF, 0) == 0);
+  //assert(setvbuf(stdout, 0, _IOLBF, 0) == 0);
+  CERR << _("Sorry \"filter\" is currently unimplemented.\n");
+  exit(3);
+}
+
+
+///////////////////////////
+//
+// print_ver
+//
+
+void print_ver () {
+  COUT.put("@(#) International Ispell Version 3.1.20 " 
+           "(but really Aspell " VERSION ")\n");
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// These functions use implementation details of the default speller
+// module
+//
+
+class IstreamEnumeration : public StringEnumeration {
+  FStream * in;
+  String data;
+public:
+  IstreamEnumeration(FStream & i) : in(&i) {}
+  IstreamEnumeration * clone() const {
+    return new IstreamEnumeration(*this);
+  }
+  void assign (const StringEnumeration * other) {
+    *this = *static_cast<const IstreamEnumeration *>(other);
+  }
+  Value next() {
+    if (!in->getline(data)) return 0;
+    else return data.c_str();
+  }
+  bool at_end() const {return *in;}
+};
+
+///////////////////////////
+//
+// clean
+//
+
+void clean()
+{
+  using namespace aspeller;
+
+  bool strict = args.size() != 0 && args[0] == "strict";
+  
+  Config * config = options;
+
+  CachePtr<Language> lang;
+  find_language(*config);
+  PosibErr<Language *> res = new_language(*config);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  IstreamEnumeration in(CIN);
+  WordListIterator wl_itr(&in, lang, &CERR);
+  config->replace("validate-words", "true");
+  config->replace("validate-affixes", "true");
+  if (!strict)
+    config->replace("clean-words", "true");
+  config->replace("clean-affixes", "true");
+  config->replace("skip-invalid-words", "true");
+  wl_itr.init(*config);
+  Conv oconv, oconv2;
+  if (config->have("encoding")) {
+    EXIT_ON_ERR(oconv.setup(*config, lang->charmap(), config->retrieve("encoding"), NormTo));
+    oconv2.setup(*config, lang->charmap(), config->retrieve("encoding"), NormTo);
+  } else {
+    EXIT_ON_ERR(oconv.setup(*config, lang->charmap(), lang->data_encoding(), NormTo));
+    oconv2.setup(*config, lang->charmap(), lang->data_encoding(), NormTo);
+  }
+  while (wl_itr.adv()) {
+    if (*wl_itr->aff.str) 
+      COUT.printf("%s/%s\n", oconv(wl_itr->word), oconv2(wl_itr->aff));
+    else
+      COUT.printl(oconv(wl_itr->word));
+  }
+}
+
+///////////////////////////
+//
+// master
+//
+
+void dump (aspeller::Dict * lws, Convert * conv) 
+{
+  using namespace aspeller;
+
+  switch (lws->basic_type) {
+  case Dict::basic_dict:
+    {
+      Dictionary * ws = static_cast<Dictionary *>(lws);
+      StackPtr<WordEntryEnumeration> els(ws->detailed_elements());
+      WordEntry * wi;
+      while (wi = els->next(), wi) {
+        wi->write(COUT,*ws->lang(), conv);
+        COUT << '\n';
+      }
+    }
+    break;
+  case Dict::multi_dict:
+    {
+      StackPtr<DictsEnumeration> els(lws->dictionaries());
+      Dict * ws;
+      while (ws = els->next(), ws) 
+       dump (ws, conv);
+    }
+    break;
+  default:
+    abort();
+  }
+}
+
+void master () {
+  using namespace aspeller;
+
+  if (args.size() != 0) {
+    options->replace("master", args[0].c_str());
+  }
+
+  Config * config = options;
+
+  if (action == do_create) {
+    
+    find_language(*config);
+    EXIT_ON_ERR(create_default_readonly_dict
+                (new IstreamEnumeration(CIN),
+                 *config));
+
+  } else if (action == do_merge) {
+    
+    print_error(_("Can't merge a master word list yet. Sorry."));
+    exit (1);
+    
+  } else if (action == do_dump) {
+
+    EXIT_ON_ERR_SET(add_data_set(config->retrieve("master-path"), *config), Dict *, d);
+    StackPtr<Convert> conv(setup_conv(d->lang(), config));
+    dump(d, conv);
+  }
+}
+
+///////////////////////////
+//
+// personal
+//
+
+void personal () {
+  using namespace aspeller;
+
+  if (args.size() != 0) {
+    EXIT_ON_ERR(options->replace("personal", args[0]));
+  }
+  options->replace("module", "aspeller");
+  if (action == do_create || action == do_merge) {
+    CERR << _("Sorry \"create/merge personal\" is currently unimplemented.\n");
+    exit(3);
+
+    // FIXME
+#if 0
+    StackPtr<Speller> speller(new_speller(options));
+
+    if (action == do_create) {
+      if (file_exists(speller->config()->retrieve("personal-path"))) {
+        print_error(_("Sorry I won't overwrite \"%s\""), 
+                   speller->config()->retrieve("personal-path"));
+        exit (1);
+      }
+      speller->personal_word_list().data->clear();
+    }
+
+    String word;
+    while (CIN >> word) 
+      speller->add_to_personal(word);
+
+    speller->save_all_word_lists();
+#endif
+
+  } else { // action == do_dump
+
+    // FIXME: This is currently broken
+
+    Config * config = options;
+    Dictionary * per = new_default_writable_dict();
+    per->load(config->retrieve("personal-path"), *config);
+    StackPtr<WordEntryEnumeration> els(per->detailed_elements());
+    StackPtr<Convert> conv(setup_conv(per->lang(), config));
+
+    WordEntry * wi;
+    while (wi = els->next(), wi) {
+      wi->write(COUT,*(per->lang()), conv);
+      COUT.put('\n');
+    }
+    delete per;
+  }
+}
+
+///////////////////////////
+//
+// repl
+//
+
+void repl() {
+  using namespace aspeller;
+
+  if (args.size() != 0) {
+    options->replace("repl", args[0].c_str());
+  }
+
+  if (action == do_create || action == do_merge) {
+
+    CERR << _("Sorry \"create/merge repl\" is currently unimplemented.\n");
+    exit(3);
+
+    // FIXME
+#if 0
+    SpellerImpl speller(options);
+
+    if (action == do_create) {
+      if (file_exists(speller->config()->retrieve("repl-path"))) {
+        print_error(_("Sorry I won't overwrite \"%s\""),
+                   speller->config()->retrieve("repl-path"));
+        exit (1);
+      }
+      speller->personal_repl().clear();
+    }
+    
+    try {
+      String word,repl;
+
+      while (true) {
+       get_word_pair(word,repl,':');
+       EXIT_ON_ERR(speller->store_repl(word,repl,false));
+      }
+
+    } catch (bad_cin) {}
+
+    EXIT_ON_ERR(speller->personal_repl().synchronize());
+
+#endif
+
+  } else if (action == do_dump) {
+
+    // FIXME: This is currently broken
+
+    ReplacementDict * repl = new_default_replacement_dict();
+    repl->load(options->retrieve("repl-path"), *options);
+    StackPtr<WordEntryEnumeration> els(repl->detailed_elements());
+    
+    WordEntry * rl = 0;
+    WordEntry words;
+    Conv conv(setup_conv(repl->lang(), options));
+    while ((rl = els->next())) {
+      repl->repl_lookup(*rl, words);
+      do {
+        COUT << conv(rl->word) << ": " << conv(words.word) << "\n";
+      } while (words.adv());
+    }
+    delete repl;
+  }
+}
+
+//////////////////////////
+//
+// soundslike
+//
+
+void soundslike() {
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word;
+  String sl;
+  line_buffer();
+  while (CIN.getline(word)) {
+    const char * w = iconv(word);
+    lang->LangImpl::to_soundslike(sl, w);
+    printf("%s\t%s\n", word.str(), oconv(sl));
+  }
+}
+
+//////////////////////////
+//
+// munch
+//
+
+void munch() 
+{
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word;
+  GuessInfo gi;
+  line_buffer();
+  while (CIN.getline(word)) {
+    lang->munch(iconv(word), &gi);
+    COUT << word;
+    for (const aspeller::CheckInfo * ci = gi.head; ci; ci = ci->next)
+    {
+      COUT << ' ' << oconv(ci->word) << '/';
+      if (ci->pre_flag != 0) COUT << oconv(static_cast<char>(ci->pre_flag));
+      if (ci->suf_flag != 0) COUT << oconv(static_cast<char>(ci->suf_flag));
+    }
+    COUT << '\n';
+  }
+}
+
+//////////////////////////
+//
+// expand
+//
+
+void expand() 
+{
+  int level = 1;
+  if (args.size() > 0)
+    level = atoi(args[0].c_str()); //FIXME: More verbose
+  int limit = INT_MAX;
+  if (args.size() > 1)
+    limit = atoi(args[1].c_str());
+  
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word, buf;
+  ObjStack exp_buf;
+  WordAff * exp_list;
+  line_buffer();
+  while (CIN.getline(word)) {
+    buf = word;
+    char * w = iconv(buf.mstr(), buf.size());
+    char * af = strchr(w, '/');
+    size_t s;
+    if (af != 0) {
+      s = af - w;
+      *af++ = '\0';
+    } else {
+      s = strlen(w);
+      af = w + s;
+    }
+    exp_buf.reset();
+    exp_list = lang->expand(w, af, exp_buf, limit);
+    if (level <= 2) {
+      if (level == 2) 
+        COUT << word << ' ';
+      WordAff * p = exp_list;
+      while (p) {
+        COUT << oconv(p->word);
+        if (limit < INT_MAX && p->aff[0]) COUT << '/' << oconv((const char *)p->aff);
+        p = p->next;
+        if (p) COUT << ' ';
+      }
+      COUT << '\n';
+    } else if (level >= 3) {
+      double ratio = 0;
+      if (level >= 4) {
+        for (WordAff * p = exp_list; p; p = p->next)
+          ratio += p->word.size;
+        ratio /= exp_list->word.size; // it is assumed the first
+                                      // expansion is just the root
+      }
+      for (WordAff * p = exp_list; p; p = p->next) {
+        COUT << word << ' ' << oconv(p->word);
+        if (limit < INT_MAX && p->aff[0]) COUT << '/' << oconv((const char *)p->aff);
+        if (level >= 4) COUT.printf(" %f\n", ratio);
+        else COUT << '\n';
+      }
+    }
+  }
+}
+
+//////////////////////////
+//
+// combine
+//
+
+static void combine_aff(String & aff, const char * app)
+{
+  for (; *app; ++app) {
+    if (!memchr(aff.c_str(),*app,aff.size()))
+      aff.push_back(*app);
+  }
+}
+
+static void print_wordaff(const String & base, const String & affs, Conv & oconv)
+{
+  if (base.empty()) return;
+  COUT << oconv(base);
+  if (affs.empty())
+    COUT << '\n';
+  else
+    COUT.printf("/%s\n", oconv(affs));
+}
+
+static bool lower_equal(aspeller::Language * l, ParmString a, ParmString b)
+{
+  if (a.size() != b.size()) return false;
+  if (l->to_lower(a[0]) != l->to_lower(b[0])) return false;
+  return memcmp(a + 1, b + 1, a.size() - 1) == 0;
+}
+
+void combine()
+{
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word;
+  String base;
+  String affs;
+  line_buffer();
+  while (CIN.getline(word)) {
+    word = iconv(word);
+
+    CharVector buf; buf.append(word.c_str(), word.size() + 1);
+    char * w = buf.data();
+    char * af = strchr(w, '/');
+    size_t s;
+    if (af != 0) {
+      s = af - w;
+      *af++ = '\0';
+    } else {
+      s = strlen(w);
+      af = w + s;
+    }
+
+    if (lower_equal(lang, base, w)) {
+      if (lang->is_lower(base.str())) {
+        combine_aff(affs, af);
+      } else {
+        base = w;
+        combine_aff(affs, af);
+      }
+    } else {
+      print_wordaff(base, affs, oconv);
+      base = w;
+      affs = af;
+    }
+
+  }
+  print_wordaff(base, affs, oconv);
+}
+
+//////////////////////////
+//
+// munch list
+//
+
+void munch_list_simple();
+void munch_list_complete(bool, bool);
+
+void munch_list()
+{
+  bool simple = false;
+  bool multi = false;
+  bool simplify = true;
+
+  for (unsigned i = 0; i < args.size(); ++i) {
+    if (args[i] == "simple")      simple = true;
+    else if (args[i] == "single") multi = false;
+    else if (args[i] == "multi")  multi = true;
+    else if (args[i] == "keep")   simplify = false;
+    else 
+    {
+      print_error(_("\"%s\" is not a valid flag for the \"munch-list\" command."),
+                  args[i]);
+      exit(1);
+    }
+  }
+  if (simple)
+    munch_list_simple();
+  else
+    munch_list_complete(multi, simplify);
+}
+
+//
+// munch list (simple version)
+//
+
+// This version works the same way as the myspell "munch" program.
+// However, because the results depends on the hash table used and the
+// order of the word list it wonn't produce identical results.
+
+struct SML_WordEntry {
+  const char * word;
+  char * aff;
+  bool keep; // boolean
+  SML_WordEntry(const char * w = 0) : word(w), aff(0), keep(false) {}
+};
+
+struct SML_Parms {
+  typedef SML_WordEntry Value;
+  typedef const char * Key;
+  static const bool is_multi = false;
+  acommon::hash<const char *> hash;
+  bool equal(Key x, Key y) {return strcmp(x,y) == 0;}
+  Key key(const Value & v) {return v.word;}
+};
+
+typedef HashTable<SML_Parms> SML_Table;
+
+static inline void add_affix(SML_Table::iterator b, char aff)
+{
+  char * p = b->aff;
+  if (p) {while (*p) {if (*p == aff) return; ++p;}}
+  int s = p - b->aff;
+  b->aff = (char *)realloc(b->aff, s + 2);
+  b->aff[s + 0] = aff;
+  b->aff[s + 1] = '\0';
+}
+
+void munch_list_simple()
+{
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word, buf;
+  ObjStack exp_buf;
+  WordAff * exp_list;
+  GuessInfo gi;
+  SML_Table table;
+  ObjStack table_buf;
+
+  // add words to dictionary
+  while (CIN.getline(word)) {
+    buf = word;
+    char * w = iconv(buf.mstr(), buf.size());
+    char * af = strchr(w, '/');
+    size_t s;
+    if (af != 0) {
+      s = af - w;
+      *af++ = '\0';
+    } else {
+      s = strlen(w);
+      af = w + s;
+    }
+    exp_buf.reset();
+    exp_list = lang->expand(w, af, exp_buf);
+    for (WordAff * q = exp_list; q; q = q->next) {
+      table.insert(SML_WordEntry(table_buf.dup(q->word)));
+    }
+  }
+
+  // now try to munch each word in the dictionary
+  SML_Table::iterator p = table.begin();
+  SML_Table::iterator end = table.end();
+  String flags;
+  for (; p != end; ++p) 
+  {
+    const aspeller::CheckInfo * best = 0;
+    unsigned min_base_size = INT_MAX;
+    lang->munch(p->word, &gi);
+    const aspeller::CheckInfo * ci = gi.head;
+    while (ci)
+    { {
+      // check if the base word is in the dictionary
+      SML_Table::iterator b = table.find(ci->word);
+      if (b == table.end()) goto cont;
+
+      // check if all the words once expanded are in the dictionary
+      // this included the exiting flags due to pre-suf cross products
+      if (b->aff) flags = b->aff;
+      else        flags.clear();
+      if (ci->pre_flag != 0) flags += ci->pre_flag;
+      if (ci->suf_flag != 0) flags += ci->suf_flag;
+      exp_buf.reset();
+      exp_list = lang->expand(ci->word, flags, exp_buf);
+      for (WordAff * q = exp_list; q; q = q->next) {
+        if (!table.have(q->word)) goto cont;
+      }
+
+      // the base word and flags are valid, now keep the one with the
+      // smallest base word
+      if (ci->word.size() < min_base_size) {
+        min_base_size = ci->word.size();
+        best = ci;
+      }
+
+    } cont:
+      ci = ci->next;
+    }
+    // now add the base to the keep list if one exists
+    // otherwise just keep the orignal word
+    if (best) {
+      SML_Table::iterator b = table.find(best->word);
+      assert(b != table.end());
+      if (best->pre_flag) add_affix(b, best->pre_flag);
+      if (best->suf_flag) add_affix(b, best->suf_flag);
+      b->keep = true;
+    } else {
+      p->keep = true;
+    }
+  }
+
+  // Print the entries in the table marked as "to keep"
+  p = table.begin();
+  for (; p != end; ++p) 
+  {
+    if (p->keep) {
+      COUT << oconv(p->word);
+      if (p->aff) {
+        COUT << '/' << oconv(p->aff);
+      }
+      COUT << '\n';
+    }
+  }
+
+  p = table.begin();
+  for (; p != end; ++p) 
+  {
+    if (p->aff) free(p->aff);
+    p->aff = 0;
+  }
+}
+
+//
+// munch list (complete version)
+//
+//
+// This version will produce a smaller list than the simple version.
+// It is very close to the optimum result. 
+//
+
+//
+// Hash table to store the words
+//
+
+struct CML_Entry {
+  const char * word;
+  char * aff;
+  CML_Entry * parent;
+  CML_Entry * next;
+  int rank;
+  CML_Entry(const char * w = 0) : word(w), aff(0), parent(0), next(0), rank(0) {}
+};
+
+struct CML_Parms {
+  typedef CML_Entry Value;
+  typedef const char * Key;
+  static const bool is_multi = true;
+  acommon::hash<const char *> hash;
+  bool equal(Key x, Key y) {return strcmp(x,y) == 0;}
+  Key key(const Value & v) {return v.word;}
+};
+
+typedef HashTable<CML_Parms> CML_Table;
+
+//
+// add an affix to a word but keep the prefixes and suffixes separate
+//
+
+static void add_affix(CML_Table::iterator b, char aff, bool prefix)
+{
+  char * p = b->aff;
+  int s = 3;
+  if (p) {
+    while (*p) {
+      if (*p == aff) return; 
+      ++p;
+    }
+    s = (p - b->aff) + 2;
+  }
+  char * tmp = (char *)malloc(s);
+  p = b->aff;
+  char * q = tmp;
+  if (p) {while (*p != '/') *q++ = *p++;}
+  if (prefix) *q++ = aff;
+  *q++ = '/';
+  if (p) {p++; while (*p != '\0') *q++ = *p++;}
+  if (!prefix) *q++ = aff;
+  *q++ = '\0';
+  assert(q - tmp == s);
+  if (b->aff) free(b->aff);
+  b->aff = tmp;
+}
+
+//
+// Standard disjoint set algo with union by rank and path compression
+//
+
+static void link(CML_Entry * x, CML_Entry * y)
+{
+  if (x == y) return;
+  if (x->rank > y->rank) {
+    y->parent = x;
+  } else {
+    x->parent = y;
+    if (x->rank == y->rank) y->rank++;
+  }
+}
+
+static CML_Entry * find_set (CML_Entry * x) 
+{
+  if (x->parent)
+    return x->parent = find_set(x->parent);
+  else
+    return x;
+}
+
+//
+// Stuff to manage prefix-suffix combinations
+//
+
+struct PreSuf {
+  String pre;
+  String suf;
+  String & get(int i) {return i == 0 ? pre : suf;}
+  const String & get(int i) const {return i == 0 ? pre : suf;}
+  PreSuf() : next(0) {}
+  PreSuf * next;
+};
+
+class PreSufList {
+public:
+  PreSuf * head;
+  PreSufList() : head(0) {}
+  void add(PreSuf * to_add) {
+    to_add->next = head;
+    head = to_add;
+  }
+  void clear() {
+    while (head) {
+      PreSuf * tmp = head;
+      head = head->next;
+      delete tmp;
+    }
+  }
+  void transfer(PreSufList & other) {
+    clear();
+    head = other.head;
+    other.head = 0;
+  }
+  ~PreSufList() {
+    clear();
+  }
+};
+
+
+// Example of usage:
+//   combine(in, res, 0)
+//   Pre:  in =  [(ab, c) (ab, d) (c, de) (c, ef)]
+//   Post: res = [(ab, cd), (c, def)]
+static void combine(const PreSufList & in, PreSufList & res, int which)
+{
+  const PreSuf * i = in.head;
+  while (i) { {
+    const String & s = i->get(which);
+    for (const PreSuf * j = in.head; j != i; j = j->next) {
+      if (j->get(which) == s) goto cont;
+    }
+    PreSuf * tmp = new PreSuf;
+    tmp->pre = i->pre;
+    tmp->suf = i->suf;
+    String & b = tmp->get(!which);
+    for (const PreSuf * j = i->next; j; j = j->next) {
+      if (j->get(which) != s) continue;
+      const String & a = j->get(!which);
+      for (String::const_iterator x = a.begin(); x != a.end(); ++x) {
+        if (memchr(b.data(), *x, b.size())) continue;
+        b += *x;
+      }
+    }
+    res.add(tmp);
+  } cont:
+    i = i->next;
+  }
+}
+
+//
+// Stuff used when pruning the list of base words
+//
+
+struct Expansion {
+  const char * word;
+  char * aff; // modifying this will modify the affix entry in the hash table
+  std::vector<bool> exp;
+  std::vector<bool> orig_exp;
+};
+
+// static void dump(const Vector<Expansion *> & working, 
+//                  const Vector<CML_Table::iterator> & entries)
+// {
+//   for (unsigned i = 0; i != working.size(); ++i) {
+//     if (!working[i]) continue;
+//     CERR.printf("%s/%s ", working[i]->word, working[i]->aff);
+//     for (unsigned j = 0; j != working[i]->exp.size(); ++j) {
+//       if (working[i]->exp[j])
+//         CERR.printf("%s ", entries[j]->word);
+//     }
+//     CERR.put('\n');
+//   }
+//   CERR.put('\n');
+// }
+
+// standard set algorithms on a bit vector
+
+static bool subset(const std::vector<bool> & smaller, 
+                   const std::vector<bool> & larger)
+{
+  assert(smaller.size() == larger.size());
+  unsigned s = larger.size();
+  for (unsigned i = 0; i != s; ++i) {
+    if (smaller[i] && !larger[i]) return false;
+  }
+  return true;
+}
+
+static void merge(std::vector<bool> & x, const std::vector<bool> & y)
+{
+  assert(x.size() == y.size());
+  unsigned s = x.size();
+  for (unsigned i = 0; i != s; ++i) {
+    if (y[i]) x[i] = true;
+  }
+}
+
+static void purge(std::vector<bool> & x, const std::vector<bool> & y)
+{
+  assert(x.size() == y.size());
+  unsigned s = x.size();
+  for (unsigned i = 0; i != s; ++i) {
+    if (y[i]) x[i] = false;
+  }
+}
+
+static inline unsigned count(const std::vector<bool> & x) {
+  unsigned c = 0;
+  for (unsigned i = 0; i != x.size(); ++i) {
+    if (x[i]) ++c;
+  }
+  return c;
+}
+
+// 
+
+struct WorkingLt {
+  bool operator() (Expansion * x, Expansion * y) {
+
+    // LARGEST number of expansions
+    unsigned x_s = count(x->exp);
+    unsigned y_s = count(y->exp);
+    if (x_s != y_s) return x_s > y_s;
+
+    // SMALLEST base word
+    x_s = strlen(x->word);
+    y_s = strlen(y->word);
+    if (x_s != y_s) return x_s < y_s;
+
+    // LARGEST affix string
+    x_s = strlen(x->aff);
+    y_s = strlen(y->aff);
+    if (x_s != y_s) return x_s > y_s; 
+
+    // 
+    int cmp = strcmp(x->word, y->word);
+    if (cmp != 0) return cmp < 0;
+
+    //
+    cmp = strcmp(x->aff, y->aff);
+    return cmp < 0;
+  }
+};
+
+//
+// Finally the function that does the real work
+//
+
+void munch_list_complete(bool multi, bool simplify)
+{
+  using namespace aspeller;
+  CachePtr<Language> lang;
+  find_language(*options);
+  PosibErr<Language *> res = new_language(*options);
+  if (res.has_err()) {print_error(res.get_err()->mesg); exit(1);}
+  lang.reset(res.data);
+  Conv iconv(setup_conv(options, lang));
+  Conv oconv(setup_conv(lang, options));
+  String word, buf;
+  ObjStack exp_buf;
+  WordAff * exp_list;
+  GuessInfo gi;
+  CML_Table table;
+  ObjStack table_buf;
+
+  // add words to dictionary
+  while (CIN.getline(word)) {
+    buf = word;
+    char * w = iconv(buf.mstr(), buf.size());
+    char * af = strchr(w, '/');
+    size_t s;
+    if (af != 0) {
+      s = af - w;
+      *af++ = '\0';
+    } else {
+      s = strlen(w);
+      af = w + s;
+    }
+    exp_buf.reset();
+    exp_list = lang->expand(w, af, exp_buf);
+    for (WordAff * q = exp_list; q; q = q->next) {
+      if (!table.have(q->word)) // since it is a multi hash table
+        table.insert(CML_Entry(table_buf.dup(q->word))).first;
+    }
+  }
+
+  // Now try to munch each word in the dictionary.  This will also
+  // group the base words into disjoint sets based on there expansion.
+  CML_Table::iterator p = table.begin();
+  CML_Table::iterator end = table.end();
+  String flags;
+  for (; p != end; ++p) 
+  {
+    lang->munch(p->word, &gi, false);
+    const aspeller::CheckInfo * ci = gi.head;
+    while (ci)
+    { {
+      // check if the base word is in the dictionary
+      CML_Table::iterator b = table.find(ci->word);
+      if (b == table.end()) goto cont;
+
+      // check if all the words once expanded are in the dictionary
+      char flags[2];
+      assert(!(ci->pre_flag && ci->suf_flag));
+      if      (ci->pre_flag != 0) flags[0] = ci->pre_flag;
+      else if (ci->suf_flag != 0) flags[0] = ci->suf_flag;
+      flags[1] = '\0';
+      exp_buf.reset();
+      exp_list = lang->expand(ci->word, flags, exp_buf);
+      for (WordAff * q = exp_list; q; q = q->next) {
+        if (!table.have(q->word)) goto cont;
+      }
+
+      // all the expansions are in the dictionary now add the affix to
+      // the base word and figure out which disjoint set it belongs to
+      add_affix(b, flags[0], ci->pre_flag != 0);
+      CML_Entry * bs = find_set(&*b);
+      for (WordAff * q = exp_list; q; q = q->next) {
+        CML_Table::iterator w = table.find(q->word);
+        assert(b != table.end());
+        CML_Entry * ws = find_set(&*w);
+        link(bs,ws);
+      }
+
+    } cont:
+      ci = ci->next;
+    }
+  }
+
+  // If a base word has both prefixes and suffixes try to combine them.
+  // This can lead to multiple entries for the same base word.  If "multi"
+  // is true than include all the entries.  Otherwise, only include the
+  // one with the largest number of expansions.  This is a greedy choice
+  // that may not be optimal, but is close to it.
+  p = table.begin();
+  String pre,suf;
+  CML_Entry * extras = 0;
+  for (; p != end; ++p) 
+  {
+    pre.clear(); suf.clear();
+    if (!p->aff) continue;
+    char * s = p->aff;
+    while (*s != '/') pre += *s++;
+    ++s;
+    while (*s != '\0') suf += *s++;
+    if (pre.empty()) {
+
+      strcpy(p->aff, suf.str());
+
+    } else if (suf.empty()) {
+
+      strcpy(p->aff, pre.str());
+
+    } else {
+
+      // Try all possible combinations and keep the ones which expand
+      // to legal words.
+
+      PreSufList cross,tmp1,tmp2;
+      PreSuf * ps = 0;
+
+      for (String::iterator pi = pre.begin(); pi != pre.end(); ++pi) {
+        String::iterator si = suf.begin();
+        while (si != suf.end()) { {
+          char flags[3] = {*pi, *si, '\0'};
+          exp_buf.reset();
+          exp_list = lang->expand(p->word, flags, exp_buf);
+          for (WordAff * q = exp_list; q; q = q->next) {
+            if (!table.have(q->word)) goto cont2;
+          }
+          ps = new PreSuf;
+          ps->pre += *pi;
+          ps->suf += *si;
+          cross.add(ps);
+        } cont2:
+          ++si;
+        }
+      }
+
+      // Now combine the legal cross pairs with other ones when
+      // possible.
+
+      // final res = [ (pre, []) ([],suf),
+      //               (cross | combine first | combine second)
+      //               (cross | combine second | combine first)
+      //             | combine first
+      //             | combine second
+      //
+      // combine first [(ab, c) (ab, d) (c, de) (c, ef)]
+      //   =  [(ab, cd), (c, def)]
+      
+      combine(cross, tmp1, 0); 
+      combine(tmp1,  tmp2, 1);
+      tmp1.clear();
+      
+      combine(cross, tmp1, 1);
+      combine(tmp1,  tmp2, 0);
+      tmp1.clear();
+
+      cross.clear();
+
+      ps = new PreSuf;
+      ps->pre = pre;
+      tmp2.add(ps);
+      ps = new PreSuf;
+      ps->suf = suf;
+      tmp2.add(ps);
+
+      combine(tmp2, tmp1, 0);
+      combine(tmp1, cross, 1);
+
+      if (multi) {
+
+        // It is OK to have multiple entries with the same base word
+        // so use them all.
+
+        ps = cross.head;
+        assert(ps);
+        memcpy(p->aff, ps->pre.data(), ps->pre.size());
+        memcpy(p->aff + ps->pre.size(), ps->suf.str(), ps->suf.size() + 1);
+        
+        ps = ps->next;
+        CML_Entry * bs = find_set(&*p);
+        for (; ps; ps = ps->next) {
+          
+          CML_Entry * tmp = new CML_Entry;
+          tmp->word = p->word;
+          tmp->aff = (char *)malloc(ps->pre.size() + ps->suf.size() + 1);
+          memcpy(tmp->aff, ps->pre.data(), ps->pre.size());
+          memcpy(tmp->aff + ps->pre.size(), ps->suf.str(), ps->suf.size() + 1);
+          
+          tmp->parent = bs;
+          
+          tmp->next = extras;
+          extras = tmp;
+        }
+
+      } else {
+
+        // chose the one which has the largest number of expansions
+
+        int max_exp = 0;
+        PreSuf * best = 0;
+        String flags;
+
+        for (ps = cross.head; ps; ps = ps->next) {
+          flags  = ps->pre;
+          flags += ps->suf;
+          exp_buf.reset();
+          exp_list = lang->expand(p->word, flags, exp_buf);
+          int c = 0;
+          for (WordAff * q = exp_list; q; q = q->next) ++c;
+          if (c > max_exp) {max_exp = c; best = ps;}
+        }
+
+        memcpy(p->aff, best->pre.data(), best->pre.size());
+        memcpy(p->aff + best->pre.size(), best->suf.str(), best->suf.size() + 1);
+      }
+    }
+  }
+
+  while (extras) {
+    CML_Entry * tmp = extras;
+    extras = extras->next;
+    tmp->next = 0;
+    table.insert(*tmp);
+    delete tmp;
+  }
+
+  // Create a linked list for each disjoint set
+  p = table.begin();
+  for (; p != end; ++p) 
+  {
+    p->rank = -1;
+    CML_Entry * bs = find_set(&*p);
+    if (bs != &*p) {
+      p->next = bs->next;
+      bs->next = &*p;
+    } 
+  }
+
+  // Now process each disjoint set independently
+  p = table.begin();
+  for (; p != end; ++p) 
+  {
+    if (p->parent) continue;
+
+    Vector<CML_Table::iterator> entries;
+    Vector<Expansion> expansions;
+    Vector<Expansion *> to_keep;
+    std::vector<bool> to_keep_exp;
+    Vector<Expansion *> working;
+    Vector<unsigned> to_remove;
+
+    // First assign numbers to each unique word.  The rank field is
+    // no longer used so use it to store the number.
+    for (CML_Entry * q = &*p; q; q = q->next) {
+      CML_Table::iterator e = table.find(q->word);
+      if (e->rank == -1) {
+        e->rank = entries.size();
+        q->rank = entries.size();
+        entries.push_back(e);
+      } else {
+        q->rank = e->rank;
+      }
+      if (q->aff) {
+        Expansion tmp;
+        tmp.word = q->word;
+        tmp.aff  = q->aff;
+        expansions.push_back(tmp);
+      }
+    }
+
+    to_keep_exp.resize(entries.size());
+    //for (int i = 0; i != to_keep_exp.size(); ++i) {
+    //  printf(">>> %d %d\n", i, (int)to_keep_exp[i]);
+    //}
+
+    // Store the expansion of each base word in a bit vector and
+    // add it to the working set
+    for (Vector<Expansion>::iterator q = expansions.begin(); 
+         q != expansions.end(); 
+         ++q)
+    {
+      q->exp.resize(entries.size());
+      exp_buf.reset();
+      exp_list = lang->expand(q->word, q->aff, exp_buf);
+      for (WordAff * i = exp_list; i; i = i->next) {
+        CML_Table::iterator e = table.find(i->word);
+        assert(0 <= e->rank && e->rank < (int)entries.size());
+        q->exp[e->rank] = true;
+      }
+      q->orig_exp = q->exp;
+      working.push_back(&*q);
+    }
+    
+    unsigned prev_working_size = INT_MAX;
+
+    // This loop will repeat until the working set is empty.  This
+    // will produce optimum results in most cases.  Non optimum
+    // results may be possible if step (4) is necessary, but in
+    // practice this step is rarly necessary.
+    do {
+      prev_working_size = working.size();
+
+      // Sort the list based on WorkingLt.  This is necessary every
+      // time since the expansion list can change.
+      std::sort(working.begin(), working.end(), WorkingLt());
+
+      // (1) Eliminate any elements which are a subset of others
+      for (unsigned i = 0; i != working.size(); ++i) {
+        if (!working[i]) continue;
+        for (unsigned j = i + 1; j != working.size(); ++j) {
+          if (!working[j]) continue;
+          if (subset(working[j]->exp, working[i]->exp)) {
+            working[j] = 0;
+          }
+        }
+      }
+
+      // (2) Move any elements which expand to unique entree 
+      // into the to_keep list
+      to_remove.clear();
+      for (unsigned i = 0; i != entries.size(); ++i) {
+        int n = -1;
+        for (unsigned j = 0; j != working.size(); ++j) {
+          if (working[j] && working[j]->exp[i]) {
+            if (n == -1) n = j;
+            else         n = -2;
+          }
+        }
+        if (n >= 0) to_remove.push_back(n);
+      }
+      for (unsigned i = 0; i != to_remove.size(); ++i) {
+        unsigned n = to_remove[i];
+        if (!working[n]) continue;
+        to_keep.push_back(working[n]);
+        merge(to_keep_exp, working[n]->exp);
+        working[n] = 0;
+      }
+
+      // (3) Eliminate any elements which are a subset of all the
+      // elements in the to_keep list
+      for (unsigned i = 0; i != working.size(); ++i) {
+        if (working[i] && subset(working[i]->exp, to_keep_exp)) {
+          working[i] = 0;
+        }
+      }
+
+      // Compact the working list
+      {
+        int i = 0, j = 0;
+        while (j != (int)working.size()) {
+          if (working[j]) {
+            working[i] = working[j];
+            ++i;
+          }
+          ++j;
+        }
+        working.resize(i);
+      }
+
+      // (4) If none of the entries in working have been removed via
+      // the above methods then make a greedy choice and move the
+      // first element into the to_keep list.
+      if (working.size() > 0 && working.size() == prev_working_size)
+      {
+        to_keep.push_back(working[0]);
+        //CERR.printf("Making greedy choice! Chosing %s/%s.\n",
+        //            working[0]->word, working[0]->aff);
+        merge(to_keep_exp, working[0]->exp);
+        working.erase(working.begin(), working.begin() + 1);
+      }
+
+      // (5) Trim the expansion list for any elements left in the
+      // working set by removing the expansions that already exist in
+      // the to_keep list
+      for (unsigned i = 0; i != working.size(); ++i) {
+        purge(working[i]->exp, to_keep_exp);
+      }
+
+    } while (working.size() > 0);
+
+    if (simplify) {
+
+      // Remove unnecessary flags.  A flag is unnecessary if it does
+      // does not expand to any new words, that is words that are not
+      // already covered by an earlier entries in the list.
+
+      for (unsigned i = 0; i != to_keep.size(); ++i) {
+        to_keep[i]->exp = to_keep[i]->orig_exp;
+      }
+     
+      std::sort(to_keep.begin(), to_keep.end(), WorkingLt());
+
+      std::vector<bool> tally(entries.size());
+      std::vector<bool> backup(entries.size());
+      std::vector<bool> working(entries.size());
+      String flags;
+      
+      for (unsigned i = 0; i != to_keep.size(); ++i) {
+
+        backup = tally;
+
+        merge(tally, to_keep[i]->exp);
+
+        String flags_to_keep = to_keep[i]->aff;
+        bool something_changed;
+        do {
+          something_changed = false;
+          for (unsigned j = 0; j != flags_to_keep.size(); ++j) {
+            flags.assign(flags_to_keep.data(), j);
+            flags.append(flags_to_keep.data(j+1), 
+                         flags_to_keep.size() - (j+1));
+            working = backup;
+            exp_buf.reset();
+            exp_list = lang->expand(to_keep[i]->word, flags, exp_buf);
+            for (WordAff * q = exp_list; q; q = q->next) {
+              CML_Table::iterator e = table.find(q->word);
+              working[e->rank] = true;
+            }
+            if (working == tally) {
+              flags_to_keep = flags;
+              something_changed = true;
+              break;
+            }
+          }
+        } while (something_changed);
+
+        if (flags_to_keep != to_keep[i]->aff) {
+          memcpy(to_keep[i]->aff, flags_to_keep.str(), flags_to_keep.size() + 1);
+        }
+      }
+      
+    }
+
+    // Finally print the resulting list
+
+    //printf("XXX %d %d\n", to_keep.size(), to_keep_exp.size());
+    //for (int i = 0; i != to_keep_exp.size(); ++i) {
+    //  printf(">>> %d %d\n", i, (int)to_keep_exp[i]);
+    //}
+
+    for (unsigned i = 0; i != to_keep.size(); ++i) {
+      COUT << oconv(to_keep[i]->word);
+      if (to_keep[i]->aff[0]) {
+        COUT << '/';
+        COUT << oconv(to_keep[i]->aff);
+      }
+      COUT << '\n';
+    }
+    for (unsigned i = 0; i != to_keep_exp.size(); ++i) {
+      if (!to_keep_exp[i]) {
+        assert(!entries[i]->aff);
+        COUT.printf("%s\n", oconv(entries[i]->word));
+      }
+    }
+  }
+
+  p = table.begin();
+  for (; p != end; ++p) 
+  {
+    if (p->aff) free(p->aff);
+    p->aff = 0;
+  }
+}
+
+
+//////////////////////////
+//
+// dump affix
+//
+
+void dump_affix()
+{
+  FStream in;
+  EXIT_ON_ERR(aspeller::open_affix_file(*options, in));
+  
+  String line;
+  while (in.getline(line))
+    COUT << line << '\n';
+}
+
+
+
+///////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////
+//
+// print_help
+//
+
+void print_help_line(char abrv, char dont_abrv, const char * name, 
+                    KeyInfoType type, const char * desc, bool no_dont = false) 
+{
+  String command;
+  if (abrv != '\0') {
+    command += '-';
+    command += abrv;
+    if (dont_abrv != '\0') {
+      command += '|';
+      command += '-';
+      command += dont_abrv;
+    }
+    command += ',';
+  }
+  command += "--";
+  if (type == KeyInfoBool && !no_dont) command += "[dont-]";
+  if (type == KeyInfoList) command += "add|rem-";
+  command += name;
+  if (type == KeyInfoString || type == KeyInfoList) 
+    command += "=<str>";
+  if (type == KeyInfoInt)
+    command += "=<int>";
+  const char * tdesc = _(desc);
+  printf("  %-27s %s\n", command.c_str(), tdesc); // FIXME: consider word wrapping
+}
+
+namespace acommon {
+  PosibErr<ConfigModule *> get_dynamic_filter(Config * config, ParmStr value);
+}
+
+static const char * usage_text[] = 
+{
+  /* TRANSLATORS: These should all be formated to fit in 80 column or
+     less */
+  N_("Usage: aspell [options] <command>"),
+  N_("<command> is one of:"),
+  N_("  -?|usage         display a brief usage message"),
+  N_("  help             display a detailed help message"),
+  N_("  -c|check <file>  to check a file"),
+  N_("  -a|pipe          \"ispell -a\" compatibility mode"),
+  N_("  [dump] config    dumps the current configuration to stdout"),
+  N_("  config <key>     prints the current value of an option"),
+  N_("  [dump] dicts | filters | modes"),
+  N_("    lists available dictionaries / filters / filter modes"),
+  N_("[options] is any of the following:")
+};
+static const unsigned usage_text_size = sizeof(usage_text)/sizeof(const char *);
+
+static const char * help_text[] = 
+{
+  usage_text[0],
+  "",
+  usage_text[1],
+  usage_text[2],
+  usage_text[3],
+  usage_text[4],
+  usage_text[5],
+  N_("  list             produce a list of misspelled words from standard input"),
+  usage_text[6],
+  usage_text[7],
+  N_("  soundslike       returns the sounds like equivalent for each word entered"),
+  N_("  munch            generate possible root words and affixes"),
+  N_("  expand [1-4]     expands affix flags"),
+  N_("  clean [strict]   cleans a word list so that every line is a valid word"),
+  //N_("  filter           passes standard input through filters"),
+  N_("  -v|version       prints a version line"),
+  N_("  munch-list [simple] [single|multi] [keep]"),
+  N_("    reduce the size of a word list via affix compression"),
+  N_("  conv <from> <to> [<norm-form>]"),
+  N_("    converts from one encoding to another"),
+  N_("  norm (<norm-map> | <from> <norm-map> <to>) [<norm-form>]"),
+  N_("    perform Unicode normalization"),
+  usage_text[8],
+  usage_text[9],
+  N_("  dump|create|merge master|personal|repl [<name>]"),
+  N_("    dumps, creates or merges a master, personal, or replacement dictionary."),
+  "",
+  /* TRANSLATORS: "none", "internal" and "strict" are literal values
+     and should not be translated. */
+  N_("  <norm-form>      normalization form to use, either none, internal, or strict"),
+  "",
+  usage_text[10],
+  ""
+};
+static const unsigned help_text_size = sizeof(help_text)/sizeof(const char *);
+
+void print_help (bool verbose) {
+  load_all_filters(options);
+  if (verbose) {
+    printf(_("\n"
+             "Aspell %s.  Copyright 2000-2011 by Kevin Atkinson.\n"
+             "\n"), VERSION);
+    for (unsigned i = 0; i < help_text_size; ++i)
+      puts(gt_(help_text[i]));
+  } else {
+    for (unsigned i = 0; i < usage_text_size; ++i)
+      puts(gt_(usage_text[i]));
+  }
+  StackPtr<KeyInfoEnumeration> els(options->possible_elements(true,false));
+  const KeyInfo * k;
+  while (k = els->next(), k) {
+    if (k->desc == 0 || k->flags & KEYINFO_HIDDEN) continue;
+    if (!verbose && !(k->flags & KEYINFO_COMMON)) continue;
+    const PossibleOption * o = find_option(k->name);
+    const char * name = k->name;
+    print_help_line(o->abrv, 
+                   strncmp((o+1)->name, "dont-", 5) == 0 ? (o+1)->abrv : '\0',
+                   name, k->type, k->desc);
+    if (verbose && strcmp(name, "mode") == 0) {
+      for (const ModeAbrv * j = mode_abrvs;
+           j != mode_abrvs_end;
+           ++j)
+      {
+        print_help_line(j->abrv, '\0', j->mode, KeyInfoBool, j->desc, true);
+      }
+    }
+  }
+
+  if (verbose) {
+    //
+    putchar('\n');
+    putchar('\n');
+    puts(
+      _("Available Dictionaries:\n"
+        "    Dictionaries can be selected directly via the \"-d\" or \"master\"\n"
+        "    option.  They can also be selected indirectly via the \"lang\",\n"
+        "    \"variety\", and \"size\" options.\n"));
+    
+    const DictInfoList * dlist = get_dict_info_list(options);
+    
+    StackPtr<DictInfoEnumeration> dels(dlist->elements());
+    
+    const DictInfo * entry;
+    
+    while ( (entry = dels->next()) != 0) 
+    {
+      printf("  %s\n", entry->name);
+    }
+
+
+    //
+    putchar('\n');
+    putchar('\n');
+    fputs(
+      _("Available Filters (and associated options):\n"
+        "    Filters can be added or removed via the \"filter\" option.\n"),
+      stdout);
+    for (Vector<ConfigModule>::const_iterator m = options->filter_modules.begin();
+         m != options->filter_modules.end();
+         ++m)
+    {
+      printf(_("\n  %s filter: %s\n"), m->name, gt_(m->desc));
+      for (k = m->begin; k != m->end; ++k) {
+        const PossibleOption * o = find_option(k->name);
+        const char * name = k->name;
+        const KeyInfo * ok = options->keyinfo(name + 2);
+        if (k == ok) name += 2;
+        print_help_line(o->abrv, 
+                        strncmp((o+1)->name, "dont-", 5) == 0 ? (o+1)->abrv : '\0',
+                        name, k->type, k->desc);
+      }
+    }
+
+    //
+    putchar('\n');
+    putchar('\n');
+    puts(  
+      /* TRANSLATORS: This should be formated to fit in 80 column or less */
+      _("Available Filter Modes:\n"
+        "    Filter Modes are reconfigured combinations of filters optimized for\n"
+        "    files of a specific type. A mode is selected via the \"mode\" option.\n"
+        "    This will happen implicitly if Aspell is able to identify the file\n"
+        "    type from the extension, and possibility the contents, of the file.\n"));
+    
+    EXIT_ON_ERR_SET(available_filter_modes(options), StringPairEnumeration *, els);
+    StringPair sp;
+    while (!els->at_end()) {
+      sp = els->next();
+      printf("  %-14s %s\n", sp.first, gt_(sp.second));
+    }
+    delete els;
+  }
+}
+
diff --git a/prog/check_funs.cpp b/prog/check_funs.cpp
new file mode 100644 (file)
index 0000000..db54f3d
--- /dev/null
@@ -0,0 +1,896 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002,2011 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+/* Low level terminal interface.  This file will possible use the following
+   macros:
+   POSIX_TERMIOS
+   HAVE_LIBCURSES
+   CURSES_INCLUDE_STANDARD
+   CURSES_INCLUDE_WORKAROUND_1
+   CURSES_ONLY
+   HAVE_GETCH
+   HAVE_MBLEN
+   All these macros need to have a true value and not just be defined
+*/
+
+#include "settings.h"
+
+#ifdef DEFINE_XOPEN_SOURCE_EXTENDED
+#  define _XOPEN_SOURCE_EXTENDED 1
+#endif
+
+#ifdef CURSES_NON_POSIX
+#define CURSES_ONLY 1
+#endif
+
+#include <signal.h>
+
+#include "asc_ctype.hpp"
+#include "check_funs.hpp"
+#include "convert.hpp"
+#include "config.hpp"
+
+#include "gettext.h"
+
+using namespace acommon;
+
+StackPtr<CheckerString> state;
+const char * last_prompt = 0;
+StackPtr<Choices> word_choices;
+StackPtr<Choices> menu_choices;
+Conv null_conv;
+extern Conv dconv;
+extern Conv uiconv;
+
+#if   POSIX_TERMIOS
+
+// Posix headers
+#include <termios.h>
+#include <unistd.h>
+
+static termios new_attributes;
+static termios saved_attributes;
+
+#elif HAVE_GETCH
+
+extern "C" {int getch();}
+
+#endif
+
+#if HAVE_LIBCURSES
+
+#include CURSES_HEADER
+
+#if CURSES_INCLUDE_STANDARD
+
+#include TERM_HEADER
+
+#elif CURSES_INCLUDE_WORKAROUND_1
+
+// including <term.h> on solaris causes problems
+extern "C" {char * tigetstr(char * capname);}
+
+#endif
+
+enum MenuText {StdMenu, ReplMenu};
+static MenuText menu_text = StdMenu;
+
+static bool use_curses = true;
+static WINDOW * text_w = 0;
+static WINDOW * menu_w = 0;
+static WINDOW * choice_w = 0;
+//static int beg_x = -1;
+static int end_x = -1;
+static int max_x;
+static char * choice_text;
+static int choice_text_size;
+static int cur_x = 0;
+static int cur_y = 0;
+static volatile int last_signal = 0;
+
+#ifdef CURSES_ONLY
+
+char * tigetstr(char *) {return "";}
+
+#else
+
+static SCREEN * term;
+
+#endif
+
+#endif // HAVE_LIBCURSES
+
+#ifdef HAVE_MBLEN
+#  include <wchar.h>
+#else
+#  define mblen(x,y) (*(x) ? 1 : 0)
+#endif
+
+static void cleanup (void) {
+#if   HAVE_LIBCURSES
+  if (use_curses) {
+    endwin();
+  } else
+#endif
+  {
+#if   POSIX_TERMIOS
+    tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
+#endif
+  }
+}
+
+#if   HAVE_LIBCURSES
+
+//static void do_nothing(int) {}
+
+static void layout_screen();
+
+#ifdef CURSES_ONLY
+
+inline void handle_last_signal() {}
+
+#else
+
+static void save_state() {
+  getyx(choice_w,cur_y,cur_x);
+  choice_text_size = COLS;
+  choice_text = new char[choice_text_size];
+  for (int i = 0; i != choice_text_size; ++i) {
+    choice_text[i] = mvwinch(choice_w, 0, i) & A_CHARTEXT;
+  }
+  endwin();
+}
+
+static void restore_state() {
+  delscreen(term);
+  term = newterm(0,stdout,stdin);
+  set_term(term);
+  layout_screen();
+  display_menu();
+  display_misspelled_word();
+  wmove(choice_w,0,0);
+  if (COLS <= choice_text_size)
+    choice_text_size = COLS - 1;
+  for (int i=0; i < choice_text_size; ++i)
+    waddch(choice_w,choice_text[i]);
+  delete[] choice_text;
+  max_x = COLS - 1;
+  if (cur_x > max_x)
+    cur_x = max_x;
+  if (end_x > max_x-1)
+    end_x = max_x;
+  wmove(choice_w,cur_y,cur_x);
+  wnoutrefresh(choice_w);
+  doupdate();
+}
+
+
+static void suspend_handler(int) {
+  last_signal = SIGTSTP;
+}
+  
+static void continue_handler(int) {
+  restore_state();
+  signal(SIGTSTP, suspend_handler);
+  signal(SIGCONT,  continue_handler),
+    last_signal = 0;
+}
+
+static void resize_handler(int ) {
+  last_signal = SIGWINCH;
+}
+  
+static void resize() {
+  save_state();
+  restore_state();
+  last_signal = 0;
+}
+
+static void suspend() {
+  save_state();
+  signal(SIGTSTP, SIG_DFL);
+  raise(SIGTSTP);
+  last_signal = 0;
+}
+
+static inline void handle_last_signal() {
+  switch (last_signal) {
+  case SIGWINCH:
+    resize();
+    signal(SIGWINCH, resize_handler);
+    break;
+  case SIGTSTP:
+    suspend();
+    break;
+  }
+}
+
+#endif
+
+static void layout_screen() {
+  text_w = 0;
+  menu_w = 0;
+  choice_w = 0;
+  nonl();
+  noecho();
+  halfdelay(1);
+  keypad(stdscr, true);
+  clear();
+  int height, width;
+  getmaxyx(stdscr, height, width);
+  int text_height = height - MENU_HEIGHT - 3;
+  if (text_height >= 1) {
+    text_w = newwin(text_height, width, 0, 0);
+    scrollok(text_w,false);
+    move(text_height, 0);
+    hline((unsigned char)' '|A_REVERSE, width);
+    menu_w = newwin(MENU_HEIGHT, width, text_height+1, 0);
+    scrollok(menu_w,false);
+  }
+  if (height >= 2) {
+    move(height-2,0);
+    hline((unsigned char)' '|A_REVERSE, width);
+  }
+  choice_w = newwin(1, width, height-1, 0);
+  keypad(choice_w,true);
+  scrollok(menu_w,true);
+  wnoutrefresh(stdscr);
+}
+
+#endif
+
+void begin_check() {
+  
+  //
+  //
+  //
+#if   HAVE_LIBCURSES
+#if   CURSES_ONLY
+  use_curses=true;
+  initscr();
+#else
+  term = newterm(0,stdout,stdin);
+  if (term == 0) {
+    use_curses = false;
+  } else {
+    set_term(term);
+    if ((tigetstr(const_cast<char *>("cup") /*move*/) != 0 
+         || (tigetstr(const_cast<char *>("cuf1") /*right*/) != 0 
+             && tigetstr(const_cast<char *>("cub1") /*left*/)  != 0 
+             && tigetstr(const_cast<char *>("cuu1") /*up  */)  != 0 
+             && tigetstr(const_cast<char *>("cud1") /*down*/)  != 0))
+        && (tigetstr(const_cast<char *>("rev")) != 0))
+    {
+      use_curses = true;
+    } else {
+      use_curses = false;
+      endwin();
+      delscreen(term);
+    }
+  }
+  if (use_curses) {
+    signal(SIGWINCH, resize_handler);
+    signal(SIGTSTP,  suspend_handler);
+    signal(SIGCONT,  continue_handler);
+  }
+#endif
+  if (use_curses) {
+    layout_screen();
+    atexit(cleanup);
+  }
+#endif
+#if   POSIX_TERMIOS || (HAVE_LIBCURSES && !CURSES_ONLY)
+  if (!isatty (STDIN_FILENO)) {
+    puts(_("Error: Stdin not a terminal."));
+    exit (-1);
+  }
+  
+  //
+  // Save the terminal attributes so we can restore them later.
+  //
+  tcgetattr (STDIN_FILENO, &saved_attributes);
+  atexit(cleanup);
+  
+  //
+  // Set up the terminal to read in a line character at a time
+  //
+  tcgetattr (STDIN_FILENO, &new_attributes);
+#if POSIX_TERMIOS
+  new_attributes.c_lflag &= ~(ICANON); // Clear ICANON 
+  new_attributes.c_cc[VMIN] = 1;
+  new_attributes.c_cc[VTIME] = 0;
+#endif
+  // FIXME correctly test for _POSIX_VDISABLE;
+  new_attributes.c_cc[VINTR] = _POSIX_VDISABLE;
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &new_attributes);
+#endif
+}
+
+#ifdef HAVE_WIDE_CURSES
+#  define IS_KEY(k) (res == KEY_CODE_YES && c == KEY_##k)
+#  define NOT_KEY (res != KEY_CODE_YES)
+#else
+#  define IS_KEY(k) (c == KEY_##k)
+#  define NOT_KEY (c < 256)
+#endif
+
+void get_line(String & line) {
+#if   HAVE_LIBCURSES
+  if (use_curses) {
+    // FIXME: This won't work correctly when combing characters are
+    // involved.
+    menu_text = ReplMenu;
+    display_menu();
+    wnoutrefresh(choice_w);
+    doupdate();
+    line.resize(0);
+#ifdef HAVE_WIDE_CURSES
+    wint_t c;
+#else
+    int c;
+#endif
+    noecho();
+    int begin_x;
+    {int junk; getyx(choice_w, junk, begin_x);}
+    int max_x = COLS - 1;
+    int end_x = begin_x;
+    while (true) {
+      handle_last_signal();
+#ifdef HAVE_WIDE_CURSES
+      int res = wget_wch(choice_w, &c);
+      if (res == ERR) continue;
+#else
+      c = wgetch(choice_w);
+      if (c == ERR) continue;
+#endif
+      if (c == '\r' || c == '\n' || c == KEY_ENTER) 
+        break;
+      if (c == control('c') || c == KEY_BREAK) {
+        end_x = begin_x;
+        break;
+      }
+      int y,x;
+      getyx(choice_w,y,x);
+      if ((IS_KEY(LEFT) || c == control('b')) && begin_x < x) {
+        wmove(choice_w, y,x-1);
+      } else if ((IS_KEY(RIGHT) || c == control('f')) && x < end_x) {
+        wmove(choice_w, y,x+1);
+      } else if (IS_KEY(HOME) || c == control('a')) {
+        wmove(choice_w, y, begin_x);
+      } else if (IS_KEY(END)  || c == control('e')) {
+        wmove(choice_w, y, end_x);
+      } else if ((IS_KEY(BACKSPACE) || c == control('h') || c == '\x7F') 
+                 && begin_x < x) {
+        wmove(choice_w, y,x-1);
+        wdelch(choice_w);
+        --end_x;
+      } else if (IS_KEY(DC) || c == control('d')) {
+        wdelch(choice_w);
+        --end_x;
+      } else if (IS_KEY(EOL) || c == control('k')) {
+        wclrtoeol(choice_w);
+        end_x = x;
+      } else if (x < max_x && 32 <= c && c != '\x7F' && NOT_KEY /*c < 256*/) {
+#ifdef HAVE_WIDE_CURSES
+        wchar_t wc = c;
+        cchar_t cc;
+        setcchar(&cc, &wc, 0, 0, NULL);
+        wins_wch(choice_w, &cc);
+#else
+        winsch(choice_w, c);
+#endif
+        wmove(choice_w, y, x+1);
+        ++end_x;
+      }
+      wrefresh(choice_w);
+    }
+#ifdef HAVE_WIDE_CURSES
+    Vector<wchar_t> wstr;
+    for (int i = begin_x; i < end_x; ++i) {
+      cchar_t cc;
+      attr_t att;
+      short cp;
+      mvwin_wch(choice_w, 0, i, &cc);
+      size_t s = getcchar(&cc, 0, &att, &cp, 0);
+      wstr.resize(s+1); // +1 to allow room for the null character
+      getcchar(&cc, wstr.data(), &att, &cp, 0);
+      s = wcstombs(0, wstr.data(), 0);
+      if (s != (size_t)-1) {
+        int pos = line.alloc(s); // this always leaves space for the
+                                 // null character
+        wcstombs(line.data(pos), wstr.data(), s);
+      } else {
+        line += '?';
+      }
+    }
+#else
+    for (int i = begin_x; i < end_x; ++i) {
+      line += mvwinch(choice_w, 0, i) & A_CHARTEXT;
+    }
+#endif
+    menu_text = StdMenu;
+    display_menu();
+    doupdate();
+  } else 
+#endif
+  {
+#if   POSIX_TERMIOS
+    tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
+#endif
+    line.resize(0);
+    char c;
+    while ((c = getchar()) != '\n')
+      line += c;
+#if   POSIX_TERMIOS
+    tcsetattr (STDIN_FILENO, TCSANOW, &new_attributes);
+#endif
+  }
+  if (uiconv.conv) {
+    line = uiconv(line);
+  }
+}
+
+#undef IS_KEY
+#undef NOT_KEY
+    
+void get_choice(int & c) {
+#if   HAVE_LIBCURSES
+  if (use_curses) {
+    doupdate();
+    int c0;
+    do {
+      handle_last_signal();
+      c0 = wgetch(choice_w);
+    } while (c0 == ERR);
+    if (c0 == KEY_BREAK)
+      c0 = control('c');
+    if (1 <= c0 && c0 < 128) {
+      c = static_cast<char>(c0);
+      waddch(choice_w,c);
+      wrefresh(choice_w);
+    } else {
+      c = 0;
+    }
+  } else
+#endif
+  {
+#if   POSIX_TERMIOS
+    int c0 = 0;
+    read (STDIN_FILENO, &c0, 1);
+    c = c0;
+    putchar('\n');
+#elif HAVE_GETCH
+    c = getch();
+    putchar(c);
+    putchar('\n');
+#else
+    c = getchar();
+    char d = c;
+    while (d != '\n') d = getchar();
+    putchar('\n');
+#endif
+  }
+}
+
+#if   HAVE_LIBCURSES
+static void new_line(int & l, int y, int height) {
+  --l;
+  if (y == height - 1) {
+    wmove(text_w, 0, 0);
+    wdeleteln(text_w);
+    wmove(text_w, height-1, 0);
+  } else {
+    wmove(text_w,y+1,0);
+  }
+}
+static void new_line(int & l, int height) {
+  int y,x;
+  getyx(text_w,y,x);
+  new_line(l,y,height);
+}
+#endif
+
+void display_misspelled_word() {
+
+  const char * word_begin = state->word_begin();
+  const char * word_end   = state->word_end();
+  LineIterator cur_line = state->cur_line();
+
+#if   HAVE_LIBCURSES
+
+  if (use_curses && text_w) {
+    int height, width;
+    werase(text_w);
+    getmaxyx(text_w,height,width);
+    assert(height > 0 && width > 0);
+
+    LineIterator i = cur_line;
+    
+    //
+    // backup height/3 lines
+    //
+    int l = height/3;
+    while (!i.off_end() && l > 0) {
+      --l;
+      --i;
+    }
+    if (i.off_end()) ++i;
+
+    while (l != 0)
+      new_line(l,height);
+
+    l = -1;
+
+    const char * j = i->begin();
+    while (!i.off_end()) {
+
+      int y,x;
+      int y0,x0;
+      getyx(text_w, y, x);
+      x0 = x;
+      y0 = y;
+
+      wattrset(text_w,A_NORMAL);
+      int last_space_pos = 0;
+      const char * last_space = j;
+      int prev_glyph_pos = 0;
+      const char * prev_glyph = j;
+
+      // NOTE: Combining characters after a character at the very end of
+      //   a line will cause an unnecessary word wrap.  Unfortunately I
+      //   do not know how to avoid it as they is no portable way to
+      //   find out if the next character will combine with the
+      //   previous.
+
+      // We check that:
+      // - we haven't reached the end of the text
+      // - we haven't reached the end of the line
+      // - curse haven't jumped to the next screen line
+      // - curse haven't reached the end of the screen
+      while (j < i->end()
+             && *j != '\n' 
+             && (y0 == y && x >= x0) 
+             && x0 < width - 1)
+      {
+        if (asc_isspace(*j)) {
+          last_space_pos = x;
+          last_space = j;
+        }
+        if (j == word_begin) {
+          wattrset(text_w,A_REVERSE);
+          l = height*2/3;
+        } else if (j == word_end) {
+          wattrset(text_w,A_NORMAL);
+        }
+        
+        int len = mblen(j, MB_CUR_MAX);
+        int res = OK;
+        if (len > 0) {
+          res = waddnstr(text_w, const_cast<char *>(j), len);
+        } else {
+          waddch(text_w, ' ');
+          len = 1;
+        }
+
+        j += len;
+        x0 = x;
+        getyx(text_w, y, x);
+
+        if (x != x0 || res == ERR) {
+          prev_glyph_pos = x0;
+          prev_glyph = j - len;
+        }
+        
+      }
+      y = y0;
+      if (j == i->end() || *j == '\n') {
+        ++i;
+        j = i->begin();
+      } else {
+        if (width - last_space_pos < width/3) {
+          wmove(text_w, y, last_space_pos);
+          wclrtoeol(text_w);
+          j = last_space + 1;
+        } else {
+          wmove(text_w, y, prev_glyph_pos);
+          wclrtoeol(text_w);
+          j = prev_glyph;
+        }
+        wmove(text_w, y, width-1);
+        wattrset(text_w,A_NORMAL);
+        waddch(text_w,'\\');
+      }
+
+      if (l == 0) break;
+      new_line(l,y,height);
+    }
+
+    while (l != 0)
+      new_line(l,height);
+      
+    wnoutrefresh(text_w);
+
+  } else if (use_curses && !text_w) {
+    // do nothing
+  } else
+#endif
+  {
+    int pre  = word_begin - cur_line->begin();
+    int post = cur_line->end() - word_end;
+    if (pre)
+      fwrite(cur_line->begin(), pre, 1, stdout);
+    putchar('*');
+    fwrite(word_begin, word_end - word_begin, 1, stdout);
+    putchar('*');
+    if (post)
+      fwrite(word_end, post, 1, stdout);
+  }
+}
+
+static inline void put (FILE * out, char c) {putc(c, out);}
+static inline void put (FILE * out, const char * s) {fputs(s, out);}
+static inline void put (FILE * out, const char * s, int size) {fwrite(s, size, 1, out);}
+
+static void print_truncate(FILE * out, const char * word, int width) {
+  int i;
+  int len = 0;
+  for (i = 0; i < width-1 && *word; word += len, ++i) {
+    len = mblen(word, MB_CUR_MAX);
+    if (len > 0) {
+      put(out, word, len);
+    } else {
+      put(out, ' ');
+      len = 1;
+    }
+  }
+  if (i == width-1) {
+    if (word == '\0')
+      put(out,' ');
+    else if (word[len] == '\0')
+      put(out, word, len);
+    else
+      put(out,'$');
+    ++i;
+  }
+  for (;i < width; ++i)
+    put(out,' ');
+}
+
+static void display_menu(FILE * out, const Choices * choices, int width, 
+                         Conv & conv = null_conv) 
+{
+  if (width <= 11) return;
+  Choices::const_iterator i = choices->begin();
+  while (i != choices->end()) {
+    put(out,i->choice);
+    put(out,") ");
+    print_truncate(out, conv(i->desc), width/2 - 4);
+    put(out,' ');
+    ++i;
+    if (i != choices->end()) {
+      put(out,i->choice);
+      put(out,") ");
+      print_truncate(out, conv(i->desc), width/2 - 4);
+      ++i;
+    }
+    putc('\n', out);
+  }
+}
+
+#if   HAVE_LIBCURSES
+
+static inline void put (WINDOW * w, char c) 
+{
+  waddch(w,static_cast<unsigned char>(c));
+}
+static inline void put (WINDOW * w, const char * c) 
+{
+  waddstr(w,const_cast<char *>(c));
+}
+static inline void put (WINDOW * w, const char * c, int size)
+{
+  waddnstr(w,const_cast<char *>(c), size);
+}
+
+static void print_truncate(WINDOW * out, const char * word, int width) {
+  int len = 0;
+  int y,x;
+  int y0;
+  getyx(out, y, x);
+  int stop = x + width - 1;
+  while (x <= stop && *word) {
+    len = mblen(word, MB_CUR_MAX);
+    if (len <= 0) len = 1;
+    put(out, word, len);
+    word += len;
+    y0 = y;
+    getyx(out, y, x);
+    if (y != y0) {y = y0; x = stop + 1; break;}
+  }
+  for (; x <= stop; ++x)
+    put(out, ' ');
+  if (x > stop && *word) {
+    wmove(out, y, stop);
+    put(out,'$');
+  }
+}
+
+static void display_menu(WINDOW * out, const Choices * choices, int width,
+                         Conv & conv = null_conv) 
+{
+  if (width <= 11) return;
+  Choices::const_iterator i = choices->begin();
+  int y,x;
+  getyx(out, y, x);
+  while (i != choices->end()) {
+    wclrtoeol(out);
+    put(out,i->choice);
+    put(out,") ");
+    print_truncate(out, conv(i->desc), width/2 - 4);
+    ++i;
+    if (i != choices->end()) {
+      wmove(out, y, width/2);
+      put(out,i->choice);
+      put(out,") ");
+      print_truncate(out, conv(i->desc), width/2 - 4);
+      ++i;
+    }
+    ++y;
+    wmove(out, y, 0);
+  }
+}
+
+#endif
+
+void display_menu() {
+#if   HAVE_LIBCURSES
+  if (use_curses && menu_w) {
+    if (menu_text == StdMenu) {
+      scrollok(menu_w,false);
+      int height,width;
+      getmaxyx(menu_w,height,width);
+      werase(menu_w);
+      wmove(menu_w,0,0);
+      display_menu(menu_w, word_choices.get(), width, dconv);
+      wmove(menu_w,5,0);
+      display_menu(menu_w, menu_choices.get(), width);
+      wnoutrefresh(menu_w);
+    } else {
+      //ostream str;
+      int height,width;
+      getmaxyx(menu_w,height,width);
+      struct MenuLine {
+        const char * capname;
+        const char * fun_key;
+        const char * control_key;
+        const char * desc;
+      };
+      static MenuLine menu_items[9] = {
+        {0, 
+         /* TRANSLATORS: This is a literal Key.*/
+         N_("Enter"), 
+         "", 
+         N_("Accept Changes")},
+        {0,
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Backspace"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-H"), 
+         N_("Delete the previous character")},
+        {"kcub1", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Left"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-B"), 
+         N_("Move Back one space")},
+        {"kcuf1", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Right"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-F"), 
+         N_("Move Forward one space")},
+        {"khome", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Home"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-A"), 
+         N_("Move to the beginning of the line")},
+        {"kend" , 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("End"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-E"), 
+         N_("Move to the end of the line")},
+        {"kdch1", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Delete"), 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-D"), 
+         N_("Delete the next character")},
+        {0, 
+         "", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-K"), 
+         N_("Kill all characters to the EOL")},
+        {0, 
+         "", 
+         /* TRANSLATORS: This is a literal Key. */
+         N_("Control-C"), 
+         N_("Abort This Operation")},
+      };
+      scrollok(menu_w,false);
+      werase(menu_w);
+      int beg = 0,end = 0;
+      int y,x,x0;
+      for (int i = 0; i != 9; ++i) {
+        wmove(menu_w, i, beg);
+        if (menu_items[i].capname == 0 
+            || tigetstr(const_cast<char *>(menu_items[i].capname)) != 0)
+        {
+          getyx(menu_w, y, x0);
+          put(menu_w, gt_(menu_items[i].fun_key));
+          getyx(menu_w, y, x);
+          if (x < beg || y != i) end = width;
+          else if (x > end) end = x;
+        }
+      }
+      beg = end + 2;
+      if (beg < width) for (int i = 0; i != 9; ++i) {
+        wmove(menu_w, i, beg);
+        put(menu_w, gt_(menu_items[i].control_key));
+        getyx(menu_w, y, x);
+        if (x < beg || y != i) end = width;
+        else if (x > end) end = x;
+      }
+      beg = end + 2;
+      int w = width - beg;
+      if (w > 1) for (int i = 0; i != 9; ++i) {
+        wmove(menu_w, i, beg);
+        print_truncate(menu_w, gt_(menu_items[i].desc), w);
+      }
+      wnoutrefresh(menu_w);
+    }
+  } else if (use_curses && !menu_w) {
+    // do nothing
+  } else 
+#endif
+  {
+    display_menu(stdout, word_choices.get(), 80, dconv);
+    display_menu(stdout, menu_choices.get(), 80);
+  }
+}
+
+void prompt(const char * prompt) {
+  last_prompt = prompt;
+#if   HAVE_LIBCURSES
+  if (use_curses) {
+    werase(choice_w);
+    waddstr(choice_w, const_cast<char *>(prompt));
+    wnoutrefresh(choice_w);
+  } else
+#endif
+  {
+    fputs(prompt, stdout);
+    fflush(stdout);
+  }
+}
+  
+void error(const char * error) {
+#if   HAVE_LIBCURSES 
+  if (use_curses) {
+    werase(choice_w);
+    waddstr(choice_w, const_cast<char *>(error));
+    wnoutrefresh(choice_w);
+  } else 
+#endif
+  {
+    fputs(error, stdout);
+    fputs(last_prompt, stdout);
+    fflush(stdout);
+  }
+}
+
+
diff --git a/prog/check_funs.hpp b/prog/check_funs.hpp
new file mode 100644 (file)
index 0000000..e0a4a0e
--- /dev/null
@@ -0,0 +1,42 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#ifndef check_fun__hh
+#define check_fun__hh
+
+#include "checker_string.hpp"
+#include "parm_string.hpp"
+#include "stack_ptr.hpp"
+#include "vector.hpp"
+
+#define MENU_HEIGHT 9
+
+using namespace acommon;
+
+extern StackPtr<CheckerString> state;
+
+extern const char * last_prompt;
+struct Choice {
+  char choice; 
+  const char * desc;
+  Choice() {}
+  Choice(char c, ParmString d) : choice(c), desc(d) {}
+};
+typedef Vector<Choice> Choices;
+extern StackPtr<Choices> word_choices;
+extern StackPtr<Choices> menu_choices;
+
+void get_choice(int & choice);
+void get_line(String & line);
+void begin_check();
+void display_misspelled_word();
+void display_menu();
+void prompt(const char * prompt);
+void error(const char * error);
+
+#define control(key) (1 + (key-'a'))
+  
+#endif
diff --git a/prog/checker_string.cpp b/prog/checker_string.cpp
new file mode 100644 (file)
index 0000000..7f0d1a0
--- /dev/null
@@ -0,0 +1,165 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002,2011 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <assert.h>
+
+#include "checker_string.hpp"
+#include "speller.hpp"
+#include "document_checker.hpp"
+#include "asc_ctype.hpp"
+#include "convert.hpp"
+
+extern Conv dconv;
+extern Conv uiconv;
+
+static int get_line(FILE * in, CheckerString::Line & d)
+{
+  d.clear();
+  int i;
+  while ((i = getc(in)), i != EOF)
+  {
+    d.real.push_back(static_cast<char>(i));
+    if (i == '\n') break;
+  }
+  if (dconv.conv) {
+    dconv.conv->convert(d.real.str(), d.real.size(), d.buf, dconv.buf0);
+    d.disp.str = d.buf.str();
+    d.disp.size = d.buf.size();
+  } else {
+    d.disp.str = d.real.str();
+    d.disp.size = d.real.size();
+  }
+  return d.real.size();
+}
+
+CheckerString::CheckerString(AspellSpeller * speller, 
+                             FILE * in, FILE * out, 
+                             int num_lines)
+  : in_(in), out_(out), speller_(speller)
+{
+  lines_.reserve(num_lines + 1);
+  for (; num_lines > 0; --num_lines)
+  {
+    lines_.resize(lines_.size() + 1);
+    int s = get_line(in_, lines_.back());
+    if (s == 0) break;
+  }
+  if (lines_.back().real.size() != 0)
+    lines_.resize(lines_.size() + 1);
+
+  end_ = lines_.end() - 1;
+  cur_line_ = lines_.begin();
+  diff_ = 0;
+  has_repl_ = false;
+
+  checker_.reset(new_document_checker(reinterpret_cast<Speller *>(speller)));
+  if (cur_line_->real.size()) {
+      checker_->process(cur_line_->real.data(), cur_line_->real.size());
+  }
+}
+
+CheckerString::~CheckerString()
+{
+  if (out_)
+    for (cur_line_ = first_line(); !off_end(cur_line_); next_line(cur_line_))
+    {
+      fwrite(cur_line_->real.data(), cur_line_->real.size(), 1, out_);
+      cur_line_->clear();
+    }
+  if (in_ != stdin)
+    fclose(in_);
+  if (out_ && out_ != stdout && out_ != stdout)
+    fclose(out_);
+}
+
+bool CheckerString::read_next_line()
+{
+  if (feof(in_)) return false;
+  Lines::iterator next = end_;
+  inc(next);
+  if (next == cur_line_) return false;
+  int s = get_line(in_, *end_);
+  if (s == 0) return false;
+  end_ = next;
+  if (out_ && end_->real.size() > 0)
+    fwrite(end_->real.data(), end_->real.size(), 1, out_);
+  end_->clear();
+  return true;
+}
+
+bool CheckerString::next_misspelling()
+{
+  if (off_end(cur_line_)) return false;
+  if (has_repl_) {
+    has_repl_ = false;
+    CharVector word;
+    bool correct = false;
+    // FIXME: This is a hack to avoid trying to check a word with a space
+    //        in it.  The correct action is to reparse to string and
+    //        check each word individually.  However doing so involves
+    //        an API enhancement in Checker.
+    for (int i = 0; i != real_word_size_; ++i) {
+      if (asc_isspace(*(real_word_begin_ + i)))
+        correct = true;
+    }
+    if (!correct)
+      correct = aspell_speller_check(speller_, &*real_word_begin_, real_word_size_);
+    diff_ += real_word_size_ - tok_.len;
+    tok_.len = real_word_size_;
+    if (!correct)
+      return true;
+  }
+  while ((tok_ = checker_->next_misspelling()).len == 0) {
+    next_line(cur_line_);
+    diff_ = 0;
+    if (off_end(cur_line_)) return false;
+    checker_->process(cur_line_->real.data(), cur_line_->real.size());
+  }
+  real_word_begin_ = cur_line_->real.begin() + tok_.offset + diff_;
+  real_word_size_  = tok_.len;
+  fix_display_str();
+  return true;
+}
+
+void CheckerString::replace(ParmString repl)
+{
+  assert(real_word_size_ > 0);
+  int offset = real_word_begin_ - cur_line_->real.begin();
+  aspell_speller_store_replacement(speller_, &*real_word_begin_, real_word_size_,
+                                   repl.str(), repl.size());
+  cur_line_->real.replace(real_word_begin_, real_word_begin_ + real_word_size_,
+                          repl.str(), repl.str() + repl.size());
+  real_word_begin_ = cur_line_->real.begin() + offset;
+  real_word_size_ = repl.size();
+  fix_display_str();
+  has_repl_ = true;
+}
+
+void CheckerString::fix_display_str()
+{
+  if (dconv.conv) {
+    cur_line_->buf.clear();
+    int s = real_word_begin_ - cur_line_->real.begin();
+    if (s > 0) dconv.conv->convert(cur_line_->real.data(), s, 
+                                   cur_line_->buf, dconv.buf0);
+    int off = cur_line_->buf.size();
+    dconv.conv->convert(real_word_begin_, real_word_size_, 
+                        cur_line_->buf, dconv.buf0);
+    disp_word_size_ = cur_line_->buf.size() - off;
+    s = cur_line_->real.end() - (real_word_begin_ + real_word_size_);
+    if (s > 0) dconv.conv->convert(cur_line_->real.data() + (cur_line_->real.size() - s), 
+                                  s, cur_line_->buf, dconv.buf0);
+    cur_line_->disp.str = cur_line_->buf.str();
+    cur_line_->disp.size = cur_line_->buf.size();
+    disp_word_begin_ = cur_line_->buf.data() + off;
+  } else {
+    cur_line_->disp.str  = cur_line_->real.str();
+    cur_line_->disp.size = cur_line_->real.size();
+    disp_word_size_  = real_word_size_;
+    disp_word_begin_ = real_word_begin_;
+  }
+}
+
diff --git a/prog/checker_string.hpp b/prog/checker_string.hpp
new file mode 100644 (file)
index 0000000..60d7aa4
--- /dev/null
@@ -0,0 +1,117 @@
+// This file is part of The New Aspell
+// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license
+// version 2.0 or 2.1.  You should have received a copy of the LGPL
+// license along with this library if you did not you can find
+// it at http://www.gnu.org/.
+
+#include <stdio.h>
+
+#include "aspell.h"
+
+#include "vector.hpp"
+#include "string.hpp"
+#include "simple_string.hpp"
+#include "document_checker.hpp"
+
+using namespace acommon;
+
+class CheckerString {
+public:
+
+  struct Line {
+    String       real;
+    SimpleString disp;
+    String       buf;
+    void clear() {real.clear(); disp.str = ""; disp.size = 0; buf.clear();}
+  };
+
+  typedef Vector<Line> Lines;
+  CheckerString(AspellSpeller * speller, FILE * in, FILE * out, int lines);
+  ~CheckerString();
+
+public: // but don't use
+  void inc(Lines::iterator & i) {
+    ++i;
+    if (i == lines_.end())
+      i = lines_.begin();
+  }
+  void dec(Lines::iterator & i) {
+    if (i == lines_.begin())
+      i = lines_.end();
+    --i;
+  }
+  void next_line(Lines::iterator & i) {
+    inc(i);
+    if (i == end_)
+      read_next_line();
+  }
+  bool off_end(Lines::iterator i) {
+    return i == end_;
+  }
+public:
+
+  class LineIterator {
+  public:
+    CheckerString * cs_;
+    Lines::iterator line_;
+
+    SimpleString * operator-> () {return &line_->disp;}
+
+    Line & get() {return *line_;}
+
+    void operator-- () {cs_->dec(line_);}
+    void operator++ () {cs_->next_line(line_);}
+    bool off_end () const {return cs_->off_end(line_);}
+
+    LineIterator() {}
+
+    LineIterator(CheckerString * cs, Lines::iterator l) : cs_(cs), line_(l) {}
+  };
+
+  LineIterator cur_line() {return LineIterator(this, cur_line_);}
+
+  const char * word_begin() {return disp_word_begin_;}
+  const char * word_end()   {return disp_word_begin_ + disp_word_size_;}
+  size_t word_size()        {return disp_word_size_;}
+
+  bool next_misspelling();
+  void replace(ParmString repl); // encoded in "real" encoding
+
+  char * get_real_word(String & w) {
+    w.clear();
+    w.insert(w.end(), real_word_begin_, real_word_begin_ + real_word_size_);
+    return w.mstr();
+  }
+
+private:
+  Lines::iterator first_line() {
+    Lines::iterator i = end_;
+    inc(i);
+    return i;
+  }
+
+  bool read_next_line();
+
+  Lines::iterator cur_line_;
+  Lines lines_;
+
+  String::iterator real_word_begin_;
+  int real_word_size_;
+  const char * disp_word_begin_;
+  int disp_word_size_;
+  
+  FILE * in_;
+  FILE * out_;
+
+  CopyPtr<DocumentChecker> checker_;
+  AspellSpeller * speller_;
+  Lines::iterator end_;
+  int diff_;
+  Token tok_;
+  bool has_repl_;
+
+  void fix_display_str();
+};
+
+
+typedef CheckerString::LineIterator LineIterator;
diff --git a/prog/compress.c b/prog/compress.c
new file mode 100644 (file)
index 0000000..c47ddf2
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2000-2004
+ * Kevin Atkinson
+ * Jose Da Silva
+ *
+ * Word-list-compress Version 0.2.1.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies  
+ * and that both that copyright notice and this permission notice 
+ * appear in supporting documentation.  Kevin Atkinson makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ * 
+ * Bug fixes and enhancements by Jose Da Silva, 2004.
+ *
+ */
+
+#include <stdio.h>
+
+#if defined(__CYGWIN__) || defined (_WIN32)
+
+#  include <io.h>
+#  include <fcntl.h>
+
+#  define SETBIN(fno)  _setmode( _fileno( fno ), _O_BINARY )
+
+#else
+
+#  define SETBIN(fno)
+
+#endif
+
+#define BUFSIZE 256    /* BUFSIZE must be 256 */
+
+static void usage ()
+{
+  fputs("Compresses or uncompresses sorted word lists.  Version 0.2.1\n",       stderr);
+  fputs("For best result the locale should be set to C before sorting by\n",    stderr);
+  fputs("  setting the environmental variable LANG to \"C\" before sorting.\n", stderr);
+  fputs("Copyright 2000-2004 by Kevin Atkinson.\n",                             stderr);
+  fputs("Usage: word-list-compress c[ompress]|d[ecompress]\n",       stderr);
+}
+
+/* PRECOND: bufsize >= 2 */
+static int get_word(FILE * in, char * w)
+{
+  int bufsize = BUFSIZE - 1;
+  register int c;
+
+  while (c = getc(in), c <= 32 && c != EOF);
+  if (c != EOF) {
+    do {
+      *w++ = (char)(c);
+    } while (c = getc(in), c > 32 && c != EOF && --bufsize);
+  }
+  *w = '\0';
+  ungetc(c, in);
+  if (c == EOF) return 0; /* done */
+  if (bufsize)  return 1; /* normal return */
+  return 2;              /* error, word larger than 255 chars */
+}
+
+int main (int argc, const char *argv[]) {
+
+  if (argc == 2) {
+    char c = argv[1][0];
+    if (c == '-') c = argv[1][1];
+
+    if (c == 'c') {
+
+      char s1[BUFSIZE];
+      char s2[BUFSIZE];
+      char * prev = s2;
+      char * cur = s1;
+      int errFlag;
+      *prev = '\0';
+
+      SETBIN (stdout);
+
+      while ((errFlag = get_word(stdin, cur)) == 1) {
+        int i = 0;
+        /* get the length of the prefix */
+       while (prev[i] != '\0' && prev[i] == cur[i])
+          ++i;
+        if (i > 31) {
+         if (putc('\0', stdout) < 0) goto error_out_c;
+        }
+       if (putc(i+1, stdout) < 0) goto error_out_c;
+       if (fputs(cur+i, stdout) < 0) goto error_out_c;
+
+       /* swap prev and next */
+       {
+         char * tmp = cur;
+         cur = prev;
+         prev = tmp;
+        }
+      }
+      if (fflush(stdout) < 0) goto error_out_c;
+      if (errFlag) goto error_in_c;
+      return 0;
+    }
+
+    if (c == 'd') {
+    
+      char cur[BUFSIZE+1];
+      int i;
+      int c;
+      int last_max = 0;
+
+      SETBIN (stdin);
+    
+      i = getc(stdin);
+      if (i != 1) goto error_in_d;
+      while (i != -1) {
+        if (i == 0)
+          i = getc(stdin);
+        --i;
+        if (i < 0 || i > last_max) goto error_in_d;
+        while ((c = getc(stdin)) > 32 && i < BUFSIZE)
+          cur[i++] = (char)c;
+       if (i >= BUFSIZE) goto error_in_d;
+        last_max = i;
+       cur[i] = '\n'; cur[++i] = '\0';
+       if (fputs(cur, stdout) < 0) goto error_out_d;
+        i = c;
+      }
+      return 0;
+      
+    error_in_c:
+    error_in_d:
+      fputs("ERROR: Corrupt Input.\n", stderr);
+      return 2;
+
+    error_out_c:
+    error_out_d:
+      /* output space full or other output fault */
+      fputs("ERROR: Output Data Error.\n", stderr);
+      return 3;
+    }
+  }
+  
+  usage();
+  return 1;
+}
diff --git a/prog/prezip.c b/prog/prezip.c
new file mode 100644 (file)
index 0000000..3835114
--- /dev/null
@@ -0,0 +1,260 @@
+/*
+ * Copyright (c) 2004
+ * Kevin Atkinson
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation.  Kevin Atkinson makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ */
+
+/*
+ * Format:
+ *   <data> ::= 0x02 <line>+ 0x1F 0xFF
+ *   <line> ::= <prefix> <rest>*
+ *   <prefix> ::= 0x00..0x1D | 0x1E 0xFF* 0x00..0xFE
+ *   <rest> ::= 0x20..0xFF | <escape>
+ *   <escape> ::= 0x1F 0x20..0x3F
+ *
+ * To decompress:
+ *   Take the first PREFIX_LEN characters from the previous line
+ *   and concatenate that with the rest, unescaping as necessary.
+ *   The PREFIX_LEN is the sum of the characters in <prefix>.
+ *   To unescape take the second character of <escape> and subtract 0x20.
+ *   If the prefix length is computed before unescaping characters.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#if defined(__CYGWIN__) || defined (_WIN32)
+
+#  include <io.h>
+#  include <fcntl.h>
+
+#  define SETBIN(fno)  _setmode( _fileno( fno ), _O_BINARY )
+
+#else
+
+#  define SETBIN(fno)
+
+#endif
+
+#define HEAD "prezip, a prefix delta compressor. Version 0.1.1, 2004-11-06"
+
+typedef struct Word {
+  char * str;
+  size_t alloc;
+} Word;
+
+#define INSURE_SPACE(cur,p,need)\
+  do {\
+    size_t pos = p - (cur)->str;\
+    if (pos + need + 1 < (cur)->alloc) break;\
+    (cur)->alloc = (cur)->alloc*3/2;\
+    (cur)->str = (char *)realloc((cur)->str, (cur)->alloc);\
+    p = (cur)->str + pos;\
+  } while (0)
+
+#define ADV(w, c) do {char * s = w + c;\
+                      while(w != s) {\
+                        if (*w == 0) ret = 3;\
+                        ++w;}} while (0)
+
+int main (int argc, const char *argv[]) {
+
+  if (argc < 2) {
+
+    goto usage;
+
+  } else if (strcmp(argv[1], "-z") == 0) {
+
+    Word w1,w2;
+    Word * prev = &w1;
+    Word * cur  = &w2;
+    char * w = 0;
+    char * p = 0;
+    int c,l;
+
+    w1.str = (char *)malloc(256);
+    w1.str[0] = '\0';
+    w1.alloc = 256;
+    w2.str = (char *)malloc(256);
+    w2.alloc = 256;
+
+    SETBIN (stdout);
+
+    putc(2, stdout);
+
+    c = 0;
+    while (c != EOF)
+    {
+      /* get next word */
+      w = cur->str;
+      while (c = getc(stdin), c != EOF && c != '\n') {
+        if (c >= 32) {
+          INSURE_SPACE(cur, w, 1);
+          *w++ = c;
+        } else {
+          INSURE_SPACE(cur, w, 2);
+          *w++ = 31;
+          *w++ = c + 32;
+        }
+      }
+
+      *w = 0;
+      p = prev->str;
+      w = cur->str;
+
+      /* get the length of the prefix */
+      l = 0;
+      while (p[l] != '\0' && p[l] == w[l]) ++l;
+
+      /* prefix compress, and write word */
+      if (l < 30) {
+        putc(l, stdout);
+      } else {
+        int i = l - 30;
+        putc(30, stdout);
+        while (i >= 255) {putc(255, stdout); i -= 255;}
+       putc(i, stdout);
+      }
+      fputs(w+l, stdout);
+
+      /* swap prev and next */
+      {
+        Word * tmp = cur;
+        cur = prev;
+        prev = tmp;
+      }
+    }
+
+    putc(31, stdout);
+    putc(255, stdout);
+
+    free(w1.str);
+    free(w2.str);
+
+  } else if (strcmp(argv[1], "-d") == 0) {
+
+    int ret = 0;
+
+    Word cur;
+    int c;
+    char * w;
+    unsigned char ch;
+
+    cur.str = (char *)malloc(256);
+    cur.alloc = 256;
+    w = cur.str;
+
+    SETBIN (stdin);
+
+    c = getc(stdin);
+
+    if (c == 2)
+    {
+      *w = '\0';
+      while (c != EOF && ret <= 0) {
+        ret = -1;
+        if (c != 2) {ret = 3; break;}
+        c = getc(stdin);
+        while (ret < 0) {
+          w = cur.str;
+          ADV(w, c);
+          if (c == 30) {
+            while (c = getc(stdin), c == 255) ADV(w, 255);
+            ADV(w, c);
+          }
+          while (c = getc(stdin), c > 30) {
+            INSURE_SPACE(&cur,w,1);
+            *w++ = (char)c;
+          }
+          *w = '\0';
+          for (w = cur.str; *w; w++) {
+            if (*w != 31) {
+              putc(*w, stdout);
+            } else {
+              ++w;
+              ch = *w;
+              if (32 <= ch && ch < 64) {
+                putc(ch - 32, stdout);
+              } else if (ch == 255) {
+                if (w[1] != '\0') ret = 3;
+                else              ret = 0;
+              } else {
+                ret = 3;
+              }
+            }
+          }
+          if (ret < 0 && c == EOF) ret = 4;
+          if (ret != 0)
+            putc('\n', stdout);
+        }
+      }
+    }
+    else if (c == 1)
+    {
+      int last_max = 0;
+      while (c != -1) {
+        if (c == 0)
+          c = getc(stdin);
+        --c;
+        if (c < 0 || c > last_max) {ret = 3; break;}
+        w = cur.str + c;
+        while (c = getc(stdin), c > 32) {
+          INSURE_SPACE(&cur,w,1);
+          *w++ = (char)c;
+        }
+        *w = '\0';
+        last_max = w - cur.str;
+        fputs(cur.str, stdout);
+        putc('\n', stdout);
+      }
+    }
+    else
+    {
+      ret = 2;
+    }
+
+    assert(ret >= 0);
+    if (ret > 0 && argc > 2)
+      fputs(argv[2], stderr);
+    if (ret == 2)
+      fputs("unknown format\n", stderr);
+    else if (ret == 3)
+      fputs("corrupt input\n", stderr);
+    else if (ret == 4)
+      fputs("unexpected EOF\n", stderr);
+
+    free (cur.str);
+
+    return ret;
+
+  } else if (strcmp(argv[1], "-V") == 0) {
+
+    printf("%s\n", HEAD);
+
+  } else {
+
+    goto usage;
+
+  }
+
+  return 0;
+
+  usage:
+
+  printf("%s\n"
+         "Usage:\n"
+         "  To Compress:   %s -z\n"
+         "  To Decompress: %s -d\n", HEAD, argv[0], argv[0]);
+  return 1;
+}
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
new file mode 100644 (file)
index 0000000..60bc80d
--- /dev/null
@@ -0,0 +1,4 @@
+top_srcdir = @top_srcdir@
+
+subsystem:
+       $(MAKE) -C ${top_srcdir}
diff --git a/scripts/aspell-import b/scripts/aspell-import
new file mode 100755 (executable)
index 0000000..637eee3
--- /dev/null
@@ -0,0 +1,84 @@
+#!/usr/bin/perl
+
+#
+# aspell-import -- Perl script to import old dictionaries
+#
+# This file is part of The New Aspell
+# Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL
+# license version 2.0 or 2.1.  You should have received a copy of the
+# LGPL license along with this library if you did not you can find it
+# at http://www.gnu.org/.
+
+
+
+%abrv = qw( american     en
+           british      en
+           canadian     en
+           catala       ca
+           czech        cs
+           dansk        da
+           deutsch      de
+           ellhnika     el
+           english      en
+           espanol      es
+           esperanto    eo
+           francais     fr
+           german       de 
+           italian      it
+           liet         lt
+           nederlands   nl
+           norsk        no
+           polish       pl
+           portugues    pt
+           russian      ru
+           svenska      sv);
+
+chdir $ENV{HOME};
+
+foreach $file (<.ispell_*>, <.aspell.*.*>)
+{
+  $_ = $file;
+  if    (/^.ispell_(.+)$/)            {$lang = $1; $type = 'ispell'}
+  elsif (/^.aspell.(.+?).(per|pws)$/) {$lang = $1; $type = 'personal'}
+  elsif (/^.aspell.(.+?).(prepl)$/)   {$lang = $1; $type = 'repl'}
+  $abrv = $abrv{$lang};
+  if (not defined $abrv) {
+    print "Warning language \"$lang\" is not known\n" unless length $lang == 2;
+    next;
+  }
+  open IN, $file;
+  print "Processing \"~/$file\", lang = $abrv\n";
+  if ($type eq 'ispell' || $type eq 'personal') {
+    <IN> if $type eq 'personal';
+    while (<IN>) {
+      chop; 
+      push @{$words{$abrv}{per}}, $_;
+    }
+  } elsif ($type eq 'repl') {
+    $_ = <IN>;
+    if (!/^personal\_repl\-1\.1/) {
+      print "$file not in a supported format\n";
+      next;
+    }
+    while (<IN>) {
+      /^([^ ]+) (.+)\n$/ or die;
+      push @{$words{$abrv}{repl}}, [$1,$2];
+    }
+  }
+  close IN;
+}
+
+$SIG{PIPE} = 'IGNORE';
+
+foreach $abrv (keys %words) {
+  print "Merging $abrv\n";
+  open P, "| aspell -a --lang=$abrv --sug-mode=ultra" or next;
+  foreach (@{$words{$abrv}{per}}) {
+    print P "* $_\n";
+  }
+  foreach (@{$words{$abrv}{repl}}) {
+    print P "\$\$ra $_->[0],$_->[1]\n";
+  }
+  print P "#\n";
+  close P;
+}
diff --git a/scripts/ispell b/scripts/ispell
new file mode 100755 (executable)
index 0000000..7f42e8f
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Ispell compatibility script for Aspell
+
+# Uncomment this (remove the leading '#') to use the Ispell key
+#   mapping when checking files with the "ispell command".
+#CHECK_FLAGS="--keymapping=ispell"
+
+command=""
+
+for p 
+do
+  case $p in 
+  -a|-A|-l|-c|-e*|-v*|-D) command=$p ;; 
+  -*                    ) ;;
+  *                     ) command=${command:="-"} ;;
+  esac
+done
+
+case $command in
+-A          ) echo "Aspell does not support the $command mode.";;
+-a|-v*      ) exec aspell "$@" ;;
+-l          ) shift; exec aspell list "$@" ;;
+-c          ) shift; exec aspell munch "$@" ;;
+-e          ) shift; exec aspell expand "$@" ;;
+-e?         ) shift; exec aspell expand `expr "x$command" : '...\(.\)'` "$@" ;;
+-D          ) shift; exec aspell dump affix "$@" ;;
+"-"         ) exec aspell check $CHECK_FLAGS "$@" ;;
+*           ) echo "Ispell compatibility script for Aspell."
+              echo "Usage: $0 [options] -a|-l|-v[v]|-c|-e[1-4]|<file>"
+              exit 1 ;;
+esac
diff --git a/scripts/mkconfig b/scripts/mkconfig
new file mode 100755 (executable)
index 0000000..608e3f7
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+
+cat <<EOF > scripts/pspell-config
+#!/bin/sh
+
+# This script is provided for backward compatibility with programs
+# that use pspell.  Do not use as it will eventually go away.
+
+case \$1 in
+--version | version)
+  echo $1
+  ;;
+--datadir | datadir)
+  echo "$2"
+  ;;
+--pkgdatadir | pkgdatadir)
+  echo "$3"
+  ;;
+*)
+  echo "usage: pspell-config version|datadir|pkgdatadir"
+  ;;
+esac
+EOF
+
+chmod +x scripts/pspell-config
+
diff --git a/scripts/precat b/scripts/precat
new file mode 100755 (executable)
index 0000000..f8c4732
--- /dev/null
@@ -0,0 +1,260 @@
+#!/bin/sh
+
+# Copyright (c) 2004
+# Kevin Atkinson
+#
+# Permission to use, copy, modify, distribute and sell this software
+# and its documentation for any purpose is hereby granted without
+# fee, provided that the above copyright notice appear in all copies  
+# and that both that copyright notice and this permission notice 
+# appear in supporting documentation.  Kevin Atkinson makes no
+# representations about the suitability of this software for any
+# purpose.  It is provided "as is" without express or implied
+# warranty.
+
+cmd=`basename "$0"`
+
+warn () 
+{
+  if test -z "$quiet"; then echo "$cmd: $1" >&2 ; fi
+}
+
+error () 
+{
+  echo "$cmd: $1" >&2
+  errors=t
+}
+
+zip2 ()
+{
+  case $1 in
+  d) 
+    prezip-bin -d "$cmd: $2"
+    ;;
+  z)
+    if test "$sort"
+    then
+      LC_COLLATE=C sort -u | prezip-bin -z "$cmd: $2"
+    else
+      prezip-bin -z "$cmd: $2"
+    fi
+    ;;
+  esac
+  if test $? -eq 0
+  then
+    return 0
+  else
+    errors=t
+    return 1
+  fi
+}
+
+zip ()
+{
+  if test -e "$3" -a ! "$force"
+  then
+    error "Output file $3 already exists."
+    return 1
+  fi
+  zip2 $1 "$2: " < "$2" > "$3"
+  if test $? -eq 0
+  then
+    if test -z "$keep"; then rm "$2"; fi
+    return 0
+  else
+    rm "$3"
+    return 1
+  fi
+}
+
+case $cmd in
+prezip)   mode=z ;;
+preunzip) mode=d ;; 
+precat)   mode=d; stdout=t ;;
+*)        mode=h ;;
+esac
+
+num=0
+for p
+do
+  case $p in
+  --*)
+    parm=`expr "x$p" : '...\(.*\)'`
+    case $parm in
+    decompress ) mode=d ;;
+    compress   ) mode=z ;;
+    keep       ) keep=t ;;
+    force      ) force=t ;;
+    stdout     ) stdout=t ;;
+    sort       ) sort=t ;;
+    nocwl      ) nocwl=t ;;
+    license    ) mode=L ;;
+    version    ) mode=V ;;
+    help       ) mode=h ;;
+    quiet      ) quiet=t ;;
+    *          ) error "invalid option -- $parm";;
+    esac
+    ;;
+  -* ) 
+    p=`expr "x$p" : '..\(.*\)'`
+    while test "$p"
+    do
+      parm=`expr "$p" : '\(.\)'`
+      p=`expr "$p" : '.\(.*\)'`
+      case $parm in
+      d ) mode=d ;;
+      z ) mode=z ;;
+      k ) keep=t ;;
+      f ) force=t ;;
+      c ) stdout=t ;;
+      s ) sort=t ;;
+      S ) nocwl=t ;;
+      L ) mode=L ;;
+      V ) mode=V ;;
+      h ) mode=h ;;
+      q ) quiet=t ;;
+      * ) error "invalid option -- $parm";;
+      esac
+    done
+    ;;
+  * )
+    num=`expr $num + 1`
+    ;;
+  esac
+done
+
+if test "$errors" 
+then
+  mode=h
+fi
+
+case $mode in
+h ) 
+  prezip-bin -V
+  cat <<EOF
+
+  usage $0 [-dzhLV] [-cfksSq] [file ...]
+
+   -h --help        display help
+   -d --decompress  force decompression
+   -z --compress    dorce compression
+   -L --license     display software license
+   -V --version     display version
+
+   -c --stdout      decompress to standard output
+   -f --force       force
+   -k --keep        keep input files
+   -s --sort        sort and remove duplicates before compressing
+   -S --nocwl       do not rename .wl suffix to .cwl (use .wl.pz instead)
+   -q --quiet       suppress all warnings
+
+  If invoked as "prezip" the default action is to compress.
+             as "preunzip" the default action is to decompress.
+             as "precat" the default action is to decompress to stdout.
+
+  If no file names are given then prezip will compress or decompress
+  from the standard input to the standard output.  Short flags can be
+  combined so that "-c -s" is the same as "-cs".
+
+  Prezip is _not_ a general purpose compressor.  It should only be
+  used on sorted word lists or other similar text files.  It will
+  likely _increase_ the size of binary data.
+
+EOF
+  ;;
+L )
+  prezip-bin -V
+  cat <<EOF
+
+  Copyright (c) 2004
+  Kevin Atkinson
+
+  Permission to use, copy, modify, distribute and sell this software
+  and its documentation for any purpose is hereby granted without
+  fee, provided that the above copyright notice appear in all copies  
+  and that both that copyright notice and this permission notice 
+  appear in supporting documentation.  Kevin Atkinson makes no
+  representations about the suitability of this software for any
+  purpose.  It is provided "as is" without express or implied
+  warranty.
+
+EOF
+  ;;
+V ) 
+  prezip-bin -V
+  ;;
+d | z )
+if test $num -gt 0
+then
+  for f
+  do
+    case $f in
+    -* ) ;;
+    * )
+      if test \( -f "$f" -a ! -L "$f" \) \
+              -o \( \( "$stdout" -o "$force" \) -a -L "$f" \)
+      then
+        if test "$stdout"
+        then
+          zip2 $mode "$f: " < "$f"
+        else
+          case $mode in
+          d )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .pz`
+            base2=`basename "$f" .cwl`
+            if test "$file" != "$base"
+            then
+              out="$dir/$base"
+              zip d "$f" "$out"
+            elif test "$file" != "$base2"
+            then
+              out="$dir/$base2.wl"
+              zip d "$f" "$out"
+            elif test "$force"
+            then 
+              out="$f.out"
+              warn "can't guess original name - using \"$out\""
+              zip d "$f" "$out"
+            else
+              warn "$f does not end in .pz or .cwl - ignored"
+            fi
+            ;;
+          z )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .wl`
+            if test "$nocwl" -o "$file" = "$base"
+            then
+              zip z "$f" "$f.pz"
+            else
+              zip z "$f" "$dir/$base.cwl"
+            fi
+            ;;
+          esac
+        fi
+      elif test -e "$f"
+      then
+        warn "$f is not a regular file - ignored"
+      else
+        error "$f: No such file"
+      fi
+      ;;
+    esac
+  done
+else
+  case $mode in
+  d ) zip2 d ;;
+  z ) zip2 z ;;
+  esac
+fi
+;;
+esac
+
+if test "$errors" 
+then
+  exit 1
+else
+  exit 0
+fi
diff --git a/scripts/preunzip b/scripts/preunzip
new file mode 100755 (executable)
index 0000000..f8c4732
--- /dev/null
@@ -0,0 +1,260 @@
+#!/bin/sh
+
+# Copyright (c) 2004
+# Kevin Atkinson
+#
+# Permission to use, copy, modify, distribute and sell this software
+# and its documentation for any purpose is hereby granted without
+# fee, provided that the above copyright notice appear in all copies  
+# and that both that copyright notice and this permission notice 
+# appear in supporting documentation.  Kevin Atkinson makes no
+# representations about the suitability of this software for any
+# purpose.  It is provided "as is" without express or implied
+# warranty.
+
+cmd=`basename "$0"`
+
+warn () 
+{
+  if test -z "$quiet"; then echo "$cmd: $1" >&2 ; fi
+}
+
+error () 
+{
+  echo "$cmd: $1" >&2
+  errors=t
+}
+
+zip2 ()
+{
+  case $1 in
+  d) 
+    prezip-bin -d "$cmd: $2"
+    ;;
+  z)
+    if test "$sort"
+    then
+      LC_COLLATE=C sort -u | prezip-bin -z "$cmd: $2"
+    else
+      prezip-bin -z "$cmd: $2"
+    fi
+    ;;
+  esac
+  if test $? -eq 0
+  then
+    return 0
+  else
+    errors=t
+    return 1
+  fi
+}
+
+zip ()
+{
+  if test -e "$3" -a ! "$force"
+  then
+    error "Output file $3 already exists."
+    return 1
+  fi
+  zip2 $1 "$2: " < "$2" > "$3"
+  if test $? -eq 0
+  then
+    if test -z "$keep"; then rm "$2"; fi
+    return 0
+  else
+    rm "$3"
+    return 1
+  fi
+}
+
+case $cmd in
+prezip)   mode=z ;;
+preunzip) mode=d ;; 
+precat)   mode=d; stdout=t ;;
+*)        mode=h ;;
+esac
+
+num=0
+for p
+do
+  case $p in
+  --*)
+    parm=`expr "x$p" : '...\(.*\)'`
+    case $parm in
+    decompress ) mode=d ;;
+    compress   ) mode=z ;;
+    keep       ) keep=t ;;
+    force      ) force=t ;;
+    stdout     ) stdout=t ;;
+    sort       ) sort=t ;;
+    nocwl      ) nocwl=t ;;
+    license    ) mode=L ;;
+    version    ) mode=V ;;
+    help       ) mode=h ;;
+    quiet      ) quiet=t ;;
+    *          ) error "invalid option -- $parm";;
+    esac
+    ;;
+  -* ) 
+    p=`expr "x$p" : '..\(.*\)'`
+    while test "$p"
+    do
+      parm=`expr "$p" : '\(.\)'`
+      p=`expr "$p" : '.\(.*\)'`
+      case $parm in
+      d ) mode=d ;;
+      z ) mode=z ;;
+      k ) keep=t ;;
+      f ) force=t ;;
+      c ) stdout=t ;;
+      s ) sort=t ;;
+      S ) nocwl=t ;;
+      L ) mode=L ;;
+      V ) mode=V ;;
+      h ) mode=h ;;
+      q ) quiet=t ;;
+      * ) error "invalid option -- $parm";;
+      esac
+    done
+    ;;
+  * )
+    num=`expr $num + 1`
+    ;;
+  esac
+done
+
+if test "$errors" 
+then
+  mode=h
+fi
+
+case $mode in
+h ) 
+  prezip-bin -V
+  cat <<EOF
+
+  usage $0 [-dzhLV] [-cfksSq] [file ...]
+
+   -h --help        display help
+   -d --decompress  force decompression
+   -z --compress    dorce compression
+   -L --license     display software license
+   -V --version     display version
+
+   -c --stdout      decompress to standard output
+   -f --force       force
+   -k --keep        keep input files
+   -s --sort        sort and remove duplicates before compressing
+   -S --nocwl       do not rename .wl suffix to .cwl (use .wl.pz instead)
+   -q --quiet       suppress all warnings
+
+  If invoked as "prezip" the default action is to compress.
+             as "preunzip" the default action is to decompress.
+             as "precat" the default action is to decompress to stdout.
+
+  If no file names are given then prezip will compress or decompress
+  from the standard input to the standard output.  Short flags can be
+  combined so that "-c -s" is the same as "-cs".
+
+  Prezip is _not_ a general purpose compressor.  It should only be
+  used on sorted word lists or other similar text files.  It will
+  likely _increase_ the size of binary data.
+
+EOF
+  ;;
+L )
+  prezip-bin -V
+  cat <<EOF
+
+  Copyright (c) 2004
+  Kevin Atkinson
+
+  Permission to use, copy, modify, distribute and sell this software
+  and its documentation for any purpose is hereby granted without
+  fee, provided that the above copyright notice appear in all copies  
+  and that both that copyright notice and this permission notice 
+  appear in supporting documentation.  Kevin Atkinson makes no
+  representations about the suitability of this software for any
+  purpose.  It is provided "as is" without express or implied
+  warranty.
+
+EOF
+  ;;
+V ) 
+  prezip-bin -V
+  ;;
+d | z )
+if test $num -gt 0
+then
+  for f
+  do
+    case $f in
+    -* ) ;;
+    * )
+      if test \( -f "$f" -a ! -L "$f" \) \
+              -o \( \( "$stdout" -o "$force" \) -a -L "$f" \)
+      then
+        if test "$stdout"
+        then
+          zip2 $mode "$f: " < "$f"
+        else
+          case $mode in
+          d )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .pz`
+            base2=`basename "$f" .cwl`
+            if test "$file" != "$base"
+            then
+              out="$dir/$base"
+              zip d "$f" "$out"
+            elif test "$file" != "$base2"
+            then
+              out="$dir/$base2.wl"
+              zip d "$f" "$out"
+            elif test "$force"
+            then 
+              out="$f.out"
+              warn "can't guess original name - using \"$out\""
+              zip d "$f" "$out"
+            else
+              warn "$f does not end in .pz or .cwl - ignored"
+            fi
+            ;;
+          z )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .wl`
+            if test "$nocwl" -o "$file" = "$base"
+            then
+              zip z "$f" "$f.pz"
+            else
+              zip z "$f" "$dir/$base.cwl"
+            fi
+            ;;
+          esac
+        fi
+      elif test -e "$f"
+      then
+        warn "$f is not a regular file - ignored"
+      else
+        error "$f: No such file"
+      fi
+      ;;
+    esac
+  done
+else
+  case $mode in
+  d ) zip2 d ;;
+  z ) zip2 z ;;
+  esac
+fi
+;;
+esac
+
+if test "$errors" 
+then
+  exit 1
+else
+  exit 0
+fi
diff --git a/scripts/prezip b/scripts/prezip
new file mode 100755 (executable)
index 0000000..f8c4732
--- /dev/null
@@ -0,0 +1,260 @@
+#!/bin/sh
+
+# Copyright (c) 2004
+# Kevin Atkinson
+#
+# Permission to use, copy, modify, distribute and sell this software
+# and its documentation for any purpose is hereby granted without
+# fee, provided that the above copyright notice appear in all copies  
+# and that both that copyright notice and this permission notice 
+# appear in supporting documentation.  Kevin Atkinson makes no
+# representations about the suitability of this software for any
+# purpose.  It is provided "as is" without express or implied
+# warranty.
+
+cmd=`basename "$0"`
+
+warn () 
+{
+  if test -z "$quiet"; then echo "$cmd: $1" >&2 ; fi
+}
+
+error () 
+{
+  echo "$cmd: $1" >&2
+  errors=t
+}
+
+zip2 ()
+{
+  case $1 in
+  d) 
+    prezip-bin -d "$cmd: $2"
+    ;;
+  z)
+    if test "$sort"
+    then
+      LC_COLLATE=C sort -u | prezip-bin -z "$cmd: $2"
+    else
+      prezip-bin -z "$cmd: $2"
+    fi
+    ;;
+  esac
+  if test $? -eq 0
+  then
+    return 0
+  else
+    errors=t
+    return 1
+  fi
+}
+
+zip ()
+{
+  if test -e "$3" -a ! "$force"
+  then
+    error "Output file $3 already exists."
+    return 1
+  fi
+  zip2 $1 "$2: " < "$2" > "$3"
+  if test $? -eq 0
+  then
+    if test -z "$keep"; then rm "$2"; fi
+    return 0
+  else
+    rm "$3"
+    return 1
+  fi
+}
+
+case $cmd in
+prezip)   mode=z ;;
+preunzip) mode=d ;; 
+precat)   mode=d; stdout=t ;;
+*)        mode=h ;;
+esac
+
+num=0
+for p
+do
+  case $p in
+  --*)
+    parm=`expr "x$p" : '...\(.*\)'`
+    case $parm in
+    decompress ) mode=d ;;
+    compress   ) mode=z ;;
+    keep       ) keep=t ;;
+    force      ) force=t ;;
+    stdout     ) stdout=t ;;
+    sort       ) sort=t ;;
+    nocwl      ) nocwl=t ;;
+    license    ) mode=L ;;
+    version    ) mode=V ;;
+    help       ) mode=h ;;
+    quiet      ) quiet=t ;;
+    *          ) error "invalid option -- $parm";;
+    esac
+    ;;
+  -* ) 
+    p=`expr "x$p" : '..\(.*\)'`
+    while test "$p"
+    do
+      parm=`expr "$p" : '\(.\)'`
+      p=`expr "$p" : '.\(.*\)'`
+      case $parm in
+      d ) mode=d ;;
+      z ) mode=z ;;
+      k ) keep=t ;;
+      f ) force=t ;;
+      c ) stdout=t ;;
+      s ) sort=t ;;
+      S ) nocwl=t ;;
+      L ) mode=L ;;
+      V ) mode=V ;;
+      h ) mode=h ;;
+      q ) quiet=t ;;
+      * ) error "invalid option -- $parm";;
+      esac
+    done
+    ;;
+  * )
+    num=`expr $num + 1`
+    ;;
+  esac
+done
+
+if test "$errors" 
+then
+  mode=h
+fi
+
+case $mode in
+h ) 
+  prezip-bin -V
+  cat <<EOF
+
+  usage $0 [-dzhLV] [-cfksSq] [file ...]
+
+   -h --help        display help
+   -d --decompress  force decompression
+   -z --compress    dorce compression
+   -L --license     display software license
+   -V --version     display version
+
+   -c --stdout      decompress to standard output
+   -f --force       force
+   -k --keep        keep input files
+   -s --sort        sort and remove duplicates before compressing
+   -S --nocwl       do not rename .wl suffix to .cwl (use .wl.pz instead)
+   -q --quiet       suppress all warnings
+
+  If invoked as "prezip" the default action is to compress.
+             as "preunzip" the default action is to decompress.
+             as "precat" the default action is to decompress to stdout.
+
+  If no file names are given then prezip will compress or decompress
+  from the standard input to the standard output.  Short flags can be
+  combined so that "-c -s" is the same as "-cs".
+
+  Prezip is _not_ a general purpose compressor.  It should only be
+  used on sorted word lists or other similar text files.  It will
+  likely _increase_ the size of binary data.
+
+EOF
+  ;;
+L )
+  prezip-bin -V
+  cat <<EOF
+
+  Copyright (c) 2004
+  Kevin Atkinson
+
+  Permission to use, copy, modify, distribute and sell this software
+  and its documentation for any purpose is hereby granted without
+  fee, provided that the above copyright notice appear in all copies  
+  and that both that copyright notice and this permission notice 
+  appear in supporting documentation.  Kevin Atkinson makes no
+  representations about the suitability of this software for any
+  purpose.  It is provided "as is" without express or implied
+  warranty.
+
+EOF
+  ;;
+V ) 
+  prezip-bin -V
+  ;;
+d | z )
+if test $num -gt 0
+then
+  for f
+  do
+    case $f in
+    -* ) ;;
+    * )
+      if test \( -f "$f" -a ! -L "$f" \) \
+              -o \( \( "$stdout" -o "$force" \) -a -L "$f" \)
+      then
+        if test "$stdout"
+        then
+          zip2 $mode "$f: " < "$f"
+        else
+          case $mode in
+          d )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .pz`
+            base2=`basename "$f" .cwl`
+            if test "$file" != "$base"
+            then
+              out="$dir/$base"
+              zip d "$f" "$out"
+            elif test "$file" != "$base2"
+            then
+              out="$dir/$base2.wl"
+              zip d "$f" "$out"
+            elif test "$force"
+            then 
+              out="$f.out"
+              warn "can't guess original name - using \"$out\""
+              zip d "$f" "$out"
+            else
+              warn "$f does not end in .pz or .cwl - ignored"
+            fi
+            ;;
+          z )
+            dir=`dirname "$f"`
+            file=`basename "$f"`
+            base=`basename "$f" .wl`
+            if test "$nocwl" -o "$file" = "$base"
+            then
+              zip z "$f" "$f.pz"
+            else
+              zip z "$f" "$dir/$base.cwl"
+            fi
+            ;;
+          esac
+        fi
+      elif test -e "$f"
+      then
+        warn "$f is not a regular file - ignored"
+      else
+        error "$f: No such file"
+      fi
+      ;;
+    esac
+  done
+else
+  case $mode in
+  d ) zip2 d ;;
+  z ) zip2 z ;;
+  esac
+fi
+;;
+esac
+
+if test "$errors" 
+then
+  exit 1
+else
+  exit 0
+fi
diff --git a/scripts/run-with-aspell.create b/scripts/run-with-aspell.create
new file mode 100644 (file)
index 0000000..42c400d
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+echo "#!/bin/sh"
+echo "PATH=$1:\$PATH"
+echo "export PATH"
+echo "exec \$@"
+
diff --git a/scripts/spell b/scripts/spell
new file mode 100755 (executable)
index 0000000..7dfb2c1
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# aspell list mimicks the standard unix spell program, roughly.
+
+cat "$@" | aspell list --mode=none | sort -u
+
diff --git a/win32/Makefile b/win32/Makefile
new file mode 100644 (file)
index 0000000..6836907
--- /dev/null
@@ -0,0 +1,507 @@
+# aspell-0.50.2/win32/Makefile / 02-06-10      vim600:fdm=marker
+# Author : Thorsten Maerz <torte@netztorte.de> vim:ts=32
+#
+# Standalone makefile for building GNU Aspell-0.50 using MinGW / GCC3.2
+#
+################################################################################
+#
+# DEBUGVERSION=1: uncomment to include debugging symbols
+#DEBUGVERSION=1
+
+# CURSESDIR=<path>: (optional) location of pdcurses headers and libs
+#CURSESDIR=../../pdcurses
+
+# MSVCLIB=LIB.EXE: (optional) build import .lib for MS VC++ (needs ms lib.exe)
+#MSVCLIB=LIB.EXE
+
+# TARGET=<path-and-prefix>: (optional) prefix for cross compilation
+#TARGET=i586-mingw32msvc-
+
+# USE_GCC_2X=1: use gcc2.x (not working)
+#USE_GCC_2X=1
+
+# WIN32_RELOCATABLE=1: uncomment to have user files in <prefix>
+WIN32_RELOCATABLE=1
+
+################################################################################
+
+prefix=c:/aspell
+pkglibdir=$(prefix)/dict
+pkgdatadir=$(prefix)/data
+sysconfdir=$(prefix)
+
+top_srcdir=..
+installdir=$(prefix)
+
+################################################################################
+# {{{1 compiler settings
+
+ifdef DEBUGVERSION
+       DEBUGFLAG=-g
+else
+       OPTIMIZATION=-O3
+endif
+
+ifdef CURSESDIR
+       CURSES_INCLUDE=-I$(CURSESDIR)
+       CURSES_LIB=$(CURSESDIR)/panel.a $(CURSESDIR)/pdcurses.a
+       CURSES_DEFINES=-DHAVE_LIBCURSES -DCURSES_NON_POSIX
+endif
+
+ifdef USE_GCC_2X
+       # gcc-2.x: -fnative-struct
+       BITFIELD=-fnative-struct
+       GCC2LIBS=-lmingwex -liberty
+else
+       # gcc-3.x: -mms-bitfields
+       BITFIELD=-mms-bitfields
+endif
+
+ifdef WIN32_RELOCATABLE
+       WIN32RELOC=-DENABLE_WIN32_RELOCATABLE
+endif
+
+# cygwin: built native w32 code
+NOCYGWIN=-mno-cygwin
+
+################################################################################
+
+LIBVERSION=15
+ASPELLVERSION=0-50-3
+
+CCOMPILER=gcc
+CPPCOMPILER=g++
+CC=$(TARGET)$(CCOMPILER)
+CXX=$(TARGET)$(CPPCOMPILER)
+AR=$(TARGET)ar
+ARFLAGS=rcv
+DEFINES=$(CURSES_DEFINES) $(WIN32RELOC)
+EXTRALIBS=
+RESOURCE=
+RESCOMP=$(TARGET)windres
+STRIP=$(TARGET)strip
+NATIVE_CC=$(NATIVE)$(CCOMPILER)
+NATIVE_CXX=$(NATIVE)$(CPPCOMPILER)
+
+VPATH= $(top_srcdir)/common:\
+       $(top_srcdir)/modules/filter:\
+       $(top_srcdir)/modules/speller/default:\
+       $(top_srcdir)/modules/tokenizer:\
+       $(top_srcdir)/lib:\
+       $(top_srcdir)/prog
+INCLUDES = \
+       -I. \
+       -I${top_srcdir}/common \
+       -I$(top_srcdir)/interfaces/cc \
+       -I$(top_srcdir)/modules/filter \
+       -I$(top_srcdir)/modules/speller/default \
+       -I$(top_srcdir)/modules/tokenizer \
+       $(CURSES_INCLUDE)
+
+FLAGS=$(DEBUGFLAG) $(BITFIELD) $(NOCYGWIN) $(OPTIMIZATION)
+CFLAGS=$(FLAGS) $(DEFINES) $(INCLUDES)
+CXXFLAGS=$(CFLAGS)
+SUPPORTLIBS=
+LIBS=-lstdc++ $(GCC2LIBS)
+
+################################################################################
+# {{{1 targets
+#
+ifndef DEBUGVERSION 
+all_strip:     all strip
+endif
+
+all: \
+       aspell_common_a \
+       aspell_filter_standard_a \
+       aspell_speller_default_a \
+       aspell_tokenizer_a \
+       aspell_dll \
+       pspell_dll \
+       aspell_exe \
+       word_list_compress_exe \
+       msvc_lib
+clean: \
+       aspell_common_clean \
+       aspell_filter_standard_clean \
+       aspell_speller_default_clean \
+       aspell_tokenizer_clean \
+       aspell_dll_clean \
+       pspell_dll_clean \
+       aspell_exe_clean \
+       word_list_compress_clean \
+       msvc_lib_clean \
+       regfile_clean
+       
+################################################################################
+# {{{1 aspell-common
+#
+ASPELL_COMMON_A_NAME=aspell-common-$(ASPELLVERSION).a
+
+aspell_common_OBJECTS = \
+       string.o \
+       getdata.o \
+       itemize.o \
+       file_util.o \
+       string_buffer.o \
+       string_map.o \
+       string_list.o \
+       config.o \
+       posib_err.o \
+       errors.o \
+       error.o \
+       fstream.o \
+       iostream.o \
+       info.o \
+       can_have_error.o \
+       convert.o \
+       tokenizer.o \
+       speller.o \
+       document_checker.o \
+       filter.o \
+       strtonum.o
+
+string.o:      string.cpp
+getdata.o:     getdata.cpp
+itemize.o:     itemize.cpp
+file_util.o:   file_util.cpp
+string_buffer.o:       string_buffer.cpp
+string_map.o:  string_map.cpp
+string_list.o: string_list.cpp
+config.o:      config.cpp
+posib_err.o:   posib_err.cpp
+errors.o:      errors.cpp
+error.o:       error.cpp
+fstream.o:     fstream.cpp
+iostream.o:    iostream.cpp
+info.o:        info.cpp
+can_have_error.o:      can_have_error.cpp
+convert.o:     convert.cpp
+tokenizer.o:   tokenizer.cpp
+speller.o:     speller.cpp
+document_checker.o:    document_checker.cpp
+filter.o:      filter.cpp
+strtonum.o:    strtonum.cpp
+
+dirs.h: mk-dirs_h
+       echo '#define PREFIX "${prefix}"'            >  dirs.h
+       ./mk-dirs_h ${prefix} DICT_DIR ${pkglibdir}  >> dirs.h
+       ./mk-dirs_h ${prefix} DATA_DIR ${pkgdatadir} >> dirs.h
+       ./mk-dirs_h ${prefix} CONF_DIR ${sysconfdir} >> dirs.h
+
+mk-dirs_h: mk-dirs_h.cpp
+       $(NATIVE_CXX) $< $(LIBS) -o $@
+
+config.cpp: dirs.h
+
+aspell_common_a: $(ASPELL_COMMON_A_NAME) 
+$(ASPELL_COMMON_A_NAME): dirs.h $(aspell_common_OBJECTS)
+       $(AR) $(ARFLAGS) \
+       $@ \
+       $(aspell_common_OBJECTS)
+aspell_common_clean:
+       -rm $(aspell_common_OBJECTS) \
+       $(ASPELL_COMMON_A_NAME) \
+       mk-dirs_h.exe mk-dirs_h \
+       dirs.h
+
+#######################################################################
+# {{{1 aspell-filter-standard
+#
+ASPELL_FILTER_STANDARD_A_NAME=aspell-filter-standard.a
+aspell_filter_standard_EXTRALIBS = \
+       $(ASPELL_COMMON_A_NAME)
+
+aspell_filter_standard_OBJECTS = \
+       email.o \
+       url.o \
+       tex.o \
+       sgml.o \
+
+email.o:       email.cpp
+url.o: url.cpp
+tex.o: tex.cpp
+sgml.o:        sgml.cpp
+
+aspell_filter_standard_a: $(ASPELL_FILTER_STANDARD_A_NAME)
+$(ASPELL_FILTER_STANDARD_A_NAME): $(aspell_filter_standard_OBJECTS)
+       $(AR) $(ARFLAGS) \
+       $@ \
+       $+
+aspell_filter_standard_clean:
+       -rm $(aspell_filter_standard_OBJECTS) \
+        $(ASPELL_FILTER_STANDARD_A_NAME)
+
+#######################################################################
+# {{{1 aspell-speller-default
+#
+ASPELL_SPELLER_DEFAULT_A_NAME=aspell-speller-default.a
+aspell_speller_default_EXTRALIBS = \
+       $(ASPELL_COMMON_A_NAME)
+
+aspell_speller_default_OBJECTS = \
+       data.o \
+       leditdist.o \
+       primes.o \
+       writable_base.o \
+       editdist.o \
+       speller_impl.o \
+       readonly_ws.o \
+       writable_repl.o \
+       file_data_util.o \
+       multi_ws.o \
+       split.o \
+       writable_ws.o \
+       l2editdist.o \
+       phonet.o \
+       suggest.o \
+       language.o \
+       phonetic.o \
+       typo_editdist.o \
+
+data.o:        data.cpp
+leditdist.o:   leditdist.cpp
+primes.o:      primes.cpp
+writable_base.o:       writable_base.cpp
+editdist.o:    editdist.cpp
+speller_impl.o:        speller_impl.cpp
+readonly_ws.o: readonly_ws.cpp
+writable_repl.o:       writable_repl.cpp
+file_data_util.o:      file_data_util.cpp
+multi_ws.o:    multi_ws.cpp
+split.o:       split.cpp
+writable_ws.o: writable_ws.cpp
+l2editdist.o:  l2editdist.cpp
+phonet.o:      phonet.cpp
+suggest.o:     suggest.cpp
+language.o:    language.cpp
+phonetic.o:    phonetic.cpp
+typo_editdist.o:       typo_editdist.cpp
+
+aspell_speller_default_a: $(ASPELL_SPELLER_DEFAULT_A_NAME)
+$(ASPELL_SPELLER_DEFAULT_A_NAME): $(aspell_speller_default_OBJECTS)
+       $(AR) $(ARFLAGS) \
+       $@ \
+       $+
+aspell_speller_default_clean:
+       -rm $(aspell_speller_default_OBJECTS) \
+       $(ASPELL_SPELLER_DEFAULT_A_NAME)
+
+################################################################################
+# {{{1 aspell-tokenizer
+#
+ASPELL_TOKENIZER_A_NAME=aspell-tokenizer.a
+aspell_tokenizer_EXTRALIBS = \
+       $(ASPELL_COMMON_A_NAME)
+
+aspell_tokenizer_OBJECTS = \
+       basic.o \
+
+basic.o:       basic.cpp
+
+aspell_tokenizer_a: $(ASPELL_TOKENIZER_A_NAME)
+$(ASPELL_TOKENIZER_A_NAME): $(aspell_tokenizer_OBJECTS)
+       $(AR) $(ARFLAGS) \
+       $@ \
+       $+
+aspell_tokenizer_clean:
+       -rm $(aspell_tokenizer_OBJECTS) \
+       $(ASPELL_TOKENIZER_A_NAME)
+
+################################################################################
+# {{{1 aspell-dll
+#
+ASPELL_DLL_NAME=aspell-$(LIBVERSION).dll
+ASPELL_DLL_LIB_NAME=libaspell-$(LIBVERSION)-dll.lib
+ASPELL_DLL_DEF_NAME=aspell-$(LIBVERSION).def
+
+aspell_dll_EXTRALIBS = \
+       $(ASPELL_FILTER_STANDARD_A_NAME) \
+       $(ASPELL_SPELLER_DEFAULT_A_NAME) \
+       $(ASPELL_TOKENIZER_A_NAME) \
+       $(ASPELL_COMMON_A_NAME)
+aspell_dll_LDFLAGS = \
+       -Wl,--export-all-symbols \
+       -Wl,--compat-implib \
+       -Wl,--out-implib=$(ASPELL_DLL_LIB_NAME) \
+       -Wl,--output-def=$(ASPELL_DLL_DEF_NAME)
+
+aspell_dll_OBJECTS = \
+       can_have_error-c.o \
+       info-c.o \
+       string_list-c.o \
+       config-c.o \
+       speller-c.o \
+       string_map-c.o \
+       error-c.o \
+       mutable_container-c.o \
+       string_pair_enumeration-c.o \
+       find_speller.o \
+       new_checker.o \
+       new_filter.o \
+       new_config.o \
+       string_enumeration-c.o \
+       word_list-c.o \
+       filter-c.o \
+       document_checker-c.o \
+
+can_have_error-c.o:    can_have_error-c.cpp
+info-c.o:      info-c.cpp
+string_list-c.o:       string_list-c.cpp
+config-c.o:    config-c.cpp
+speller-c.o:   speller-c.cpp
+string_map-c.o:        string_map-c.cpp
+error-c.o:     error-c.cpp
+mutable_container-c.o: mutable_container-c.cpp
+string_pair_enumeration-c.o:   string_pair_enumeration-c.cpp
+find_speller.o:        find_speller.cpp
+new_checker.o: new_checker.cpp
+new_filter.o:  new_filter.cpp
+new_config.o:  new_config.cpp
+string_enumeration-c.o:        string_enumeration-c.cpp
+word_list-c.o: word_list-c.cpp
+filter-c.o:    filter-c.cpp
+document_checker-c.o:  document_checker-c.cpp
+
+aspell_dll: $(ASPELL_DLL_NAME)
+$(ASPELL_DLL_NAME): $(aspell_dll_OBJECTS)
+       $(CC) $(FLAGS) \
+       -shared \
+       $(aspell_dll_LDFLAGS) \
+       $+ \
+       $(aspell_dll_EXTRALIBS) \
+       $(LIBS) -o $@
+aspell_dll_clean:
+       -rm $(aspell_dll_OBJECTS) \
+       $(ASPELL_DLL_NAME) \
+       $(ASPELL_DLL_LIB_NAME) \
+       $(ASPELL_DLL_DEF_NAME)
+
+################################################################################
+# {{{1 pspell-dll
+#
+PSPELL_DLL_NAME=pspell-$(LIBVERSION).dll
+PSPELL_DLL_LIB_NAME=libpspell-$(LIBVERSION)-dll.lib
+PSPELL_DLL_DEF_NAME=pspell-$(LIBVERSION).def
+
+pspell_dll_LDFLAGS = \
+       -Wl,--compat-implib \
+       -Wl,--out-implib=$(PSPELL_DLL_LIB_NAME) \
+       -Wl,--output-def=$(PSPELL_DLL_DEF_NAME)
+pspell_dll_OBJECTS = \
+       dummy.o \
+
+dummy.o:       dummy.cpp
+
+pspell_dll: $(PSPELL_DLL_NAME)
+$(PSPELL_DLL_NAME): $(pspell_dll_OBJECTS)
+       $(CC) $(FLAGS) \
+       -shared \
+       $(pspell_dll_LDFLAGS) \
+       $+ \
+       $(LIBS) -o $@
+pspell_dll_clean:
+       -rm $(pspell_dll_OBJECTS) \
+       $(PSPELL_DLL_NAME) \
+       $(PSPELL_DLL_LIB_NAME) \
+       $(PSPELL_DLL_DEF_NAME)
+
+################################################################################
+# {{{1 aspell-exe
+#
+ASPELL_EXE_NAME=aspell.exe
+aspell_exe_EXTRALIBS = \
+       $(ASPELL_COMMON_A_NAME) \
+       $(ASPELL_DLL_LIB_NAME) \
+       $(PSPELL_DLL_LIB_NAME) \
+
+aspell_exe_OBJECTS = \
+       aspell.o \
+       check_funs.o \
+       checker_string.o \
+
+aspell.o:      aspell.cpp
+check_funs.o:  check_funs.cpp
+checker_string.o:      checker_string.cpp
+
+aspell_exe: $(ASPELL_EXE_NAME)
+$(ASPELL_EXE_NAME): $(aspell_exe_OBJECTS)
+       $(CC) $(FLAGS) \
+       $+ \
+       $(aspell_exe_EXTRALIBS) \
+       $(CURSES_LIB) \
+       $(LIBS) -o $@
+aspell_exe_clean:
+       -rm $(aspell_exe_OBJECTS) $(ASPELL_EXE_NAME)
+
+################################################################################
+# {{{1 word-list-compress
+#
+WORD_LIST_COMPRESS_EXE_NAME=word-list-compress.exe
+
+word_list_compress_OBJECTS = \
+       compress.o \
+
+compress.o:    compress.c
+
+word_list_compress_exe: $(WORD_LIST_COMPRESS_EXE_NAME)
+$(WORD_LIST_COMPRESS_EXE_NAME): $(word_list_compress_OBJECTS)
+       $(CC) $(FLAGS) \
+       $+ \
+       $(LIBS) -o $@
+word_list_compress_clean:
+       -rm $(word_list_compress_OBJECTS) $(WORD_LIST_COMPRESS_EXE_NAME)
+
+################################################################################
+# {{{1 strip
+#
+strip:
+       $(STRIP) -g \
+       $(ASPELL_DLL_NAME) \
+       $(PSPELL_DLL_NAME) \
+       $(ASPELL_EXE_NAME) \
+       $(WORD_LIST_COMPRESS_EXE_NAME)
+
+################################################################################
+# {{{1 msvc-lib
+#
+msvc_lib:
+ifdef MSVCLIB
+       -$(MSVCLIB) -machine:ix86 -def:$(ASPELL_DLL_DEF_NAME)
+       -$(MSVCLIB) -machine:ix86 -def:$(PSPELL_DLL_DEF_NAME)
+else
+       @echo "msvc .lib skipped"
+endif
+msvc_lib_clean:
+       -rm aspell-$(LIBVERSION).lib pspell-$(LIBVERSION).lib aspell-common-$(ASPELLVERSION).lib
+       -rm aspell-$(LIBVERSION).exp pspell-$(LIBVERSION).exp aspell-common-$(ASPELLVERSION).exp
+
+################################################################################
+# {{{1 install, regfile
+#
+REGFILE_NAME=aspell.reg
+
+$(REGFILE_NAME):
+       echo REGEDIT4           >  aspell.reg
+       echo            >> aspell.reg
+       echo [HKEY_CURRENT_USER\\Environment]   >> aspell.reg
+       echo \"ASPELL_CONF\"=\"prefix $(prefix)\"       >> aspell.reg
+
+regfile: $(REGFILE_NAME)
+regfile_clean:
+       -rm $(REGFILE_NAME)
+install: regfile
+       -mkdir $(installdir)
+       -mkdir $(installdir)/$(pkglibdir)
+       -mkdir $(installdir)/$(pkgdatadir)
+       -cp  $(WORD_LIST_COMPRESS_EXE_NAME) \
+           $(ASPELL_EXE_NAME) \
+           $(PSPELL_DLL_NAME) \
+           $(ASPELL_DLL_NAME) \
+           $(installdir)
+       -cp $(top_srcdir)/data/*.dat $(installdir)/$(pkgdatadir)
+       -cp $(top_srcdir)/data/*.kbd $(installdir)/$(pkgdatadir)
+       -cp $(REGFILE_NAME) $(installdir)
+       
+
+
diff --git a/win32/settings.h b/win32/settings.h
new file mode 100644 (file)
index 0000000..33a30fb
--- /dev/null
@@ -0,0 +1,92 @@
+/* common/settings.h.  Generated by configure.  */
+/* common/settings.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Defined if no special Workarounds are needed for Curses headers */
+/* #undef CURSES_INCLUDE_STANDARD */
+
+/* Defined if special Wordaround I is need for Curses headers */
+/* #undef CURSES_INCLUDE_WORKAROUND_1 */
+
+/* Defined if curses like POSIX Functions should be used */
+/* #undef CURSES_ONLY */
+
+/* Defined if win32 relocation should be used */
+/* #undef ENABLE_WIN32_RELOCATABLE */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
+
+/* Defined if msdos getch is supported */
+/* #undef HAVE_GETCH */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Defined if the curses library is available */
+/* #undef HAVE_LIBCURSES */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Defined if mmap and friends is supported */
+/* #undef HAVE_MMAP */
+
+/* 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 <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 <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 <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Name of package */
+#define PACKAGE "aspell"
+
+/* 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 ""
+
+/* Defined if Posix Termios is Supported */
+/* #undef POSIX_TERMIOS */
+
+/* Defined if STL rel_ops polute the global namespace */
+/* #undef REL_OPS_POLLUTION */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Defined if file ino is supported */
+/* #undef USE_FILE_INO */
+
+/* Defined if file locking and truncating is supported */
+/* #undef USE_FILE_LOCKS */
+
+/* Defined if Posix locales are supported */
+/* #undef USE_LOCALE */
+
+/* Version number of package */
+#define VERSION "0.50.3"